- 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
HExecuteSQLQueryAsynchronous (Function) In french: HExécuteRequêteSQLAsynchrone Ejecuta una consulta SQL asincrónica. Esta consulta SQL puede corresponder a: - el código SQL introducido directamente en la función HExecuteSQLQueryAsynchronous.
- una variable de tipo SQL Query.
Condiciones de uso: - 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 HExecuteSQLQueryAsynchronous(QRY_WDRSQL, 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
Syntax
Ejecutando una consulta SQL (sin Connection) Hide the details
<Result> = HExecuteSQLQueryAsynchronous(<Query> [, <Mode>] , <Text of SQL query> , <WLanguage procedure for each record> [, <End WLanguage procedure>])
<Result>: karaoke - True si la consulta fue inicializada (el código SQL de la consulta es válido),
- False en caso contrario. La función HError permite obtener más detalles sobre el problema.
<Query>: Cadena de caracteres (con o sin citas) o fuente de datos - Nombre de la consulta que será ejecutada. Este nombre se utiliza para manipular el resultado de <Text of SQL query> por programación. Si ya se ha declarado una consulta con el mismo nombre, se reemplaza 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: | | hQueryDefault (valor predeterminado) | Inicie la consulta. | hQueryWithoutCorrection | | hQueryWithoutHFCorrection | | hNoBind | | hSQLUnicode | |
Versions 16 and later New in version 16 <Text of SQL query>: Cadena de caracteres (con comillas) 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 de Record que corresponde a la 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 opcional de Procedure 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. Puedes get los detalles del error con HErrorInfo. | heqaOK | La consulta y el procedimiento se ejecutaron correctamente para cada Record. |
Ejecutando una consulta SQL a través de una Connection Hide the details
<Result> = HExecuteSQLQueryAsynchronous(<Query> [, <Connection> [, <Mode>]] , <Text of SQL query> , <WLanguage procedure for each record> [, <End WLanguage procedure>])
<Result>: booleano - True si la consulta fue inicializada (el código SQL de la consulta es válido),
- False en caso contrario. La función HError permite obtener más detalles sobre el problema.
<Query>: Cadena de caracteres (con o sin citas) o fuente de datos <Connection>: Cadena de caracteres opcional o Connection Variable Connection utilizada para ejecutar la consulta. Esta conexión corresponde a: <Resultado> se establece en False si este parámetro no corresponde a un Connection existente . <Mode>: Constante opcional de tipo Integer <Text of SQL query>: Cadena de caracteres (con comillas) <WLanguage procedure for each record>: Nombre de Procedure <End WLanguage procedure>: Nombre opcional de Procedure Remarks Texto de la consulta SQL Si un nombre de un archivo de datos o un nombre de Item 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 HExecuteSQLQueryAsynchronous, 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 HExecuteSQLQueryAsynchronous.
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 HExecuteSQLQueryAsynchronous. Ejemplo:
HExecuteSQLQueryAsynchronous(MyQuery, "SELECT * FROM client WHERE name={p_name}", hQueryDefault, myProcRec)
Observación: La estructura de los parámetros de la consulta se restablece cada Time 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 cuando se ejecutan consultas a través de HExecuteSQLQueryAsynchronous, se deben utilizar consultas con parámetros y no se deben 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 en una clave compuesta en una consulta SQL, las condiciones deben ser especificadas para cada componente 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 está hecha de apellido y nombre Item s (APELLIDOAPELLIDO DE PRIMERA PERSONA Item):
SELECT MyFile.MyItem, MyFile.MyItem1
FROM MyFile
WHERE FileName.LastName = "Smith" AND FileName.FirstName = "Fred"
Business / UI classification : Business Logic
This page is also available for…
|
|
|