- Lectura de datos durante la inicialización
- 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
- Consultas sobre archivos de datos HFSQL
- Optimización para ejecutar la misma consulta varias veces (sólo accesos nativos de Oracle y SQL Server)
- Especificación y recuperación de valores al ejecutar una consulta (procedimientos almacenados)
- Consultas SQL (función HExecuteSQLQuery o ejecución de consultas SQL creadas en el editor de consultas)
- Consultas de navegación (HReadFirst)
HExecuteSQLQuery (Función)
No disponible con este tipo de conexión
QryCustomer is Data Source // Initialize the "Customer" query HExecuteSQLQuery(CustomerQry, "SELECT NAME FROM CUSTOMER")
TaskQry is Data Source // Initialize the "TaskQry" query // This query is using a WLanguage function // This query selects the tasks exceeding 5 days HExecuteSQLQuery(TaskQry, ... "SELECT Task.Caption FROM Task" +... "WHERE WL.DateDifference(Task.StartTime, Task.EndDate) > 5")
// Dynamic modification of the LIMIT condition of a SQL query
QRY is Data Source
sMyQry is string = [ SELECT * FROM ZIPCODES %1 ]
sMyQry = StringBuild(sMyQry, "LIMIT 1, 10") IF NOT HExecuteSQLQuery(QRY, hQueryDefault, sMyQry) THEN Error(HErrorInfo()) ELSE Info("The query contains " + HNbRec(QRY) + " records.") END
Sintaxis
Ejecutando una consulta SQL (sin conexión) Ocultar los detalles
<Result> = HExecuteSQLQuery(<Query> [, <Mode>] , <Texto de la consulta SQL>)
<Result>: Boolean - True si se inicializó la consulta SQL,
- False en caso contrario. La función HErrorInfo permite obtener más detalles sobre el problema.
<Query>: Character string (with or without quotes) or data source - Nombre de la consulta que se ejecutará. 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.
Versiones 23 y posterioresNombre de 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>.. Este tipo de variable no está disponible. Nueva funcionalidad versión 23Nombre de 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>.. Este tipo de variable no está disponible. Nombre de 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>..
Este tipo de variable no está disponible.
<Mode>: Optional Integer constant Opción para iniciar la consulta: | | hWithFilter (constante que se puede combinar con las otras constantes) | Si se especifica este parámetro:- el resultado de la consulta corresponde a una selección de registros de tipo filtro si el motor HFSQL lo permite. De lo contrario, el resultado de la consulta corresponde a una vista HFSQL.
- las siguientes operaciones no están disponibles: buscar en el resultado de la consulta, consulta a partir de una consulta, vista a partir de una consulta, consulta a partir de una vista.
- los elementos de navegación especificados al navegar por el resultado no se tienen en cuenta.
- la lupa no está disponible en las tablas relacionadas con una consulta.
- no se puede utilizar la función HNbRec en las consultas.
Atención: si se especifica esta opción, la constante hModifyFile se utiliza automáticamente. Si no se especifica este parámetro (por Default ):- el resultado de la consulta corresponde a una vista HFSQL.
- se pueden realizar las siguientes operaciones en las consultas: buscar en el resultado de la consulta, consulta a partir de una consulta, vista a partir de una consulta, consulta a partir de una vista.
- los elementos de navegación especificados al navegar por el resultado se tienen en cuenta.
- la lupa está disponible en las tablas relacionadas con una consulta.
- se puede utilizar la función HNbRec en las consultas.
| hWithTransaction | La consulta se ejecuta en una transacción. Se inicia una transacción, los registros se bloquean durante la ejecución de la consulta y se desbloquean al final de su ejecución, independientemente del resultado de la consulta). Si la consulta no puede finalizar correctamente (registros bloqueados, corte de energía, etc.), se cancela la transacción y los archivos de datos se restauran al estado en el que se encontraban antes de ejecutar la consulta). Observación: la ejecución de la consulta puede ralentizarse.
| hModifyFile (constante que se puede combinar con las otras constantes) | - En archivos de datos HFSQL: Cuando se modifica el resultado de una consulta (funciones HAdd, HWrite, HModify, HCross, HDelete), las modificaciones se aplican a los archivos de datos que corresponden a la consulta.
Si no se especifica esta opción, solo se modifica el resultado de la consulta. Vea Modificar el contenido de una consulta para más detalles. - En archivos de datos con un formato distinto a HFSQL, no es necesario utilizar la función hModifyFile: los archivos de datos utilizados en la consulta se modifican automáticamente al modificar el resultado de la consulta.
| hQueryBreakable | El inicio de la consulta se puede interrumpir con la tecla ESC.
| hQueryDefault (valor predeterminado) | La consulta se inicia sin interrupción. | hQueryWithoutCorrection | | hQueryWithoutHFCorrection | | hNoBind | | Versiones 21 y posterioreshNoHourglass Nueva funcionalidad versión 21hNoHourglass hNoHourglass | La lectura del resultado de una consulta podría bloquearse. En ese caso, se muestra un reloj de arena. Esta constante se utiliza para que no se muestre el reloj de arena.
| hSQLUnicode | | hYield | En las consultas UPDATE y DELETE, que se utilizan en un gran número de registros y suelen tomar mucho tiempo, esta constante devuelve el control a las demás aplicaciones que utilizan los archivos de datos. En este caso:- la consulta se ejecuta un poco más lento,
- el servidor de archivos no se satura,
- los demás usuarios de los archivos de datos pueden continuar accediendo a ellos sin ningún tipo de bloqueo.
| hCheckDuplicates | Activa la gestión de duplicados durante la ejecución de la consulta. Si se detecta un error de duplicados, no se ejecuta la consulta. Esta constante fuerza la constante hWithTransaction . Se inicia una transacción, los registros se bloquean durante la ejecución de la consulta y se desbloquean al final de su ejecución, independientemente del resultado de la consulta. Si la aplicación se detiene durante la ejecución de la consulta (corte de energía, por ejemplo), la transacción se cancelará la próxima vez que se utilicen los archivos de datos de la consulta. Observación: la ejecución de la consulta puede ralentizarse.
| hCheckIntegrity | Activa la gestión de integridad durante la ejecución de la consulta. Si se detecta un error de integridad, no se ejecuta la consulta. Esta constante fuerza la constante de hWithTransaction. Se inicia una transacción, los registros se bloquean durante la ejecución de la consulta y se desbloquean al final de su ejecución, independientemente del resultado de la consulta. Si la aplicación se detiene durante la ejecución de la consulta (corte de energía, por ejemplo), la transacción se cancelará la próxima vez que se utilicen los archivos de datos de la consulta. Observación: la ejecución de la consulta puede ralentizarse.
|
Versiones 16 y posteriores Nueva funcionalidad versión 16 <Texto de la consulta SQL>: 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..
Versiones 16 y posteriores Nueva funcionalidad versión 16 Versiones 23 y posterioresEste parámetro no está disponible si <Nombre de consulta> corresponde a una variable de tipo SQL Query. Nueva funcionalidad versión 23Este parámetro no está disponible si <Nombre de consulta> corresponde a una variable de tipo SQL Query. Este parámetro no está disponible si <Nombre de consulta> corresponde a una variable de tipo SQL Query.
Ejecutar una consulta SQL a través de una conexión Ocultar los detalles
<Result> = HExecuteSQLQuery(<Query> [, <Connection> [, <Mode>]] , <Texto de la consulta SQL>)
<Result>: Boolean - True si se inicializó la consulta SQL,
- False en caso contrario. La función HErrorInfo permite obtener más detalles sobre el problema.
<Query>: Character string (with or without quotes) or data source - Nombre de la consulta que se ejecutará. 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.
Versiones 23 y posterioresNombre de 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>.. Este tipo de variable no está disponible. Nueva funcionalidad versión 23Nombre de 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>.. Este tipo de variable no está disponible. Nombre de 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>..
Este tipo de variable no está disponible.
<Connection>: Optional character string or Connection variable Connection solía 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>: Optional Integer constant Opción para iniciar la consulta: | | hWithFilter (constante que se puede combinar con las otras constantes) | Si se especifica este parámetro:- el resultado de la consulta corresponde a una selección de registros de tipo filtro si el motor HFSQL lo permite. De lo contrario, el resultado de la consulta corresponde a una vista HFSQL.
- las siguientes operaciones no están disponibles: buscar en el resultado de la consulta, consulta a partir de una consulta, vista a partir de una consulta, consulta a partir de una vista.
- los elementos de navegación especificados al navegar por el resultado no se tienen en cuenta.
- la lupa no está disponible en las tablas relacionadas con una consulta.
- no se puede utilizar la función HNbRec en las consultas.
Atención: si se especifica esta opción, la constante hModifyFile se utiliza automáticamente. Si no se especifica este parámetro (por Default ):- el resultado de la consulta corresponde a una vista HFSQL.
- se pueden realizar las siguientes operaciones en las consultas: buscar en el resultado de la consulta, consulta a partir de una consulta, vista a partir de una consulta, consulta a partir de una vista.
- los elementos de navegación especificados al navegar por el resultado se tienen en cuenta.
- la lupa está disponible en las tablas relacionadas con una consulta.
- se puede utilizar la función HNbRec en las consultas.
| hWithTransaction | La consulta se ejecuta en una transacción. Se inicia una transacción, los registros se bloquean durante la ejecución de la consulta y se desbloquean al final de su ejecución, independientemente del resultado de la consulta). Si la consulta no puede finalizar correctamente (registros bloqueados, corte de energía, etc.), se cancela la transacción y los archivos de datos se restauran al estado en el que se encontraban antes de ejecutar la consulta). Observación: la ejecución de la consulta puede ralentizarse.
| hModifyFile (constante que se puede combinar con las otras constantes) | - En archivos de datos HFSQL: Cuando se modifica el resultado de una consulta (funciones HAdd, HWrite, HModify, HCross, HDelete), las modificaciones se aplican a los archivos de datos que corresponden a la consulta.
Si no se especifica esta opción, solo se modifica el resultado de la consulta. Vea Modificar el contenido de una consulta para más detalles. - En archivos de datos con un formato distinto a HFSQL, no es necesario utilizar la función hModifyFile: los archivos de datos utilizados en la consulta se modifican automáticamente al modificar el resultado de la consulta.
| hQueryBreakable | El inicio de la consulta se puede interrumpir con la tecla ESC.
| hQueryDefault (valor predeterminado) | La consulta se inicia sin interrupción. | hQueryWithoutCorrection | | hQueryWithoutHFCorrection | | hNoBind | | Versiones 21 y posterioreshNoHourglass Nueva funcionalidad versión 21hNoHourglass hNoHourglass | La lectura del resultado de una consulta podría bloquearse. En ese caso, se muestra un reloj de arena. Esta constante se utiliza para que no se muestre el reloj de arena.
| hSQLUnicode | | hYield | En las consultas UPDATE y DELETE, que se utilizan en un gran número de registros y suelen tomar mucho tiempo, esta constante devuelve el control a las demás aplicaciones que utilizan los archivos de datos. En este caso:- la consulta se ejecuta un poco más lento,
- el servidor de archivos no se satura,
- los demás usuarios de los archivos de datos pueden continuar accediendo a ellos sin ningún tipo de bloqueo.
| hCheckDuplicates | Activa la gestión de duplicados durante la ejecución de la consulta. Si se detecta un error de duplicados, no se ejecuta la consulta. Esta constante fuerza la constante hWithTransaction . Se inicia una transacción, los registros se bloquean durante la ejecución de la consulta y se desbloquean al final de su ejecución, independientemente del resultado de la consulta. Si la aplicación se detiene durante la ejecución de la consulta (corte de energía, por ejemplo), la transacción se cancelará la próxima vez que se utilicen los archivos de datos de la consulta. Observación: la ejecución de la consulta puede ralentizarse.
| hCheckIntegrity | Activa la gestión de integridad durante la ejecución de la consulta. Si se detecta un error de integridad, no se ejecuta la consulta. Esta constante fuerza la constante de hWithTransaction. Se inicia una transacción, los registros se bloquean durante la ejecución de la consulta y se desbloquean al final de su ejecución, independientemente del resultado de la consulta. Si la aplicación se detiene durante la ejecución de la consulta (corte de energía, por ejemplo), la transacción se cancelará la próxima vez que se utilicen los archivos de datos de la consulta. Observación: la ejecución de la consulta puede ralentizarse.
|
Versiones 16 y posteriores Nueva funcionalidad versión 16 <Texto de la consulta SQL>: 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..
Versiones 16 y posteriores Nueva funcionalidad versión 16 Versiones 23 y posterioresEste parámetro no está disponible si <Nombre de consulta> corresponde a una variable de tipo SQL Query. Nueva funcionalidad versión 23Este parámetro no está disponible si <Nombre de consulta> corresponde a una variable de tipo SQL Query. Este parámetro no está disponible si <Nombre de consulta> corresponde a una variable de tipo SQL Query. Observaciones Lectura de datos durante la inicialización Dependiendo de la consulta (clasificaciones, grupos,...), los datos pueden ser leídos (o no) cuando se inicializa la consulta. Observación: La propiedad ..ExecutionCompleted permite saber si se ha completado la consulta (y, por lo tanto, si se pueden realizar lecturas sin bloqueos).. Para acceder a los elementos de la consulta, se debe declarar un Fuente de datos Variable (ver la sección Ejemplo). La consulta se libera automáticamente cuando se destruye el Variable. Para forzar la liberación de los recursos de esta consulta, utilice: 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 la función HExecuteSQLQuery, es necesario: - En el texto de la consulta SQL, defina los diferentes parámetros utilizando la notación {Nombre de parámetro}.. Por ejemplo:
"SELECT * FROM customer 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 HExecuteSQLQuery.
Ejemplo:
MaRequête est une Source de Données
- 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:
MaRequête.p_nom = "Dupont"
- Ejecutar la consulta SQL con la función HExecuteSQLQuery. Ejemplo:
HExecuteSQLQuery(MyQuery, "SELECT * FROM customer WHERE name={p_name}")
Observación: La estructura de los parámetros de la consulta se reinicia 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 con la función HExecuteSQLQuery, se deben utilizar consultas con parámetros, en lugar de concatenar cadenas para construir la consulta. Ejemplo:
// Build the query by concatenation // -> security failure sdQuery is Data Source HExecuteSQLQuery(sdQuery, "SELECT * FROM customer WHERE name = '" + EDT_Name + "'")
// Using parameters in the query // -> secure code sdQuery is Data Source sdQuery.p_name = EDT_Name HExecuteSQLQuery(sdQuery, "SELECT * FROM customer WHERE name={p_name}")
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, se deben especificar las condiciones 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 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"
Esta página también está disponible para…
|
|
|
| |
| | PROCEDURE UI_CargaTablegrid(Codigo) SqlScript is SQL Query = [ SELECT F028_FATOR_CONVERSAO.F003_PROD_ID, F028_FATOR_CONVERSAO.F028_QTDE_ORIGEM, F028_FATOR_CONVERSAO.F028_UNIDADE_ORIGEM FROM F028_FATOR_CONVERSAO WHERE F028_FATOR_CONVERSAO.F003_PROD_ID = {ParamF003_PROD_ID} ] SqlScript.ParamF003_PROD_ID = Codigo IF HExecuteSQLQuery(SqlScript) = True THEN FOR EACH SqlScript TableAdd(TABLEGRID_F028_FATOR_CONVERSAO,SqlScript.F028_FATOR_CONVERSAO_ID +TAB+ SqlScript.F003_PROD_ID +TAB+ SqlScript.F028_QTDE_ORIGEM) END END TableDisplay(TABLEGRID_F028_FATOR_CONVERSAO,taInit) |
|
|
|
| |
| |
| |
|
| Uso de SysDate and Dblink |
|
| To use sysdate and dblink with another database it is important to inform in the parameters: hQueryWithoutCorrection
Para usar o sysdate e fazer um dblink com outro banco de dados é importante informar nos paramentros: hQueryWithoutCorrection
Pour utiliser sysdate et dblink avec une autre base de données, il est important de renseigner les paramètres: hQueryWithoutCorrection |
|
|
|
| |
| |
| |
|
| | https://forum.pcsoft.fr/fr-FR/pcsoft.br.windev/3133-winformatica-example-hexecutesqlquery-with-break-and-filter-custom/read.awp |
|
|
|
| |
| |
| |
|
| Exemplo HexecuteSqlQuery com WHILE HOut () = False |
|
| numero_corrida é int = 0
MyProcedureUltimaCorrida é fonte de dados
IF HExecuteSQLQuery (MyProcedureUltimaCorrida, ConnNativa, hQueryWithoutCorrection, "NG0002_Procedure_UltimaCorrida") THEN
HReadFirst (MyProcedureUltimaCorrida, num_corrida)
ENQUANTO Hout () = False
ok = HReadNext (MyProcedureUltimaCorrida, num_corrida)
numero_corrida = MyProcedureUltimaCorrida.num_corrida
END
ELSE
Erro (HErrorInfo ())
END
info(numero_corrida) |
|
|
|
| |
| |
| |
|
| | n_value_demo_number is int = 1 s_value_demo_string is string = "abc" ds_result is Data Source b_result is boolean s_sql is string = "CALL pr_test ("+n_value_demo_number+","+"'"+s_value_demo_string+"')" b_resultado = HExecuteSQLQuery(ds_result,CONNECTION_NAME_HERE,hQueryDefault+hQueryWithoutCorrection,s_sql) IF b_resultado = False THEN error("Error Running Procedure ",herrorinfo()) END |
|
|
|
| |
| |
| |
| |
| |
| |
| | |
|