PC SOFT

ONLINE HELP
 WINDEVWEBDEV AND WINDEV MOBILE

Home | Sign in | English EN

New WINDEV and WINDEV Mobile 26 feature!
  • 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
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReports and QueriesUser code (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Browser code
WINDEV Mobile
AndroidAndroid Widget iPhone/iPadApple WatchUniversal Windows 10 AppWindows Mobile
Others
Stored procedures
<Source>.ExecuteSQLQueryAsynchronous (Function)
In french: <Source>.ExécuteRequêteSQLAsynchrone
Ejecuta una consulta SQL asincrónica. Esta consulta SQL puede corresponder a:
  • el código SQL introducido directamente en la función <Source>.ExecuteSQLQueryAsynchronous.
  • 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.
AndroidAndroid Widget Java No se pueden ejecutar consultas con código SQL que contengan funciones WLanguage.
Example
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
Syntax

Executing an SQL query (without connection) Hide the details

<Result> = <Query>.ExecuteSQLQueryAsynchronous([<Mode>, ] <Text of SQL query> , <WLanguage procedure for each record> [, <End WLanguage procedure>])
<Result>: boolean
  • 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>: Data source
  • 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>: Optional Integer constant
Opción para iniciar la consulta:
hQueryDefault
(valor predeterminado)
Inicie la consulta.
hQueryWithoutCorrection
OLE DBNative Connectors (Native Accesses) El motor HFSQL no verifica la consulta. Esta opción debe utilizarse si la consulta contiene comandos específicos de un tipo de Connection (Oracle, SQL Server, etc.).
Atención: si se utiliza esta constante:
hQueryWithoutHFCorrection
HFSQL El motor HFSQL no verifica el formato del archivo de datos (con o sin espacios). Se debe utilizar si la consulta manipula archivos de datos HFSQL con un formato que se completa con espacios y con un formato que no se completa con espacios.
hNoBind
Native Connectors (Native Accesses) SQL Server, Oracle, Sybase: Se utiliza para ejecutar una consulta sin activar el enlace.
hSQLUnicode
Versions 16 and later
Java Acceso con JDBC: Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
AndroidAndroid Widget Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
New in version 16
Java Acceso con JDBC: Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
AndroidAndroid Widget Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
Java Acceso con JDBC: Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
AndroidAndroid Widget Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
<Text of SQL query>: Character string (with quotes)
Texto de la consulta SQL a ejecutar. Este texto puede corresponder a una cadena de caracteres en formato ANSI o en formato Unicode..
AndroidAndroid Widget Java No se pueden ejecutar consultas con código SQL que contengan funciones de WLanguage.
Este parámetro no está disponible si <Nombre de la consulta> corresponde a una consulta SQL Variable.
<WLanguage procedure for each record>: Procedure name
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>: Optional procedure name
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:
heqaCanceledEl procedimiento ejecutado para cada Record devolvió False. La consulta y los diferentes procedimientos fueron cancelados.
heqaErrorLa consulta y/o el procedimiento llamado para cada Record encontró un error. Puedes get los detalles del error con HErrorInfo.
heqaOKLa consulta y el procedimiento se ejecutaron correctamente para cada Record.

Executing an SQL query via a connection Hide the details

<Result> = <Query>.ExecuteSQLQueryAsynchronous([<Connection> [, <Mode>, ]] <Text of SQL query> , <WLanguage procedure for each record> [, <End WLanguage procedure>])
<Result>: Boolean
  • 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>: Data source
  • 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>..
<Connection>: Optional character string or 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>: Optional Integer constant
Opción para iniciar la consulta:
hQueryDefault
(valor predeterminado)
Inicie la consulta.
hQueryWithoutCorrection
OLE DBNative Connectors (Native Accesses) El motor HFSQL no verifica la consulta. Esta opción debe utilizarse si la consulta contiene comandos específicos de un tipo de Connection (Oracle, SQL Server, etc.).
Atención: si se utiliza esta constante:
hQueryWithoutHFCorrection
HFSQL El motor HFSQL no verifica el formato del archivo de datos (con o sin espacios). Se debe utilizar si la consulta manipula archivos de datos HFSQL con un formato que se completa con espacios y con un formato que no se completa con espacios.
hNoBind
Native Connectors (Native Accesses) SQL Server, Oracle, Sybase: Se utiliza para ejecutar una consulta sin activar el enlace.
hSQLUnicode
Versions 16 and later
Java Acceso con JDBC: Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
AndroidAndroid Widget Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
New in version 16
Java Acceso con JDBC: Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
AndroidAndroid Widget Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
Java Acceso con JDBC: Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
AndroidAndroid Widget Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
<Text of SQL query>: Character string (with quotes)
Texto de la consulta SQL a ejecutar. Este texto puede corresponder a una cadena de caracteres en formato ANSI o en formato Unicode..
AndroidAndroid Widget Java No se pueden ejecutar consultas con código SQL que contengan funciones de WLanguage.
Este parámetro no está disponible si <Nombre de la consulta> corresponde a una consulta SQL Variable.
<WLanguage procedure for each record>: Procedure name
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>: Optional procedure name
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:
heqaCanceledEl procedimiento ejecutado para cada Record devolvió False. La consulta y los diferentes procedimientos fueron cancelados.
heqaErrorLa consulta y/o el procedimiento llamado para cada Record encontró un error. Puedes get los detalles del error con HErrorInfo.
heqaOKLa consulta y el procedimiento se ejecutaron correctamente para cada Record.
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 <Source>.ExecuteSQLQueryAsynchronous, debe:
  1. 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}"
  2. Definir a Data source Variable. El nombre de esta variable debe corresponder al parámetro <Nombre de la consulta> de la función <Source>.ExecuteSQLQueryAsynchronous.
    Ejemplo:
    MyQuery is Data Source
  3. 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:
    MyQuery.p_name = "Doe"
  4. Ejecutar la consulta SQL con <Source>.ExecuteSQLQueryAsynchronous. Ejemplo:
    MyQuery.ExecuteSQLQueryAsynchronous("SELECT * FROM client WHERE name={p_name}", myProcRec)
Observación: La estructura de los parámetros de la consulta se restablece cada Time se ejecuta la consulta.
AndroidAndroid Widget No se dispone de consultas con parámetros. Sin embargo, las variables de 'consulta SQL' están disponibles. Este tipo de Variable puede corresponder a una consulta con parámetros. Para obtener más información, consulte Consulta SQL Variable.

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 <Source>.ExecuteSQLQueryAsynchronous, 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.
AndroidAndroid Widget No se dispone de consultas con parámetros. Sin embargo, las variables de 'consulta SQL' están disponibles. Este tipo de Variable puede corresponder a una consulta con parámetros. Para obtener más información, consulte Consulta SQL Variable.
Native Connectors (Native Accesses)

Combinaciones

Las uniones como (A unir B en x=y) unir C en y=z ... no son automáticamente soportados por los Accesos Nativos: En este caso, se debe utilizar la constante hQueryWithoutCorrection para gestionar este tipo de combinación.
Observación: Estas uniones son gestionadas por el motor HFSQL.
WINDEVWEBDEV - Server codeReports and QueriesAjaxUser code (UMC)OLE DBNative Connectors (Native Accesses)

Uso de la constante hQueryWithoutCorrection?

Por Default, WINDEV y WEBDEV interpretan las consultas SQL:
  • construido a través de un acceso nativo,
  • construido sobre OLEDB y sobre ODBC a través del proveedor OLE DB.
Para no interpretar la consulta, utilice la constante hQueryWithoutCorrection.
Si no se especifica hQueryWithoutCorrection Si se especifica hQueryWithoutCorrection
La Connection associated con los archivos de datos en la consulta se define automáticamente.La conexión que se utilizará debe especificarse en la función <Source>.ExecuteSQLQueryAsynchronous.
Todos los letreros de propiedad de PC SOFT son reemplazados (por ejemplo.: "]=" comienza con) con su equivalente en el estándar SQL.No se realiza ningún reemplazo. Se deben utilizar los símbolos de SQL estándar.
Formatear las fechas y horas de acuerdo con el formato utilizado por la base de datos..
Por ejemplo, las fechas están en formato 'AAAAMMDD' en WINDEV y WEBDEV mientras que en Access, las fechas están en formato #AAAADDMM# o #AAAAMMDD# dependiendo del idioma del sistema.
No se define ningún formato. Se debe utilizar el formato reconocido por las bases de datos.
Los flotadores están formateados (el separador decimal puede ser '.' o ',')No se define ningún formato para las comas flotantes.
Dependiendo de la base de datos utilizada, los alias se reemplazan por los nombres completos de los elementos en las cláusulas Where, Order by y Group by
Por ejemplo, el motor JET (Access, dBase, etc.) no acepta ningún alias en la cláusula Where de una consulta
No se realiza ningún reemplazo. Se deben utilizar los nombres completos de los elementos directamente en el código de la consulta, en las cláusulas Where, Order by y Group by.
Native Connectors (Native Accesses) Caso especial: Oracle y SQL Server: Si la consulta a ejecutar contiene un script con ":param" (Oracle) o "@param" (SQL Server), debe utilizar las constantes hQueryWithoutCorrection + hNoBind para que la consulta no sea interpretada.

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
Component : wd260hf.dll
Minimum version required
  • Version 26
This page is also available for…
Comments
Click [Add] to post a comment