Uso de funcion Expand

Uso de funcion Expand

Postby quim » Mon Aug 13, 2018 9:20 am

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 ?
quim
 
Posts: 31
Joined: Mon Apr 11, 2011 6:22 pm

Re: Uso de funcion Expand

Postby Carlos Mora » Mon Aug 20, 2018 9:57 am

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"
Carlos Mora
 
Posts: 988
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España

Re: Uso de funcion Expand

Postby quim » Mon Aug 20, 2018 4:24 pm

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: 31
Joined: Mon Apr 11, 2011 6:22 pm

Re: Uso de funcion Expand

Postby quim » Tue Aug 21, 2018 9:06 am

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
quim
 
Posts: 31
Joined: Mon Apr 11, 2011 6:22 pm

Re: Uso de funcion Expand

Postby albeiroval » Thu Aug 23, 2018 2:51 am

carlos, quim,

excelente aporte, muchas gracias.
Saludos,
Regards,

Albeiro Valencia
www.avcsistemas.com
User avatar
albeiroval
 
Posts: 361
Joined: Tue Oct 16, 2007 5:51 pm
Location: Barquisimeto - Venezuela


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 36 guests