Página 1 de 1

Evitar el casting en consultas sql

Publicado: Sab Oct 27, 2007 7:15 pm
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

Evitar el casting en consultas sql

Publicado: Mar Oct 30, 2007 10:40 am
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

Evitar el casting en consultas sql

Publicado: Mié Oct 31, 2007 2:32 pm
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
>

Evitar el casting en consultas sql

Publicado: Mié Oct 31, 2007 4:21 pm
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
>>