Page 1 of 1

Definir variable en multiples lineas

PostPosted: Tue May 23, 2017 4:24 pm
by mariordz
Estimados amigos del foro, despues de meses en que la empresa compró la actualización de FWH (ahora tenemos la 16.04) por fin le estoy dando uso, y se me presenta este pequeño detalle, con la versión anterior de fivewin definia una variable en multiples líneas asi:
Code: Select all  Expand view
cCadsql1 := "SELECT campo1,campo2,campo3 FROM tala1 INNER JOIN tabla2 ON ;
tabla1.campo1 = tabla2.campo2 INNER JOIN tabla2 ON tabla2.campo21 = tabla3.campo4  ;
WHERE (tabla1.campo3<>'') AND (tabla3.campo2 < '3') and tabla2.campo3>0 ;
order by tabla1.campo3"


En esta nueva versión no me esta respeytando el ";" como indicador de salo de línea, tienen alguna idea de como corregir este detalle? La verdad es que hay muchas llamadas a SQL desde el sistema que estoy migrando y modificar todas ellas me llevaría un buen tiempo, además de que no me es practico tener la sentencia en una sola línea que sería demasiado larga.

Saludos.

Re: Definir variable en multiples lineas

PostPosted: Tue May 23, 2017 4:48 pm
by cnavarro
mariordz wrote:Estimados amigos del foro, despues de meses en que la empresa compró la actualización de FWH (ahora tenemos la 16.04) por fin le estoy dando uso, y se me presenta este pequeño detalle, con la versión anterior de fivewin definia una variable en multiples líneas asi:
Code: Select all  Expand view
cCadsql1 := "SELECT campo1,campo2,campo3 FROM tala1 INNER JOIN tabla2 ON ;
tabla1.campo1 = tabla2.campo2 INNER JOIN tabla2 ON tabla2.campo21 = tabla3.campo4  ;
WHERE (tabla1.campo3<>'') AND (tabla3.campo2 < '3') and tabla2.campo3>0 ;
order by tabla1.campo3"


En esta nueva versión no me esta respeytando el ";" como indicador de salo de línea, tienen alguna idea de como corregir este detalle? La verdad es que hay muchas llamadas a SQL desde el sistema que estoy migrando y modificar todas ellas me llevaría un buen tiempo, además de que no me es practico tener la sentencia en una sola línea que sería demasiado larga.

Saludos.


Puedes hacerlo asi

Code: Select all  Expand view

local cCadsql1 := "SELECT campo1,campo2,campo3 FROM tala1 INNER JOIN tabla2 ON " + ;
"tabla1.campo1 = tabla2.campo2 INNER JOIN tabla2 ON tabla2.campo21 = tabla3.campo4 " + ;
"WHERE (tabla1.campo3<>'') AND (tabla3.campo2 < '3') and tabla2.campo3>0 " + ;
"order by tabla1.campo3"
 


o busca información en el foro sobre el comando
Code: Select all  Expand view

TEXT INTO cCadsql1

ENDTEXT
 

Re: Definir variable en multiples lineas

PostPosted: Tue May 23, 2017 4:49 pm
by horacio
Se me ocurre que la variable está mal definida, yo lo hago así.
Code: Select all  Expand view

cCadsql1 := "SELECT campo1,campo2,campo3 FROM tala1 INNER JOIN tabla2 ON " + ;
"tabla1.campo1 = tabla2.campo2 INNER JOIN tabla2 ON tabla2.campo21 = tabla3.campo4 " +;
"WHERE (tabla1.campo3<>'') AND (tabla3.campo2 < '3') and tabla2.campo3>0 " +;
"order by tabla1.campo3"
 

Saludos

Re: Definir variable en multiples lineas

PostPosted: Tue May 23, 2017 5:38 pm
by mariordz
Muchas gracias por sus respuestas, lo hice como sugieren y ya esta funcionando (despues de modificar en todos los PRG's que componen mi sistema), como comenté, en la versión anterior si funcionaba sin necesidad de cerrar la cadena y volver a iniciarla en la siguiente línea, pero supongo que son esos pequeños detalles que varian de una versión a otra, otro detalle curioso es que tengo definidas variables con multiples líneas y no me da ese error, por alguna extraña razón solo me marcaba error en las variables que mando como cadena a SQL.

Mil gracias nuevamente.

Re: Definir variable en multiples lineas

PostPosted: Tue May 23, 2017 5:41 pm
by cnavarro
Quizás porque la cadena contiene ' ( comillas sencillas ) que puede entender como final de cadena y comienzo de otra ( con la siguiente ' )

Re: Definir variable en multiples lineas

PostPosted: Wed May 24, 2017 3:06 am
by joseluisysturiz
Una forma de evitarte esos detalles y usar multiples linea seria alago como esto...saludos... :shock:

Code: Select all  Expand view

   cSql := "SELECT db.id_referencia_bancaria, db.cedula_cliente, db.cedula_dueno, "
   cSql += "td.tipo_dato_td, db.id_banco, bc.banco, db.id_tipo_cuenta, db.pax "

   cSql += "FROM tbl_datos_bancarios AS db "

   cSql += "LEFT JOIN tbl_tipos_datos_td  AS td ON db.id_tipo_dato_td = td.id_tipo_dato_td "

   cSql += "WHERE db.cedula_cliente = " + ClipValue2SQL( aVarCtt[1] ) + " "

   cSql += "ORDER BY db.cuenta_nombre_titular"

   TRY
      oQry := TDolphinQry():New( cSql, oDatos:oConex )
   CATCH oError
      ShowError( oError, cSql )
   END
 

Re: Definir variable en multiples lineas

PostPosted: Wed May 24, 2017 2:12 pm
by Armando
Mario:

Algo como esto que da más claridad en el código

Code: Select all  Expand view

    oRsPay:Source               := "SELECT " +;
                                            "*," +;
                                            "Puestos.*," +;
                                            "Departamentos.*," +;
                                            "Bancos.*," +;
                                            "Tipos.* " +;
                                        "FROM " +;
                                            "Empleados " +;
                                        "LEFT JOIN " +;
                                            "Puestos " +;
                                        "ON " +;
                                            "Empleados.EMP_CIA = Puestos.PUE_CIA " +;
                                        "AND " +;
                                            "Empleados.EMP_PUE = Puestos.PUE_PUE " +;
                                        "LEFT JOIN " +;
                                            "Departamentos " +;
                                        "ON " +;
                                            "Empleados.EMP_CIA = Departamentos.DEP_CIA " +;
                                        "AND " +;
                                            "Empleados.EMP_DEP = Departamentos.DEP_DEP " +;
                                        "LEFT JOIN " +;
                                            "Bancos " +;
                                        "ON " +;
                                            "Empleados.EMP_CIA = Bancos.BAN_CIA " +;
                                        "AND " +;
                                            "Empleados.EMP_BAN = Bancos.BAN_BAN " +;
                                        "LEFT JOIN " +;
                                            "Tipos " +;
                                        "ON " +;
                                            "Empleados.EMP_CIA = Tipos.TIP_CIA " +;
                                        "AND " +;
                                            "Empleados.EMP_TIN = Tipos.TIP_TIP " +;
                                        "ORDER BY " +;
                                            "EMP_AYN"
 


Imagina este código en una sola línea horizontal, después de varios meses de haberla
escrito, sería muy difícil de entender.

Saludos

Re: Definir variable en multiples lineas (RESUELTO)

PostPosted: Wed May 24, 2017 5:22 pm
by mariordz
Armando, exactamente ese es mi punto, la claridad y facilidad para leer una sentencia tan larga, ahora que ya he aplicado una solución propuesta mi código es entendible (por lo menos para mi LOL).

Gracias y saludos.

Re: Definir variable en multiples lineas

PostPosted: Wed May 24, 2017 5:25 pm
by Armando
Mario:

Vientos caon!

Saludos

Re: Definir variable en multiples lineas

PostPosted: Mon May 29, 2017 9:29 am
by Carlos Mora
Mario,

hace algún tiempo se discutió el tema en el foro y se sacaron a la luz cosas bastante interesantes, sobre todo a nivel de legibilidad de SQL

viewtopic.php?f=6&t=29700&start=0

Hay una función EXPAND que junto con TEXT INTO <var> ayuda a hacer la vida más fácil.

Un saludo