Page 1 of 1

Uso de funcion Expand

PostPosted: Mon Aug 13, 2018 9:20 am
by quim
Buenos dias foro !

Siguiendo el ejemplo de Carlos Mora en el hilo http://forums.fivetechsupport.com/viewtopic.php?f=6&t=29700&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  Expand view

<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 view

Expand( cTransac, oQuery:dni, oQuery:FechaInicio, oQuery:FechaFin )
 


En mi caso tengo
Code: Select all  Expand view

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  Expand view

○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 ?

Re: Uso de funcion Expand

PostPosted: Mon Aug 20, 2018 9:57 am
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

Re: Uso de funcion Expand

PostPosted: Mon Aug 20, 2018 4:24 pm
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 !!

Re: Uso de funcion Expand

PostPosted: Tue Aug 21, 2018 9:06 am
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  Expand view

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  Expand view

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

BindParams( @cSql, aParams['codigo'] )
 


Saludos

Re: Uso de funcion Expand

PostPosted: Thu Aug 23, 2018 2:51 am
by albeiroval
carlos, quim,

excelente aporte, muchas gracias.