Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Error sintaxis ADODB Mariadb variables host


dmosca
21 de julio de 2017, 23:24
Estimados
Estoy trabajando con powercobol v9

tengo error de sintaxis al transferir desde un "select...into..." información a variables de trabajo.

al ejecutar da error de sintaxis,

este es el codigo

invoke OBJ-CONNECTION "Open" using NAME-DB.
invoke COM "CREATE-OBJECT" using PROGID-RECORDSET
returning OBJ-RECORDSET.
STRING "SELECT Orden, Campo1, Campo2, Campo3 "
"INTO :WORDEN, :WCAMPO1, :WCAMP2, :WCAMPO3 "
"FROM ejemplo WHERE Campo1 = 'manzana' "
"ORDER BY Campo1 ASC LIMIT 1;"
LOW-VALUE DELIMITED BY SIZE INTO ADO-OPEN-STRING.
invoke OBJ-RECORDSET "open" using ADO-OPEN-STRING *> <======
OBJ-CONNECTION
WK-0
WK-1
WK-0.
invoke OBJ-RECORDSET "GET-EOF" returning IS-EOF.

da error en la linea resaltada.
si elimino la linea "INTO :WORDEN, :WCAMPO1, :WCAMP2, :WCAMPO3 " funciona ok.

Josber
22 de julio de 2017, 21:45
Pues aparte de que te sobra un asterisco en "invoke OBJ-RECORDSET "open" using ADO-OP"EN-STRING", lo veo bien, aunque, y no sé si será el caso, yo no monto la instrucción en ese orden, yo lo hago:

SELECT campos FROM tabla
WHERE condiciones LIMIT n
INTO :campos
ORDER BY campo_orden [ASC]/[DES]

Sé que en algunas cosas MariaDB, es muy puñetero y quizás el orden de la instrucción afecte en algo

Un saludo y suerte

dmosca
22 de julio de 2017, 23:53
Josber

estarán mal definidas las variables?

01 WEJEMPLO.
02 WORDEN PIC S999.
02 WCAMPO1 PIC X(30).
02 WCAMPO2 PIC S99999.
02 WCAMPO3 PIC X.

Josber
23 de julio de 2017, 20:14
En la WORKING, has definido WCAMPO2, y en el STRING, estás usando WCAMP2, ¿es así o es un fallo al postearlo aquí en el foro?, por lo demás, están bien definidas en la WK, para definir las alfanuméricas, no tienen nada en especial y las numéricas, han de ser con signo siempre y lo has puesto correctamente.

Un saludo.-

dmosca
24 de julio de 2017, 03:46
Gracias x la respuesta

creo que el problema está en la definición de las variables, modifique el select y sigue dando error en la variable de trabajo:

adjunto imagen con el codigo

error
B]You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ':WORDEN Limit 1' at line

estoy empezando con sql y no por donde seguir buscando...

saludos

Josber
24 de julio de 2017, 12:22
dmosca, Tienes mal montado el STRING, la sintáxis correcta sería:

STRING "SELECT ORDEN, CAMPO1, CAMPO2, CAMPO3 FROM EJEMPLO WHERE ORDEN LIKE '%"
WORDEN
"%' LIMIT 1" DELIMITED BY SIZE INTO NAME-DB
END-STRING".

y si ya quieres rizar el rizo y que sea más exacta la instrucción, puedes poner:

STRING "SELECT ORDEN, CAMPO1, CAMPO2, CAMPO3 FROM EJEMPLO WHERE ORDEN LIKE CONCAT('%',TRIM("
WORDEN
"),'%') LIMIT 1'" DELIMITED BY SIZE INTO NAME-DB
END-STRING.

Referenciar la variable con 2 puntos delante, (:WORDEN), sólo tienes que hacerlo cuando es una consulta directa y has de pasarle una variable al gestor de Sql, cuando lo haces con un STRING, no tienes que poner los dos puntos.

A ver si tienes suerte, y si sigue dando problemas dilo a ver que por donde podemos atacar.

Un saludo.-

dmosca
24 de julio de 2017, 13:52
Hola Josber

es una de los tantos intentos que he echo, pero sigo sin poder pasar la info al campo en la working...

si la variable no está definida, el mensaje de error es que no esta la variable definida.

cuando defino la variable en la working y hago referencia a ":variable" me da error de sintaxis

:buzo:

Josber
24 de julio de 2017, 16:28
No he utilizado nunca ADODB, siempre Sql embebido, y ahí, cuando defines la variables en la WK, has de definirlas de esta manera:


WORKING-STORAGE SECTION.
EXEC SQL
BEGIN DECLARE SECTION
END-EXEC.
01 WCAMPO1 PIC X(50) IS GLOBAL.
01 WCAMPO2 PIC S9(5)V999.
EXEC SQL
END DECLARE SECTION
END-EXEC.

No sé si con ADODB hay que declarar las variables así.

Un saludo.-

dmosca
24 de julio de 2017, 16:36
Josber

hice esa prueba, pero sigue con el error

gracias x tu tiempo

Josber
24 de julio de 2017, 17:45
Josber

hice esa prueba, pero sigue con el error

gracias x tu tiempo

No hay de qué, estamos para ayudarnos, aunque no he usado ADODB, ¿puedes pasarme el proyecto y le doy un vistazo a ver que puede pasar?

Un saludo.-

dmosca
25 de julio de 2017, 01:02
adjunto ppj, espero se haga la luz....

estoy por volver a los indexados cobol...

---------- Post añadido : 20:02 ---------- Post anterior : 19:53 ----------

Adjunto ppj...

estoy atento a sus comentarios....

muchas gracias

3 intento de subir el ppj

Kuk
25 de julio de 2017, 17:53
dmosca, cambia los campos numéricos por los binarios estándar. Es decir


01 WEJEMPLO.
02 WORDEN PIC S9(4) COMP-5.
02 WCAMPO1 PIC X(30).
02 WCAMPO2 PIC S9(9) COMP-5.
02 WCAMPO3 PIC X.


Muéstranos el código DDL de la tabla (con qué tipos de campos se ha creado).

Josber
25 de julio de 2017, 17:56
dmosca, cambiando los parámetros por los de la BD que tengo yo, a mi me funciona perfectamente tal y como lo tienes ahora, (con la linea del INTO :WORDEN .... comentada), en cuanto quito el comentario a la linea, ya no funciona de ninguna manera.

¿Qué es lo que quieres hacer exactamente?, ¿Una lectura recursiva de todos los registros que tengan un cierto valor o de sólo un registro?.

Este es el pantallazo de que funciona sin quitar el comentario de la linea.

Kuk
25 de julio de 2017, 17:58
También ahora que lo pienso, en ADO (que yo nunca lo he usado) ¿se puede meter INTO? Creo que no, hay otro comando para recoger los datos, algo tipo "GetRecordSet" o algo así ¿no? :piensa:

Josber
25 de julio de 2017, 18:24
Cuando empecé a trastear con las BDs, para eliminar los ficheros indexados de COBOL, pero sólo los grandes, los pequeños los conservo, estuve mirando si hacerlo con SQL-Embebido o a través de ADO, al final me decanté por SQL_Embebido, porque aparte de que escribes menos y es más sencillo, después el programa es más claro de entender, ADO se aparta mucho de la "limpieza visual" que ha tenido COBOL de toda la vida.

Un saludo

dmosca
25 de julio de 2017, 23:33
Josber

quiero ver si existe un usuario y comparar si corresponde el password.

como te comentaba si elimino la linea del "into" funciona ok.

Ejemplo es una base simple para ver si lo puedo hacer funcionar...

Estoy iniciando con sql, como leí en el foro que es mas rápido ADO que SQL embebido me decidí por ADO.

Kuk:

modifique los campos en la working, sigue el error

adjunto definición de la tabla ejemplo:

Kuk
27 de julio de 2017, 12:55
dmosca, como he dicho en mi post de antes, el INTO no puedes usarlo ahí. Fíjate en el ejemplo de Dasije:

[Aporte] Ejemplo PWC y SQL Embebido - COBOL Foro (http://www.cobolforo.es/showthread.php?t=263&p=1237)

Dasije
29 de julio de 2017, 00:19
dmosca, Hay que tener en cuenta los tipos de datos:

Char PIC X(x).
Int PIC S9(9) COMP-5.

En el manual de COBOL, hay una sección sobre el tema de SQL, donde te indica que tipo de campos debes seguir, en el resto de motores no varia mucho.