Uso de funcion Expand

Post Reply
quim
Posts: 27
Joined: Mon Apr 11, 2011 6:22 pm

Uso de funcion Expand

Post by quim »

Buenos dias foro !

Siguiendo el ejemplo de Carlos Mora en el hilo http://forums.fivetechsupport.com/viewt ... 0&start=15 en el que nos ilumina con un ejemplo para codificar SQL mediante el uso de TEXT INTO ... ENDTEXT

Me encuentro que la función Expand() no se comporta como se espera (al menos en mi Harbour 3.2)

En su ejemplo, Carlos Mora dice :

Code: Select all

<tns:employeeIdentificationNumber>$1</tns:employeeIdentificationNumber>
                           <tns:startDate>$2</tns:startDate>
                           <tns:endDate>$3</tns:endDate>
 
Y con Expand sustituye $1, $2, $3 por

Code: Select all

Expand( cTransac, oQuery:dni, oQuery:FechaInicio, oQuery:FechaFin )
 
En mi caso tengo

Code: Select all

local cSql, cFilter :="first"
    TEXT INTO cSql
        SELECT c.codigo, c.nombre, f.nombre
        FROM clientes AS c
        INNER JOIN fpago AS f 
        ON c.fpago=f.codigo
        WHERE c.nombre=$1
    ENDTEXT

    cSql := Expand( cSql, cFilter )
 
Y la cadena obtenida es inteligible :

Code: Select all

○f f f f○fSfEfLfEfCfTf fcf.fcfofdfifgfof,f fcf.fnfofmfbfrfef,f fff.fnfofmfbfrfef
f○f○fFfRfOfMf fcflfifefnftfefsf fAfSf fcf
f○f○fIfNfNfEfRf fJfOfIfNf fffpfafgfof fAfSf fff f
f○f○fOfNf fcf.fffpfafgfof=fff.fcfofdfifgfof
f○f○fWfHfEfRfEf fcf.fnfofmfbfrfef=f$f1f
Qué hago mal ?
Carlos Mora
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Uso de funcion Expand

Post by Carlos Mora »

Quim,

El código fuente de la función Expand() está en el mismo hilo, y como ves no hace mucho.

Imprime la cadena del text/endtext sin pasarla por el expand, creo que ahi está el problema. Puede que el problema venga del encoding desde donde copiaste la query o algo así.

¿Que editor de código usas?

Prueba escribiendo tu mismo la cadena SQL sin copiarla de otro sitio.

Un saludo
Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
“If you think education is expensive, try ignorance"
quim
Posts: 27
Joined: Mon Apr 11, 2011 6:22 pm

Re: Uso de funcion Expand

Post by quim »

Muchas gracias Carlos por responder ...

La confusión ha venido ya que la funcion Expand existe en la lib hbct y por lo tanto, la estaba utilizando tal cual :roll:

https://harbour.github.io/doc/clct3.html#expand

Pruebo tu función y seguro que funciona, de lo contrario te lo comento

Gracias de nuevo !!
quim
Posts: 27
Joined: Mon Apr 11, 2011 6:22 pm

Re: Uso de funcion Expand

Post by quim »

Carlos

Funciona de maravilla, aplicable a SQL, XML, etc

En mi caso, para no tener errores con la funcion Expand() de hbct.lib la he renombrado como BindParams, análoga a PHP

Code: Select all

function BindParams( cQuery, ... )

   local i

   i:= pcount()
   while i > 1
      cQuery:= strtran( cQuery, '$'+(ltrim(str(i-1))), ClipValue2SQL( HB_PValue(i) ) )
      i--
   end

RETURN cQuery 
 
Y la uso así :

Code: Select all

TEXT INTO cSql
    SELECT *
    FROM clientes AS c
    WHERE c.codigo=$1
ENDTEXT

BindParams( @cSql, aParams['codigo'] )
 
Saludos
User avatar
albeiroval
Posts: 323
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela

Re: Uso de funcion Expand

Post by albeiroval »

carlos, quim,

excelente aporte, muchas gracias.
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
Post Reply