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
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.
AndroidAndroid Widget Java No se pueden ejecutar consultas con código SQL que contengan funciones WLanguage.
Example
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
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:
  • se debe especificar el nombre de la conexión (parámetro <Conexión>).
  • no se puede utilizar la siguiente función en la consulta: HFilter.
  • no se puede cancelar una condición asignándola a NULL.
  • no se debe especificar la navegación de Item en las siguientes funciones: HLast, HReadLast, HReadFirst, HFirst, HSeekLast, HSeekFirst.
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.
Universal Windows 10 App Esta constante no está disponible.
hNoBind
Native Connectors (Native Accesses) SQL Server, Oracle, Sybase: Se utiliza para ejecutar una consulta sin activar el enlace.
hSQLUnicode
Windows Mobile Se utiliza para especificar que el texto de la consulta debe enviarse en formato Unicode al servidor.
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>: 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..
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>: 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:
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.

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:
  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 HExecuteSQLQueryAsynchronous.
    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 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.
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 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.
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 QueriesWindows MobileAjaxUser 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 HExecuteSQLQueryAsynchronous.
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