1 de marzo de 2018

Consultas de mas de 256 caracteres al servidor remoto (SPT y TEXT.. ENDTEXT)

Una pregunta común, con una respuesta sencilla: el uso de bloques TEXT .. ENDTEXT da enorme flexibilidad a las aplicaciones Cliente-Servidor.

Como es bien sabido, las constantes de tipo caracter de VFP están limitadas a 255 caracteres, por lo que pudiera dejarnos limitado el cómo codificar sentencias muy largas, hay varias soluciones...

1. Concatenar varias cadenas:

lcSQL = "SELECT campo1, campo2... campoN"
lcSQL = lcSQL+ " WHERE campo1 = condicion1 AND ... "
lcSQL = lcSQL + "blah blah blah"

2. Uso de TEXTMERGE, el cuál, es igual de poderoso, si se le combina con la evaluación de los datos, el tema lo he tocado con anterioridad en el siguiente artículo:

--- TextMerge y SQL Pass Through (SPT) trabajando juntos ---
https://comunidadvfp.blogspot.com/2003/02/textmerge-y-sql-pass-through-spt.html

3. Usando bloques TEXT .. ENDTEXT, en versiones previas a VFP7 este no proporciona la habilidad de evaluar expresiones, pero si nos ofrece el poder generar consultas de gran tamaño y organizadas en un bloque.

TEXT TO lcSQL NOSHOW
   SELECT Campo1, Campo2, Campo3, ..., CampoN
       FROM MiTabla MT INNER JOIN MiOtraTabla MOT 
           ON MiT.MiCampo = MOT.MiCampo
       ....
       ....
ENDTEXT
IF SQLexec(lnHandle, lcSQL, "cCursor") < 0
   IF AERROR(laError) >  0
        Messagebox("Error al ejecutar:" + laError[2])
  ENDIF
ENDIF

A partir de VFP7 se mejoró notablemente a los bloques TEXT ... ENDTEXT, con lo que, puede incluirse evaluación de expresiones...

With Thisform
   lnIdentificador = cResult.iID
   lnMinimo = .txtMinimo.Value
   lnMaximo = .txtMaximo.Value
EndWith
TEXT TO lcSQL TEXTMERGE NOSHOW
   SELECT Campo1, Campo2, Campo3, ..., CampoN
       FROM MiTabla MT INNER JOIN MiOtraTabla MOT 
           ON MiT.MiCampo = MOT.MiCampo
        WHERE iID = < < lnIdentificador > > ;
             AND cantidad BETWEEN < < Minimo > > AND < < lnMaximo > >
       ....
ENDTEXT

En VFP8 se volvió a dar unas pequeñas mejoras que hacen más compatibles con la forma en que se genera el texto resultante, esto se logra gracias a la nueva cláusula PRETEXT.

Todo lo que pongas entre TEXT... ENDTEXT (exceptuando las expresiones a evaluar por el TEXTMERGE) sera ignorado por el compilador de VFP, ya que se presupone que es algún texto que no es necesario compilar ni revisar por errores.

Con el uso de los bloques de TEXT .. ENDTEXT, la antigua "limitación" será llevada hasta más de 16 mil caracteres, ¿te serán suficientes?

Espero que la información te sea de utilidad.

Espartaco Palma Martínez

No hay comentarios. :

Publicar un comentario

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.