Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Control DBAccess... (https://www.cobolforo.es/showthread.php?t=1299)

Fito 15 de abril de 2021 16:39

Control DBAccess...
 
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.

Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  
  3.  01  db-error                pic s9(5) comp-5.
  4.  01  db-eof                  pic s9(5) comp-5.
  5.  
  6.  01  ind                     pic s9(5) comp-5.
  7.  01  wcondicion              pic x(256).
  8.  
  9.  01  wdesfec-comp.
  10.      02 wdesfec-aa           pic 9999.
  11.      02                      pic x value "/".
  12.      02 wdesfec-mm           pic 99.
  13.      02                      pic x value "/".
  14.      02 wdesfec-dd           pic 99.
  15.      02                      pic x(9) value " 00:00:00".
  16.  01  redefines wdesfec-comp.
  17.      02 wdesfec              pic x(19).
  18.      
  19.  01  whasfec-comp.
  20.      02 whasfec-aa           pic 9999.
  21.      02                      pic x value "/".
  22.      02 whasfec-mm           pic 99.
  23.      02                      pic x value "/".
  24.      02 whasfec-dd           pic 99.
  25.      02                      pic x(9) value " 00:00:00".
  26.  01  redefines whasfec-comp.
  27.      02 whasfec              pic x(19).
  28.  
  29.  01  wfec-comp.
  30.      02 wfec-aa              pic 9999.
  31.      02                      pic x value "/".
  32.      02 wfec-mm              pic 99.
  33.      02                      pic x value "/".
  34.      02 wfec-dd              pic 99.
  35.  01  redefines wfec-comp.
  36.      02 wfec                 pic x(19).
  37.  
  38.  PROCEDURE       DIVISION.
  39.      
  40.  #include "copys\declara.cpy".
  41.  
  42.  comienzo.
  43.      invoke grdLista "ClearList".
  44.  
  45.      invoke dbPedidos  "OpenDB".
  46.  
  47.      move spaces                       to wdesfec whasfec.
  48.      
  49.      move "text" of txtDesfec          to fecha-dma.
  50.      move fecha-dma-aa                 to wdesfec-aa.
  51.      move fecha-dma-mm                 to wdesfec-mm.
  52.      move fecha-dma-dd                 to wdesfec-dd.
  53.  
  54.      move "text" of txtHasfec          to fecha-dma.
  55.      move fecha-dma-aa                 to whasfec-aa.
  56.      move fecha-dma-mm                 to whasfec-mm.
  57.      move fecha-dma-dd                 to whasfec-dd.
  58.  
  59.      open output tempo close tempo open i-o tempo.
  60.  
  61.      open input ctacte arti.
  62.  
  63.      move spaces            to wcondicion.
  64.      
  65.      string "XFECHA >= "       delimited by size
  66.             wdesfec            delimited by size
  67.             " and XFECHA <= "  delimited by size  
  68.             whasfec            delimited by size
  69.         into wcondicion
  70.      end-string.
  71.      
  72.      move wcondicion        to "Condition" of dbPedidos.
  73.      
  74.      invoke dbPedidos "SelectRecords" returning db-error.
  75.      if db-error >= zeros
  76.         move 1          to db-eof
  77.         perform until db-eof not = 1
  78.            invoke dbPedidos "ReadNextRecord" returning db-eof
  79.            if db-eof = 1
  80.               perform hace thru f-hace
  81.            end-if
  82.         end-perform
  83.      end-if.
  84.      
  85.      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.

Código COBOL:
  1.  WORKING-STORAGE SECTION.
  2.  
  3.  01  xdesfec                 pic 9(8).
  4.  01  xhasfec                 pic 9(8).
  5.  
  6.  PROCEDURE       DIVISION.
  7.  
  8.      string "XFECHA >= '"        delimited by size
  9.             xdesfec              delimited by size
  10.             "' and XFECHA <= '"  delimited by size  
  11.             xhasfec              delimited by size
  12.             "'"                  delimited by size  
  13.         into wcondicion
  14.      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

1 Archivos Adjunto(s)
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:


Código COBOL:
  1.        01 valor1 pic S9(15)V99.
  2.        01 consulta-sql  pic x(100).
  3.  
  4.  
  5. ****** esto seria la consulta que quiero hacer al procedimiento almacenado f_saldo
  6.  
  7.            initialize consulta-sql
  8.            
  9.            STRING "select f_saldo"
  10.                       delimited by size
  11.                   "('"  cuenta "')"
  12.                       delimited by size
  13.                       INTO consulta-sql
  14.  
  15. ********** para ejecutar la consulta y recibir resultado
  16.  
  17.           SQL PREPARE QUERY sql-QueryHaNdle
  18.                sql-ConnectionHandle
  19.                consulta-sql.
  20.            SQL START QUERY sql-QueryHandle.
  21.            SQL FETCH ROW sql-QueryHandle
  22.            SQL GET DATA sql-queryhandle
  23.                  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:
Código COBOL:
  1. *----------------
  2.  Carga.      
  3.        INVOKE DB-Ventas-Database "ReadNextRecord" RETURNING ReturnValue.
  4.  
  5.        IF ReturnValue not = 1 then 
  6.                  MOVE 2 to OFlag  
  7.                  exit program
  8.                  end-if
  9.        end-if.
  10.        IF ReturnValue = 1  
  11.          INVOKE CMLISTVIEW1 "Add" USING 1 1 RETURNING WK-IDX
  12.          IF WK-IDX > 0 THEN
  13.             MOVE "ListItems"(WK-IDX) OF CMLISTVIEW1   TO POW-PCMLIST
  14.             MOVE "ARTICULOID"  OF DB-Ventas-Database       TO "Text"(1) OF POW-PCMLIST            
  15.             MOVE "CANTIDAD"    OF DB-Ventas-Database       TO "Numeric"(2) OF POW-PCMLIST *> picture $$$,$$$,$$9.99
  16.             MOVE "XTOTAL"      OF DB-Ventas-Database       TO "Numeric"(3) OF POW-PCMLIST *> picture $$$,$$$,$$9.99
  17.             MOVE "PRECIO"      OF DB-Ventas-Database       TO "Numeric"(4) OF POW-PCMLIST *> picture $$$,$$$,$$9.99      
  18.             INVOKE CMLISTVIEW1 "Refresh"
  19.             MOVE 3 TO OFlag
  20.          END-IF
  21.        END-IF.  
  22. *----------------        
  23.  F-Carga.
  24.     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
Código COBOL:
  1. SPECIAL-NAMES
  2.       DECIMAL-POINT IS COMMA.


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

Cita:

Citación del post de fastpho (Mensaje 6632)
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
Código COBOL:
  1. SPECIAL-NAMES
  2.       DECIMAL-POINT IS COMMA.

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


La franja horaria es GMT +2. Ahora son las 16:21.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.