|
|
|
|
- Texto de la consulta SQL
- Ejecutar una consulta SQL con parámetros
- inyección SQL: ¿Cómo prevenirlo?
- Combinaciones
- Uso de la constante hQueryWithoutCorrection?
- Condición de una clave compuesta en una consulta SQL
Ejecuta una consulta SQL asincrónica. Esta consulta SQL puede corresponder a: - el código SQL introducido directamente en la función .
- una variable de tipo SQL Query.
Condiciones de uso: - Este modo está destinado a las consultas cuya ejecución dura algunos segundos. Para consultas inmediatas o casi inmediatas, este modo es demasiado lento.
- La consulta debe ser del tipo "SELECCIONAR": debe devolver los registros.
- Una consulta sólo puede ser ejecutada asincrónicamente desde el contexto principal. En otros casos, es necesario utilizar hilos.
- Esta función no permite pasar parámetros a una consulta que ya tiene un parámetro. Los parámetros deben ser pasados antes de que la consulta sea ejecutada.
QRY_WDRSQL is Data Source QRY_WDRSQL.ExecuteSQLQueryAsynchronous(MyCS2Connection, hQueryDefault, "SELECT * FROM CLIENT" MyProcedureForEachRecord, MyFinalProcedure) INTERNAL PROCEDURE MyProcedureForEachRecord(rec is Record) Trace("Procedure for processing each Record" + rec.ItemName) END INTERNAL PROCEDURE MyFinalProcedure(MyRes is int) Trace("Procedure for processing the final result") SWITCH MyRes CASE heqaOK: Trace("The query and the record processing were correctly executed.") CASE heqaCanceled: Trace ("One process returned False. The query and the procedures have been canceled.") OTHER CASE: Trace("There was a problem with the procedure or with the execution of the query.") END END
Sintaxis
Ejecución de una consulta SQL (sin conexión) Ocultar los detalles
<Result> = <Query>.ExecuteSQLQueryAsynchronous([<Mode>, ] <SQL query text> , <WLanguage procedure for each record> [, <End WLanguage procedure>])
<Result>: karaoke - True si se inició la consulta,
- False en caso contrario. La función HError permite obtener más detalles sobre el problema.
<Query>: Fuente de datos - Nombre de la consulta que será ejecutada. Este nombre se utiliza para manipular el resultado de <Texto de la consulta SQL> a través de la programación. Si ya se ha declarado una consulta con el mismo nombre, se sustituye por la nueva consulta.
- Nombre de la consulta SQL Variable que contiene el código SQL de la consulta. En este caso, no se debe especificar el parámetro <Text of SQL query>..
<Mode>: Constante opcional de tipo Integer Opción para iniciar la consulta: | | hNoBind | | hQueryDefault (valor predeterminado) | Inicie la consulta. | hQueryWithoutCorrection | | hQueryWithoutHFCorrection | |
<SQL query text>: Cadena de caracteres Texto de la consulta SQL a ejecutar. Este texto puede corresponder a una cadena de caracteres en formato ANSI o en formato Unicode..
Este parámetro no está disponible si <nombre de la consulta> corresponde a una consulta SQL Variable. <WLanguage procedure for each record>: Nombre de Procedure Procedimiento WLanguage ("callback") ejecutado para cada Record que corresponde a la consulta encontrada. Este procedimiento tiene el siguiente formato:
PROCEDURE <Procedure name>(ARec is Record) donde <ARec> es una variable Record que corresponde al Record actual (para la consulta ejecutada). Por defecto, el procedimiento devuelve True y pasa al siguiente Record. Si esta Procedure devuelve False, la consulta se cancela y el <End WLanguage Procedure> se ejecuta. <End WLanguage procedure>: Nombre de procedimiento opcional WLanguage Procedure ("callback") ejecutado al final de la ejecución de la consulta. Este procedimiento tiene el siguiente formato:
PROCEDURE <Procedure name>(nResult is int) donde <nResultado> es una constante entera que puede corresponder a los siguientes valores: | | heqaCanceled | El procedimiento ejecutado para cada Record devolvió False. La consulta y los diferentes procedimientos fueron cancelados. | heqaError | La consulta y/o el procedimiento llamado para cada Record encontró un error. Puede get más detalles sobre el error con HErrorInfo. | heqaOK | La consulta y el procedimiento se ejecutaron correctamente para cada Record. |
Ejecución de una consulta SQL a través de una conexión Ocultar los detalles
<Result> = <Query>.ExecuteSQLQueryAsynchronous([<Connection> [, <Mode>, ]] <SQL query text> , <WLanguage procedure for each record> [, <End WLanguage procedure>])
<Result>: booleano - True si se inició la consulta,
- False en caso contrario. La función HError permite obtener más detalles sobre el problema.
<Query>: Fuente de datos - Nombre de la consulta que será ejecutada. Este nombre se utiliza para manipular el resultado de <Texto de la consulta SQL> a través de la programación. Si ya se ha declarado una consulta con el mismo nombre, se sustituye por la nueva consulta.
- Nombre de la consulta SQL Variable que contiene el código SQL de la consulta. En este caso, no se debe especificar el parámetro <Text of SQL query>..
<Connection>: Cadena de caracteres opcional o variable de tipo Connection Conexión utilizada para ejecutar la consulta. Esta conexión corresponde a: <Resultado> es set a False si este parámetro no corresponde a una conexión existente. <Mode>: Constante opcional de tipo Integer Opción para iniciar la consulta: | | hNoBind | | hQueryDefault (valor predeterminado) | Inicie la consulta. | hQueryWithoutCorrection | | hQueryWithoutHFCorrection | |
<SQL query text>: Cadena de caracteres Texto de la consulta SQL a ejecutar. Este texto puede corresponder a una cadena de caracteres en formato ANSI o en formato Unicode..
Este parámetro no está disponible si <nombre de la consulta> corresponde a una consulta SQL Variable. <WLanguage procedure for each record>: Nombre de Procedure Procedimiento WLanguage ("callback") ejecutado para cada Record que corresponde a la consulta encontrada. Este procedimiento tiene el siguiente formato:
PROCEDURE <Procedure name>(ARec is Record) donde <ARec> es una variable Record que corresponde al Record actual (para la consulta ejecutada). Por defecto, el procedimiento devuelve True y pasa al siguiente Record. Si esta Procedure devuelve False, la consulta se cancela y el <End WLanguage Procedure> se ejecuta. <End WLanguage procedure>: Nombre de procedimiento opcional WLanguage Procedure ("callback") ejecutado al final de la ejecución de la consulta. Este procedimiento tiene el siguiente formato:
PROCEDURE <Procedure name>(nResult is int) donde <nResultado> es una constante entera que puede corresponder a los siguientes valores: | | heqaCanceled | El procedimiento ejecutado para cada Record devolvió False. La consulta y los diferentes procedimientos fueron cancelados. | heqaError | La consulta y/o el procedimiento llamado para cada Record encontró un error. Puede get más detalles sobre el error con HErrorInfo. | heqaOK | La consulta y el procedimiento se ejecutaron correctamente para cada Record. |
Observaciones Texto de la consulta SQL Si un nombre de un archivo de datos o un nombre de ítem contiene caracteres de espacio, estos nombres deben ser encerrados entre corchetes en el texto de la consulta. Por ejemplo: SELECT [My File1].MyItem, [My File1].[My item1], MyFile2.[My key1]
FROM [My File1], MyFile2
WHERE [My File1].[My key1] = MyFile2.[My key1] Ejecutar una consulta SQL con parámetros Una consulta SQL puede contener parámetros. Para ejecutar este tipo de consulta SQL con , debe: - En el texto de la consulta SQL, defina los diferentes parámetros utilizando la notación {Nombre de parámetro}.. Por ejemplo:
"SELECT * FROM client WHERE name={p_name}" - Definir a Data source Variable. El nombre de esta variable debe corresponder al parámetro <Nombre de la consulta> de la función .
Ejemplo:
- Especifique el valor de los parámetros mediante la siguiente sintaxis:
<Data source variable >.<Name of Parameter1> = xxx <Data source variable >.<Name of Parameter2> = xxx <Data source variable >.<Name of Parameter3> = xxx Ejemplo:
- Ejecutar la consulta SQL con . Ejemplo:
MyQuery.ExecuteSQLQueryAsynchronous("SELECT * FROM client WHERE name={p_name}", myProcRec)
Observación: La estructura de los parámetros de consulta se restablece cada vez que se ejecuta la consulta. inyección SQL: ¿Cómo prevenirlo? La inyección SQL es una técnica de hacking. Consiste en inyectar código SQL en los parámetros de las consultas, forzando la ejecución de código SQL no deseado. Para evitar la inyección SQL al ejecutar consultas a través de , debe utilizar consultas con parámetros y no debe concatenar cadenas para construir la consulta. La utilización de parámetros no permite interpretar el contenido como código SQL. Esta técnica evita la inyección de código SQL y elimina varios riesgos de hacking. Condición de una clave compuesta en una consulta SQL Para definir una condición sobre una clave compuesta en una consulta SQL, las condiciones deben especificarse para cada Component de la clave. No intente asignar directamente un valor a la clave compuesta (de hecho, las claves compuestas se almacenan como valores binarios). Ejemplo: La clave compuesta se compone de los elementos LASTNAME y FIRSTNAME (Last Name First Name): SELECT MyFile.MyItem, MyFile.MyItem1
FROM MyFile
WHERE FileName.LastName = "Smith" AND FileName.FirstName = "Fred" Clasificación Lógica de negocio / UI: Lógica de negocio
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|