Error de sintaxis armando dw dinámico

Tengo esta linea de código pero no se si es la que esta mostrando el error de sintaxis me dice que en la columna 584... No entiendo... De todas maneras creo que por acá esta el error... No se si esta mal concatenado o no es de ahí... Gracias

string tipo5
tipo5 = ddlb_1.text
if len(tipo5) >0 and tipo5 <> 'none' then
c_where = c_where +" and a.tipo_documento = '" +string (tipo5)+ "'"
end if

1 Respuesta

Respuesta
1

Estimada, podrías mostrar el texto del error que te genera.

Por otro lado podrías intentar dar un espacio al final de la linea que concatena, algo así:

c_where = c_where +" and a.tipo_documento = '" +string (tipo5)+ "' "

Ya probé con el espacio y nada...mira este es el error

Modify Failed Line 1 Column 584:incorrect sintax.

gracias por tu ayuda

¿En qué momento te sale este error?

Cuando asignas el query al dw, en el retrieve.?

Aparte de eso. Puedes ver el query generado por medio de un messagebox. Y revisar si el query esta bien construido.

ya lo tengo visto por un mensaje...

el error aparece antes del retrieve cuando se asigna el query mas bien

Mmm.. intenta meter ese query, de manera manual, a un dw.

Osea, en tiempo de diseño, crea un dw, y en el painter, métele todo el query y dime que observas.

El texto del messagebox lo puedes capturar haciendo control + c, cuando tengas el messagebox en primer plano, pasalo a un txt y quítale la parte del titulo y el botón, te darás cuenta.

Me comentas.

Estimada, en tu query, ¿estas modificando (añadiendo/qutando) columnas o argumentos del dw a comparación de su estado original?

se están añadiendo argumentos mas que todo....

Consulta, en la practica, en mi trabajo para ser especifico.

He visto el uso de la función setsqlselect() en los dw.

Estos dw, no manejaban argumentos. Mas si se respetaba las columnas del select original del dw. Pero se modificaba en modo de ejecución la clausula where. Se añadían mas criterios, y esto no es lo mismo que decir que se añadían argumentos.

¿Este también es tu caso?

Ya te respondo mira que estuve revisando y averiguando y me dijeron que por medio de "escape de caracteres especiales" puedo hacer eso...tu sabes como hacerlo?

algo con este signo--> ~ según mi código lo debo poner en la variable pero no me quiere dar

Creo que te refieres a esto

"~n"

Y si no me equivoco, su equivalente chr(10)

no se sobre el equivalente, pero pues si hablamos de lo mismo....no se como adherirlo a mi consulta en este caso iría en esta parte del query

string tipo5
tipo5 = ddlb_1.text
if len(tipo5) >0 and tipo5 <> 'none' then
c_where = c_where +" and a.tipo_documento ='" +string (tipo5)+"'"
end if

Tengo que aplicar ese símbolo a la variable pero no se como le he intentado de varias formas y no me sale

Una corrección, el valor ascii del enter (salto de linea) es 13.

Osea: chr(13)

Y si me serviría esa opción ya que me dijeron que es la variable del tipo de documento la que genera problema...ya que al armar todo el select este comienza y termina con comilla sencilla y la variable del tipo documento tambien tiene comilla sencilla...me dicen que ese es el error ...que entonces se confunde todo

Mmm.. comparte como se supone que queda tu query..

'select 0 as clave, a.tipo_documento tipo_documento, a.documento documento, a.autorización autorización, a.fecha fecha, a.codigo_consulta codigo_consulta, a.posfechado posfechado, a.valor_garantizado valor_garantizado, a.pago pago, a.numero_cheques numero_cheques, a.banco banco, a.cuenta cuenta, a.numero_chq numero_chq from autorizaciones a, contrato c, codigo_consulta cc where a.codigo_consulta=cc.codigo_consulta and cc.contrato=c.numero and valor_garantizado >0 and pago is null and (numero_compra=0 or numero_compra is null) and a.tipo_documento = '" +string (tipo5)+"'" and a.documento = " +string (docu5)'

Queda así cuando lo muestro a través de un mensaje en ejecución....

en la parte de la linea que esta subrayada aparece con los valores:

and a.tipo_documento ='C' and a.documento =6105951

Comparteme el código que genera todo ese query.

como así? que pena la pregunta jaja

necesitas todo el query y como armo el dw?

Así es.

El código que genera tu "select .. from ... where"

y tranquila, mejor hacer las preguntas necesarias =)

Te mando esto no se si sea:

if dos='Búsqueda Avanzada' THEN
ddlb_1.enabled= true
em_1.enabled= true
em_2.enabled= true
em_4.enabled= true
em_3.enabled= true
em_43.enabled= true
if dec(em_1.text)>0 then
docu6 = dec(em_1.text)
dw_1.DataObject= "dw_exoneraciones1"
dw_1.SetTransObject(DBoracle)
dw_4.retrieve(docu6)
end if

script = " select 0 as clave, a.tipo_documento tipo_documento, a.documento documento, a.autorización autorización, a.fecha fecha, a.codigo_consulta codigo_consulta, a.posfechado posfechado, a.valor_garantizado valor_garantizado, a.pago pago, a.numero_cheques numero_cheques, a.banco banco, a.cuenta cuenta, a.numero_chq numero_chq from autorizaciones a, contrato c, codigo_consulta cc where a.codigo_consulta=cc.codigo_consulta and cc.contrato=c.numero and valor_garantizado >0 and pago is null and (numero_compra=0 or numero_compra is null) ";

string tipo5
tipo5 = ddlb_1.text
if len(tipo5) >0 and tipo5 <> 'none' then
c_where = c_where +" and a.tipo_documento = '" +string ('~'tipo5"')+"'"
end if

dec docu5
docu5 = dec(em_1.text)
if dec(em_1.text)>0 then
c_where = c_where +" and a.documento = " +string (docu5)
end if

if c_where='' then
messagebox ("Verifica", "Digite campos para consultar",Exclamation!)
return
else
script=script+c_where;
end if
v_sql_new = script
ls_query = script
messagebox (' ', c_where)
string rc, mod_string

mod_string = "DataWindow.Table.Select='"+script+"'";
messagebox("", mod_string);
dw_1.DataObject= "dw_exoneraciones_bav"
dw_1.SetTransObject(DBoracle)
rc = dw_1.Modify(mod_string)
IF rc = "" THEN
dw_1.Retrieve( )
ELSE
MessageBox("Status", "Modify Failed" + rc)
END IF
return
ls_dw_dinamic = DBoracle.SyntaxFromSQL ( ls_query, "Style(Type=grid)", ls_error )
dw_1.Create ( ls_dw_dinamic, ls_error )
IF ls_error <> '' THEN
MessageBox ( "error de sintaxis", ls_error )
ELSE
dw_1.SetTransObject ( DBoracle )
dw_1.Retrieve(tipo5,docu5, cla4, afic4)
//order by
messagebox( 'Registros Encontrados: ', string(dw_1.rowcount()),exclamation!)
END IF
end if

Podría también compartirme el query del dw dw_exoneraciones_bav.

Xfa

select 0 clave, a.tipo_documento tipo_documento,
a.documento documento, a.autorizacion autorizacion,
a.fecha fecha, a.codigo_consulta codigo_consulta,
a.posfechado posfechado, a.valor_garantizado valor_garantizado,
a.pago pago, a.numero_cheques numero_cheques, a.banco banco,
a.cuenta cuenta, a.numero_chq numero_chq
from autorizaciones a, contrato c, codigo_consulta cc
where a.codigo_consulta=cc.codigo_consulta and cc.contrato=c.numero
and valor_garantizado >0 and pago is null
and (numero_compra=0 or numero_compra is null)

Consulta, ¿esto por qué est así?

//

string tipo5
tipo5 = ddlb_1.text
if len(tipo5) >0 and tipo5 <> 'none' then
c_where = c_where +" and a.tipo_documento = '" +string ('~'tipo5"')+"'"
end if

//

Entiendo que tipo5 es una variable y es de tipo string, ¿no debería ser así?

c_where = c_where +" and a.tipo_documento = '" + tipo5 + "' "

¿

...?

si supongo, al igual eso no genera inconvenientes

y originalmente estaba así:

string tipo5
tipo5 = ddlb_1.text
if len(tipo5) >0 and tipo5 <> 'none' then
c_where = c_where +" and a.tipo_documento = '" +string (tipo5)+"'"
end if

Te había mandado las pruebas que estaba haciendo con el símbolo.....

El uso de lo siguiente "~n", ayuda para generar saltos de linea en medio del texto concatenado:

Por ejemplo si mando un messagebox de esta manera:

Messagebox("Olas","Jojo~nlete")

mi resultado sera lo siguiente:

---------------------------
Olas
---------------------------
Jojo
Lete
---------------------------
Aceptar
---------------------------

Ahora, esto te recomendario que lo uses para tu variable script, ya que noto que tiene una sola linea larga, por no decir larguísima, y no resulta muy conveniente manejarlo de esa forma, y en mi ejemplo puedes notar su adecuado uso.

Recomiendo que corrijas el código que te observe, no veo la necesidad de usar la funcionl string para una variable string.

Por otro lado el uso de las comillas simples en tu query... en lugar del modify, podrías usar lo siguiente:

dw_1. SetSQLSelect(script) 

en lugar de esto:

rc = dw_1.Modify(mod_string) ///ya no va!!!

Y te olvidas de conflictos por uso de las comillas y su re-uso para la función modify.

Por cierto si ya con esto se soluciona tus dificultades, y vas a puntuar, considera 5 de 5, dame chance xD

Al arreglar esto:

rc = dw_1.SetSQLSelect(mod_string)

me dice "incompatible types in assignment:string, integer

si sale todo bien obvio te califico así jajajajaja solo espero tu ayuda

y también me dice...que no es compatible la propiedad setsqlselect para el dw_1

Mmmm... caramba.. no me esperaba eso.

comparte el select que genera después de los cambios.

Donde declaras script y de que tipo lo declaras.

script es tipo string y solo le cambie la linea que me dijiste

no genera nd porque no he podido arreglar los errores

En tu variable script, ¿no se llega a generar nada?

Pues esto no? estoy confundida

script = " select 0 as clave, a.tipo_documento tipo_documento, a.documento documento, a.autorización autorización, a.fecha fecha, a.codigo_consulta codigo_consulta, a.posfechado posfechado, a.valor_garantizado valor_garantizado, a.pago pago, a.numero_cheques numero_cheques, a.banco banco, a.cuenta cuenta, a.numero_chq numero_chq from autorizaciones a, contrato c, codigo_consulta cc where a.codigo_consulta=cc.codigo_consulta and cc.contrato=c.numero and valor_garantizado >0 and pago is null and (numero_compra=0 or numero_compra is null) ";

Bien pero cuando llegas a este código:

v_sql_new = script
ls_query = script

¿Qué valor tiene script?

select 0 as clave, a.tipo_documento tipo_documento, a.documento documento, a.autorizacion autorizacion, a.fecha fecha, a.codigo_consulta codigo_consulta, a.posfechado posfechado, a.valor_garantizado valor_garantizado, a.pago pago, a.numero_cheques numero_cheques, a.banco banco, a.cuenta cuenta, a.numero_chq numero_chq from autorizaciones a, contrato c, codigo_consulta cc where a.codigo_consulta=cc.codigo_consulta and cc.contrato=c.numero and valor_garantizado >0 and pago is null and (numero_compra=0 or numero_compra is null) and a.tipo_documento = 'C' and a.documento = 6105951

Retomando, primero esa única linea larga donde le asignas el valor inicial a script, fraccionala e inclusive le puedes agregar el valor de salto de linea de manera intercalada.

script = " select 0 as clave, a.tipo_documento tipo_documento, " +
" a.documento documento, a.autorización autorización, " +
" a.fecha fecha, a.codigo_consulta codigo_consulta, " +
" a.posfechado posfechado, a.valor_garantizado valor_garantizado, " +
" a.pago pago, a.numero_cheques numero_cheques, a.banco banco, " +
" a.cuenta cuenta, a.numero_chq numero_chq " +
" from autorizaciones a, contrato c, codigo_consulta cc " +
" where a.codigo_consulta=cc.codigo_consulta and cc.contrato=c.numero " +
" and valor_garantizado >0 and pago is null and (numero_compra=0 or numero_compra is null) ";

Una observación, el query que compartistes ahora ultimo, no tiene concatenada lo demás que se genera en base a tus validaciones. Deseo ver como queda al final con todas esas concatenaciones.

mañana me puedes ayudar temprano ya me tengo que ir por favor

gracias

Mmm. Temprano, mm.

Soy de Perú. Y al trabajo llego cerca de las 9 am.

¿Y tu?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas