Definir variable en multiples lineas

Definir variable en multiples lineas

Postby mariordz » Tue May 23, 2017 4:24 pm

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  RUN
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.
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Definir variable en multiples lineas

Postby cnavarro » Tue May 23, 2017 4:48 pm

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

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  RUN

TEXT INTO cCadsql1

ENDTEXT
 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Definir variable en multiples lineas

Postby horacio » Tue May 23, 2017 4:49 pm

Se me ocurre que la variable está mal definida, yo lo hago así.
Code: Select all  Expand view  RUN

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
horacio
 
Posts: 1363
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Definir variable en multiples lineas

Postby mariordz » Tue May 23, 2017 5:38 pm

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.
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Definir variable en multiples lineas

Postby cnavarro » Tue May 23, 2017 5:41 pm

Quizás porque la cadena contiene ' ( comillas sencillas ) que puede entender como final de cadena y comienzo de otra ( con la siguiente ' )
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Definir variable en multiples lineas

Postby joseluisysturiz » Wed May 24, 2017 3:06 am

Una forma de evitarte esos detalles y usar multiples linea seria alago como esto...saludos... :shock:

Code: Select all  Expand view  RUN

   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
 
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Definir variable en multiples lineas

Postby Armando » Wed May 24, 2017 2:12 pm

Mario:

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

Code: Select all  Expand view  RUN

    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
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3230
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Definir variable en multiples lineas (RESUELTO)

Postby mariordz » Wed May 24, 2017 5:22 pm

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.
User avatar
mariordz
 
Posts: 131
Joined: Tue Dec 26, 2006 4:50 pm
Location: Ciudad de México

Re: Definir variable en multiples lineas

Postby Armando » Wed May 24, 2017 5:25 pm

Mario:

Vientos caon!

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3230
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Definir variable en multiples lineas

Postby Carlos Mora » Mon May 29, 2017 9:29 am

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
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: 989
Joined: Thu Nov 24, 2005 3:01 pm
Location: Madrid, España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 73 guests