In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Evitar el casting en consultas sql

Foro público de Xailer en español
Responder
Andres Hocevar
Mensajes: 141
Registrado: Mar Sep 18, 2007 3:30 pm

Evitar el casting en consultas sql

Mensaje por Andres Hocevar »

Saludos a Todos
Quisiera si algien es tan amable de mostrarme como puedo sustituir algo
como:
.....query("SELECT * FROM tabla1 WHERE codigo='"+::oCodigo:Value+"' AND
fecha="+DTOS(::oFecha:Value)+" AND numero="+ALLTRIM(STR(::oNumero:Value)))
por algo asi
...query("SELECT * FROM tabla1 WHERE codigo=? AND fecha=? AND numero=? ")
y los parametros se pasan en un arreglo
{::oCodigo:Value, ::oFecha:Value, ::oNumero:Value}
para evitarme los castings
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9461
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Evitar el casting en consultas sql

Mensaje por ignacio »

Andrés,
Efectivamente este trabajo es bastante pesado y no había nada al respecto
para mejorarlo. Hemos incluido un nuevo método TDataSource:BuildSQLSt( cSql,
aParam1, ..., aParamN ) que puede ayudarle en este tipo de operaciones.
Estará disponible en la próxima versión de Xailer.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Andres Hocevar" <datasql@gmail.com> escribió en el mensaje
news:4723724b$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Saludos a Todos
>
> Quisiera si algien es tan amable de mostrarme como puedo sustituir algo
> como:
>
> ....query("SELECT * FROM tabla1 WHERE codigo='"+::oCodigo:Value+"' AND
> fecha="+DTOS(::oFecha:Value)+" AND
> numero="+ALLTRIM(STR(::oNumero:Value)))
>
> por algo asi
>
> ..query("SELECT * FROM tabla1 WHERE codigo=? AND fecha=? AND numero=? ")
>
> y los parametros se pasan en un arreglo
>
> {::oCodigo:Value, ::oFecha:Value, ::oNumero:Value}
>
> para evitarme los castings
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Andres Hocevar
Mensajes: 141
Registrado: Mar Sep 18, 2007 3:30 pm

Evitar el casting en consultas sql

Mensaje por Andres Hocevar »

Sr. Ignacio Ortiz de Zúñiga
Ok, pero les sugiero (en mi humilde opinion) que pasen un arreglo en
lugar de parametros individuales, recuerda que en algunas tablas a veces
tienen mas de 100 campos por lo que es mas facil hacer algo como
aPARAM := {}
AADD(aPARAM, CAMPO1)
AADD(aPARAM, CAMPO2)
..
..
AADD(mPARAM, CAMPOn)
y luego
cSql := "UPDATE tabla SET campo1=?, campo2=?, .....campoN=? WHERE filtro=?"
:BuildSQLSt( cSql, aPARAM )
O mas facil aun cuando los campos ya vienen en un arreglo de otra
consulta, algo como:
aPARAM := :queryArray("SELECT .....")
......> hace algo con el Array y...
:BuildSQLSt( cSql, aPARAM )
Ignacio Ortiz de Zúñiga escribió:
> Andrés,
>
> Efectivamente este trabajo es bastante pesado y no habí­a nada al respecto
> para mejorarlo. Hemos incluido un nuevo método TDataSource:BuildSQLSt( cSql,
> aParam1, ..., aParamN ) que puede ayudarle en este tipo de operaciones.
>
> Estará disponible en la próxima versión de Xailer.
>
> Un saludo
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9461
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Evitar el casting en consultas sql

Mensaje por ignacio »

Andres,
Se ha hecho de forma que admite ambos sistemas:
oDs:BuildSQLSt( cSql, aParams )
o
oDs:BuildSQLSt( cSql, xPar1, ..., xParN ) // xPar? no pueden ser matrices.
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Andres Hocevar" <datasql@gmail.com> escribió en el mensaje
news:472883e9$[email=1@ozsrv2.ozlan.local...]1@ozsrv2.ozlan.local...[/email]
> Sr. Ignacio Ortiz de Zúñiga
>
> Ok, pero les sugiero (en mi humilde opinion) que pasen un arreglo en lugar
> de parametros individuales, recuerda que en algunas tablas a veces tienen
> mas de 100 campos por lo que es mas facil hacer algo como
>
> aPARAM := {}
> AADD(aPARAM, CAMPO1)
> AADD(aPARAM, CAMPO2)
> .
> .
> AADD(mPARAM, CAMPOn)
> y luego
> cSql := "UPDATE tabla SET campo1=?, campo2=?, .....campoN=? WHERE
> filtro=?"
> :BuildSQLSt( cSql, aPARAM )
>
> O mas facil aun cuando los campos ya vienen en un arreglo de otra
> consulta, algo como:
>
> aPARAM := :queryArray("SELECT .....")
> .....> hace algo con el Array y...
> :BuildSQLSt( cSql, aPARAM )
>
>
> Ignacio Ortiz de Zúñiga escribió:
>> Andrés,
>>
>> Efectivamente este trabajo es bastante pesado y no había nada al respecto
>> para mejorarlo. Hemos incluido un nuevo método TDataSource:BuildSQLSt(
>> cSql, aParam1, ..., aParamN ) que puede ayudarle en este tipo de
>> operaciones.
>>
>> Estará disponible en la próxima versión de Xailer.
>>
>> Un saludo
>>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder