AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / WLanguage / Administrar bases de datos / HFSQL / Funciones HFSQL
  • 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 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Ejecuta una consulta SQL asincrónica. Esta consulta SQL puede corresponder a:
  • el código SQL introducido directamente en la función .ExecuteSQLQueryAsynchronous.
  • 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.
AndroidWidget Android Java No se pueden ejecutar consultas con código SQL que contengan funciones WLanguage.
Ejemplo
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
Conectores Nativos SQL Server, Oracle, Sybase: Se utiliza para ejecutar una consulta sin activar la opción bind.
hQueryDefault
(valor predeterminado)
Inicie la consulta.
hQueryWithoutCorrection
OLE DBConectores Nativos El motor HFSQL no verifica la consulta. Esta opción debe utilizarse si la consulta contiene comandos específicos de un tipo de conexión (Oracle, SQL Server, etc.).
Atención: si se utiliza esta constante:
hQueryWithoutHFCorrection
HFSQL Classic 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.

Java Acceso con JDBC: Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
AndroidWidget Android Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
<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..
AndroidWidget Android 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 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:
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. Puede get más detalles sobre el error con HErrorInfo.
heqaOKLa 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
Conectores Nativos SQL Server, Oracle, Sybase: Se utiliza para ejecutar una consulta sin activar la opción bind.
hQueryDefault
(valor predeterminado)
Inicie la consulta.
hQueryWithoutCorrection
OLE DBConectores Nativos El motor HFSQL no verifica la consulta. Esta opción debe utilizarse si la consulta contiene comandos específicos de un tipo de conexión (Oracle, SQL Server, etc.).
Atención: si se utiliza esta constante:
hQueryWithoutHFCorrection
HFSQL Classic 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.

Java Acceso con JDBC: Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
AndroidWidget Android Este parámetro solo puede tomar el valor hQueryDefault. Si se utiliza otra constante, se genera un error.
<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..
AndroidWidget Android 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 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:
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. Puede get más detalles sobre el error con HErrorInfo.
heqaOKLa 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 .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 .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 .ExecuteSQLQueryAsynchronous. 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.
AndroidWidget Android 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 al ejecutar consultas a través de .ExecuteSQLQueryAsynchronous, 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.
AndroidWidget Android 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.
Conectores Nativos

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.
WINDEVReportes y ConsultasCódigo de Usuario (UMC)OLE DBConectores Nativos

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 conexión associated con los archivos de datos de la consulta se define automáticamente.La conexión que se utilizará debe especificarse en la función .ExecuteSQLQueryAsynchronous.
Todos los letreros de propiedad de PC SOFT son reemplazados (por ejemplo.: ']=' comienza con) con su equivalente en SQL estándar.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.

Conectores Nativos 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 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
Componente: wd290hf.dll
Versión mínima requerida
  • Versión 26
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 22/06/2023

Señalar un error o enviar una sugerencia | Ayuda local