PDA

Ver la Versión Completa : [Sintaxis] Control DBAccess...


Fito
15 de abril de 2021, 16:39
Hola Amigos:

Estoy haciendo un trabajo con unas notas de pedido que están en un SQL Server de un tercero. Y necesito leer y modificar sus tablas. Para eso estoy usando el control DBAceccess.

El primer problema que me encuentro es que no logro filtrar por fecha.


WORKING-STORAGE SECTION.

01 db-error pic s9(5) comp-5.
01 db-eof pic s9(5) comp-5.

01 ind pic s9(5) comp-5.
01 wcondicion pic x(256).

01 wdesfec-comp.
02 wdesfec-aa pic 9999.
02 pic x value "/".
02 wdesfec-mm pic 99.
02 pic x value "/".
02 wdesfec-dd pic 99.
02 pic x(9) value " 00:00:00".
01 redefines wdesfec-comp.
02 wdesfec pic x(19).

01 whasfec-comp.
02 whasfec-aa pic 9999.
02 pic x value "/".
02 whasfec-mm pic 99.
02 pic x value "/".
02 whasfec-dd pic 99.
02 pic x(9) value " 00:00:00".
01 redefines whasfec-comp.
02 whasfec pic x(19).

01 wfec-comp.
02 wfec-aa pic 9999.
02 pic x value "/".
02 wfec-mm pic 99.
02 pic x value "/".
02 wfec-dd pic 99.
01 redefines wfec-comp.
02 wfec pic x(19).

PROCEDURE DIVISION.

#include "copys\declara.cpy".

comienzo.
invoke grdLista "ClearList".

invoke dbPedidos "OpenDB".

move spaces to wdesfec whasfec.

move "text" of txtDesfec to fecha-dma.
move fecha-dma-aa to wdesfec-aa.
move fecha-dma-mm to wdesfec-mm.
move fecha-dma-dd to wdesfec-dd.

move "text" of txtHasfec to fecha-dma.
move fecha-dma-aa to whasfec-aa.
move fecha-dma-mm to whasfec-mm.
move fecha-dma-dd to whasfec-dd.

open output tempo close tempo open i-o tempo.

open input ctacte arti.

move spaces to wcondicion.

string "XFECHA >= " delimited by size
wdesfec delimited by size
" and XFECHA <= " delimited by size
whasfec delimited by size
into wcondicion
end-string.

move wcondicion to "Condition" of dbPedidos.

invoke dbPedidos "SelectRecords" returning db-error.
if db-error >= zeros
move 1 to db-eof
perform until db-eof not = 1
invoke dbPedidos "ReadNextRecord" returning db-eof
if db-eof = 1
perform hace thru f-hace
end-if
end-perform
end-if.

invoke dbPedidos "CloseDB".



Ya he probado de varias maneras y no logro hacerlo.

Le saco la condición de filtro y me trae todo y me fijo de qué manera me trae la fecha 2021/03/29 16:28:21

Saludos.

Fito...

---------- Post añadido : 11:55 ---------- Post anterior : 11:23 ----------

Me contesto solo.

El campos fecha debe ser pic 9(8) AAAAMMDD y va entre apóstrofes.


WORKING-STORAGE SECTION.

01 xdesfec pic 9(8).
01 xhasfec pic 9(8).

PROCEDURE DIVISION.

string "XFECHA >= '" delimited by size
xdesfec delimited by size
"' and XFECHA <= '" delimited by size
xhasfec delimited by size
"'" delimited by size
into wcondicion
end-string.



---------- Post añadido : 11:39 ---------- Post anterior : 11:55 ----------

Holaaaa:

Me parece que hasta acá llegué con el control DBAccess.

No me etrae los datos de un campo tipo "decimal", si bien la conversión me dice que es un s9(14)v99, no me lee nada.
Creo que ese problema lo tuve con un MySql una vez, evidentemente acá tambien.

Voy a tener que probar con otra cosa :(

Saludos

Fito...

fastpho
15 de abril de 2021, 20:52
@Fito, Hola podes subir la bd para ver si te podemos ayudar con el campo tipo decimal

Fito
15 de abril de 2021, 23:37
Hola:

Ahí subi la tabla

saludos

Fito

JCantero
16 de abril de 2021, 01:20
En PowerCobol no se, pero en RM/Cobol que es lo que yo utilizo con base de datos SQLserver, PostgreSQL, etc, utilizo para los importes campos de edición o alfanumericos que seria lo mismo.

Intenta declarar un campo para probar:

01 importe pic ---------------9.99.

Yo pongo siempre "." en vez de ',' para no meter configuraciones ni conversiones.

Si no te funciona prueba con

01 importe pic x(16).

y luego un "move importe to importe-numerico "


Y en algunas ocasiones para ejecutar procedimientos almacenados en la base de datos (o funciones) utilizo campos numericos como tu indicas:



01 valor1 pic S9(15)V99.
01 consulta-sql pic x(100).


****** esto seria la consulta que quiero hacer al procedimiento almacenado f_saldo

initialize consulta-sql

STRING "select f_saldo"
delimited by size
"('" cuenta "')"
delimited by size
INTO consulta-sql

********** para ejecutar la consulta y recibir resultado

SQL PREPARE QUERY sql-QueryHaNdle
sql-ConnectionHandle
consulta-sql.
SQL START QUERY sql-QueryHandle.
SQL FETCH ROW sql-QueryHandle
SQL GET DATA sql-queryhandle
1 VALOR1 OMITTED.



Pero este ultimo rollo que he puesto aqui es para rm/cobol

fastpho
16 de abril de 2021, 02:26
@Fito, yo lo meteria en listview y probaria asi:

*----------------
Carga.
INVOKE DB-Ventas-Database "ReadNextRecord" RETURNING ReturnValue.

IF ReturnValue not = 1 then
MOVE 2 to OFlag
exit program
end-if
end-if.
IF ReturnValue = 1
INVOKE CMLISTVIEW1 "Add" USING 1 1 RETURNING WK-IDX
IF WK-IDX > 0 THEN
MOVE "ListItems"(WK-IDX) OF CMLISTVIEW1 TO POW-PCMLIST
MOVE "ARTICULOID" OF DB-Ventas-Database TO "Text"(1) OF POW-PCMLIST
MOVE "CANTIDAD" OF DB-Ventas-Database TO "Numeric"(2) OF POW-PCMLIST *> picture $$$,$$$,$$9.99
MOVE "XTOTAL" OF DB-Ventas-Database TO "Numeric"(3) OF POW-PCMLIST *> picture $$$,$$$,$$9.99
MOVE "PRECIO" OF DB-Ventas-Database TO "Numeric"(4) OF POW-PCMLIST *> picture $$$,$$$,$$9.99
INVOKE CMLISTVIEW1 "Refresh"
MOVE 3 TO OFlag
END-IF
END-IF.
*----------------
F-Carga.
exit program.

Saludos

Fito
16 de abril de 2021, 16:02
Hola:

Me viene en cero el dato, sin importar el formato que le de.

No voy a renegar más con esto, voy a ver con ADO si funciona

Muchas gracias...

Saludos...

Fito...

fastpho
16 de abril de 2021, 17:30
Hola @Fito, es muy raro que te traiga los valores en zero , no tendra que ver con la configuracion regional que tenes , o la declaracion

SPECIAL-NAMES
DECIMAL-POINT IS COMMA.


---------- Post añadido : 16:30 ---------- Post anterior : 15:50 ----------

Hola @Fito, es muy raro que te traiga los valores en zero , no tendra que ver con la configuracion regional que tenes , o la declaracion

SPECIAL-NAMES
DECIMAL-POINT IS COMMA.


yo le pondria en la configuracion regional de numeros , Setear "." separador de decimales (numeros) y Setear "," separador de miles (numeros)