Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL PowerCOBOL (ActiveX, v4 - v11)
PowerCOBOL (ActiveX, v4 - v11) Versiones del IDE basadas en ActiveX
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Duda] No se imprime la base de datos DestinedBroken Visual COBOL y DEV-HUB 17 18 de febrero de 2022 16:38
[Duda] I/O Error al ejecutar una base de datos DestinedBroken Visual COBOL y DEV-HUB 11 2 de febrero de 2022 11:13
[Sintaxis] URGENTE: Base de Datos en MySql en Red Hrmcobol PowerCOBOL (ActiveX, v4 - v11) 10 21 de agosto de 2021 15:30
Base de datos .mdb Lobosauseda Bases de datos 4 26 de agosto de 2019 09:36
[Duda] Trabajar con Base de Datos (y no con indexados) Anthony AcuCobol 3 19 de noviembre de 2016 21:20

Respuesta
 
Herramientas

  #11
Antiguo 7 de junio de 2015, 21:37
Breew
Patrocinador del Foro
Última Actividad 09.05.2022 07:47
Posts Posts: 125
Likes enviados Enviados: 104
Likes recibidos Recibidos: 8

Citación del post de Kuk Ver Mensaje
A qué te refieres con lo de "iniciar la búsqueda"???
De todoso modos, si he entendido bien la pregunta, si le pones "RenderText" al CmText, indica "yyyy/MM/dd" con MM en mayúsculas y te mostrará las fechas en el formato que necesitas.
Hola kuk.

Mi intencion es iniciar una busqueda por fechas . Lo interpreto como si fuera un fichero cobol indexado, es decir
Siguiendo el ejemplo de Hrmcobol
Código COBOL:
  1.     move "Text" OF Cm-CODIGO to wl-codigo
  2.      
  3.      string "CLICODIGO = '" DELIMITED BY SIZE
  4.              WL-CODIGO       DELIMITED BY SIZE
  5.             "'"              DELIMITED BY SIZE
  6.        into wl-condi
  7.      end-string
  8.  
  9.      move SPACES   to "Condition" OF CmDb1
  10.      move wl-condi to "Condition" OF CmDb1    
  11.      
  12.      INVOKE CmDb1 "SelectRecords" RETURNING ReturnValue

Aqui , funciona correctamente y cuando leo un registro , la fecha me aparece con formato yyyy/MM/dd



Código COBOL:
  1.      move "Text" OF Cm-FECHA2 to wl-codigo
  2.      
  3.      string "FECHA = '"        DELIMITED BY SIZE
  4.              WL-CODIGO       DELIMITED BY SIZE
  5.             "'"              DELIMITED BY SIZE
  6.        into wl-condi
  7.      end-string
  8.  
  9.      move wl-condi to "Condition" OF CmDb1    
  10.      
  11.      INVOKE CmDb1 "SelectRecords" RETURNING ReturnValue

El problema es que si quiero buscar fechas aunque el cmtext CmFecha-2 tenga un render yyyy/MM/dd me aparece un error en tiempo de ejecucion SQL error State 22005 native error code
Controlador ODBC dBase No coinciden los tipos de datos en la expresion de criterios.

Interpreto que es porque en la base el formato solo especifica D , y no puede comparar la busqueda por que yo lo intento con yyyy/MM/dd.
Tambien lo he probado de varias maneras , pero sigue dandome error.

En resumen lo que quiero hacer es poder interrogar la base de datos y quedarme o pasar una tabla cobol ( o fichero , o lo que sea ) los datos que cumpran la condicion para procesarlos. En este caso por fechas.

Saludos

Añadido despues de 5 minutos
Citación del post de Hrmcobol Ver Mensaje
Amigo, yo muevo el "Text" del CmText a un pic 9(8). lo mismo hago, si es que me lo permite el campo de la db, y luego los comparo, o bien los trabajo de acuerdo a mi necesidad.

Saludos

PD.: espero te sirva

Je, je, je , siempre sirven vuestras enseñanzas. Inicialmente lo que habia pensado hacer es leer toda la base dB y grabarla a un fichero cobol indexado. Proceso y supongo que todo me podria salir mas o menos correctamente.
Pero pienso que realmente no se haria asi, Lo suyo seria actuar directamente sobre la base ( creo ) por esto os comentaba que no se como plantearme este reto, mi pensamiento sigue trabajando en el Rmcobol Dos, quisiera cambiar un poco el chip y aprender a trabajar de otra manera.

Saludos

Última edición por Breew fecha: 7 de junio de 2015 a las 21:42. Razón: Post añadido
Breew is offline   Responder Con Cita
  #12
Antiguo 8 de junio de 2015, 10:05
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Breew, la propiedad "Text" en un CmText obtiene valor sobre 8 en numérico, no coge los guiones/barras. Si en la tabla, el campo de la fecha lo tienes definido como DATE, no va a funcionar. Porque, que yo sepa, el tipo DATE en una tabla siempre lleva separadores, cual exactamente depende del formato. Por ejemplo el formato ISO es AAAA-MM-DD. Si le pones barras "/", va a dar error de formato.

Dicho esto, revisa el formato definido en la tabla. Y sea como sea que muestres las fechas en CmText, con STRING construye el formato de fecha esperado por la BBDD. Así no te dará error.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #13
Antiguo 11 de junio de 2015, 23:02
Breew
Patrocinador del Foro
Última Actividad 09.05.2022 07:47
Posts Posts: 125
Likes enviados Enviados: 104
Likes recibidos Recibidos: 8

Hola.

He seguido tus instrucciones y he salvado el error, pero no me funciona, no encuentro el fallo.
Quizas no sepa bien como actua.
Mi intencion es que haga la seleccion por fechas , le indico una fecha minima y quisiera que se situara en ella. A partir de ella , me hiciera un avance al siguiente registro que cumpliera el mismo requisito.

Código COBOL:
  1.  
  2.  ENVIRONMENT     DIVISION.
  3.  DATA            DIVISION.
  4.  WORKING-STORAGE SECTION.
  5.  01  wl-codigo  pic x(010).
  6.  01  wl-condi   pic x(050).
  7.  01  FECHA.
  8.       02 AÑO        PIC X(4).
  9.       02 MES        PIC X(2).
  10.       02 DIA        PIC X(2).
  11.  01  FECHA-2       PIC X(10).
  12.  
  13.  PROCEDURE       DIVISION.
  14.      move spaces to wl-condi.
  15. *     move "Text" OF Cm-FECHA2 TO FECHA.
  16. *             STRING AÑO "/" MES "/" DIA DELIMITED BY SIZE
  17. *                into FECHA-2.
  18. *              MOVE FECHA-2 TO "Text" OF Cm-FECHA3.
  19. *     MOVE FECHA-2 TO WL-CODIGO.
  20. *     move wl-codigo  TO "Text" OF Cm-FECHA3.
  21. *     string "FECHA  >= '"      DELIMITED BY SIZE
  22. *             WL-CODIGO       DELIMITED BY SIZE
  23. *            "'"              DELIMITED BY SIZE
  24. *            into wl-condi.
  25.  
  26. *  aqui le meto la fecha a la fuerza para ver si chuta
  27.        move "FECHA > 2014/08/30" to wl-condi.
  28. *     end-string
  29.  
  30.      move SPACES   to "Condition" OF CmDb1
  31.      move wl-condi to "Condition" OF CmDb1    
  32.      
  33.      INVOKE CmDb1 "SelectRecords" RETURNING ReturnValue
  34.      if ReturnValue < zeros
  35.         INVOKE pow-self "DisplayMessage" USING "Atencion" "Codigo No Existe" 0
  36.                exit program.
  37.      INVOKE CmDb1 "ReadNextRecord" RETURNING ReturnValue
  38.      if ReturnValue = 1
  39.         move "FECHA"        of CmDb1 to "Text" OF Cm-FECHA
  40.         move "CLICODIGO"    of CmDb1 to "Text" OF Cm-Clicodigo
  41.         move "NOMBRE"       of CmDb1 to "Text" OF Cm-Nombre
  42.         move "TOTAL_FRA"    of CmDb1 to "Text" OF Cm-Total_fra
  43.         move "N_FACTURA"    of CmDb1 to "Text" OF Cm-n_factura
  44.         ELSE DISPLAY RETURNVALUE
  45.      end-if        

Se posiciona en una fecha erronea :-¿?
Y el avance de registro no funciona.

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  wl-codigo  pic x(010).
  5.  01  wl-condi   pic x(050).
  6.  PROCEDURE       DIVISION.
  7.  
  8.      INVOKE CmDb1 "ReadNextRecord" RETURNING ReturnValue
  9.      if ReturnValue = 1
  10.         move "FECHA"        of CmDb1 to "Text" OF Cm-FECHA
  11.         move "CLICODIGO"    of CmDb1 to "Text" OF Cm-Clicodigo
  12.         move "NOMBRE"       of CmDb1 to "Text" OF Cm-Nombre
  13.         move "TOTAL_FRA"    of CmDb1 to "Text" OF Cm-Total_fra
  14.         move "N_FACTURA"    of CmDb1 to "Text" OF Cm-n_factura
  15.      end-if    
Citación del post de Kuk Ver Mensaje
Breew, la propiedad "Text" en un CmText obtiene valor sobre 8 en numérico, no coge los guiones. Si en la tabla, el cahmpo de la fecha lo tienes definido como DATE, no va a funcionar. Porque, que to sepa, el tipo DATE en una tabla siempre lleva separadores, depende del formato. Por ejemplo el formato ISO es AAAA-MM-DD. Si le pones barras "/", va a dar error de formato.

Dicho esto, revisa el formato definido en la tabla. Y sea como sea que muestres las fechas en CmText, con STRING construye el formato de fecha esperado por la BBDD. Así no te dará error.
Breew is offline   Responder Con Cita
  #14
Antiguo 12 de junio de 2015, 09:47
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Breew, lo que yo te decía, que mirases cómo tienes definido el campo FECHA en la tabla de la base de datos, no en tu código COBOL. Además:
Citación del post de Kuk Ver Mensaje
Por ejemplo el formato ISO es AAAA-MM-DD. Si le pones barras "/", va a dar error de formato.
Y en tu código tienes "/" en vez de "-".

Prueba con:

Código COBOL:
  1.          STRING AÑO "-" MES "-" DIA
  2.              DELIMITED BY SIZE INTO FECHA-2.

Por cierto, te compila con la Ñ ¿?!!! Nunca lo había probado.

Ya me contarás



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #15
Antiguo 13 de junio de 2015, 00:33
Breew
Patrocinador del Foro
Última Actividad 09.05.2022 07:47
Posts Posts: 125
Likes enviados Enviados: 104
Likes recibidos Recibidos: 8

Hola Kuk.

Citación del post de Kuk Ver Mensaje
Breew, lo que yo te decía, que mirases cómo tienes definido el campo FECHA en la tabla de la base de datos, no en tu código COBOL. Además:

Y en tu código tienes "/" en vez de "-".

Prueba con:

Código COBOL:
  1.          STRING AÑO "-" MES "-" DIA
  2.              DELIMITED BY SIZE INTO FECHA-2.
Si, lo entendi . En la base de datos, unicamente encuentro que tiene formato d y si lo busco en un editor hexadecimal lo veo como yyyyymmdd.
En la definicion del CmDb1 en FIELDS, el campo fecha lo detecta con formato yyyy/mm/dd. y en ejecucion , tanto con formato separado con guion o barra, no me da error de formato, simplemente se posiciona en el primer registro fisico de la base. Pero lo hace sin cumplir la condicion de que sea mayor que la fecha que le indico. No tengo ni idea del motivo porque no se posiciona segun la posicion.

Quisiera adjuntaros la base, pero es excesivamente grande, y no tengo ninguna herramienta para editarla y poderos enviar algun registro grabado.

Citación del post de Kuk Ver Mensaje
Por cierto, te compila con la Ñ ¿?!!! Nunca lo había probado.

Ya me contarás
Si , compila con la ñ sin problemas. Utilizo el power Cobol 9.0 Sobre windows 7 .
Por cierto la base dbf esta hecha bajo programacion del FoxPro 6.0
Breew is offline   Responder Con Cita
  #16
Antiguo 13 de junio de 2015, 13:04
Hrmcobol
Guardián del Foro
Guardián del Foro: Guardián del espíritu y clima del Foro - Issue reason: Por implicación en la vida del Foro 
Última Actividad 01.03.2022 02:59
Posts Posts: 323
Likes enviados Enviados: 102
Likes recibidos Recibidos: 120

Hola Amigo, que tan grande es la base, no la puedes bajar a un DropBox?.

saludos
Hrmcobol is offline   Responder Con Cita
  #17
Antiguo 16 de junio de 2015, 22:24
Breew
Patrocinador del Foro
Última Actividad 09.05.2022 07:47
Posts Posts: 125
Likes enviados Enviados: 104
Likes recibidos Recibidos: 8

Hola.

He limpiado la base de datos personales y la he subido a un dropbox.

Si alguien quiere echarle un vistazo a ver porque no proceso las fechas por favor que me envie un privado y le doy las señas.

Muchas gracias .
Breew is offline   Responder Con Cita
  #18
Antiguo 22 de junio de 2015, 15:44
Rapinto
Gran amigo del Foro
Guru de COBOL
Activista del Foro: Activista del Foro - Issue reason: ¡Gracias! Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por ayudar mucho a los foreros Guru de los Gurus: Por solidos y amplios conocimientos - Issue reason: Por saber demasiado! 
Última Actividad 29.01.2018 20:23
Posts Posts: 240
Likes enviados Enviados: 19
Likes recibidos Recibidos: 224

Breew,

Tenta o seguinte SQL

Código SQL:
  1. "SELECT * FROM FACTURA1 WHERE [FECHA] between #1/02/2003 12:00:00 AM# and #1/02/2003 12:00:00 AM# ;"

Atenção que o formato da data é MM/DD/AAAA

Espero que resolva

Saludos,
Rui Pinto
Rapinto is offline   Responder Con Cita
  #19
Antiguo 28 de enero de 2016, 19:03
Recato53
Patrocinador del Foro
Última Actividad 19.07.2025 12:10
Posts Posts: 79
Likes enviados Enviados: 72
Likes recibidos Recibidos: 11

Citación del post de Hrmcobol Ver Mensaje
Hola Breew, te adjunto un zip con un ppj que lee una base access con una tabla de materiales, también va un jpg con la odbc que debes crear, una base con datos. Si tiene algún error avísame y lo vemos. Saludos espero que te sirva. Si no dime y la seguimos.


PD. Crea una carpeta en C: que se llame C:\MF_Breew



Saludos
Estoy usando tu ejemplo con tu Base de Datos y no tengo problemas en conectarme, pero cuando lo intento con otra Base de Datos no hay manera de conectarme. Envio un ejemplo de la Base de datos, para ver donde puede estar el problema.

Muchas gracias.
Archivos Adjuntos
Tipo de Archivo: zip Remesas.zip (15,4 KB)Descargas: 88
Recato53 is offline   Responder Con Cita
  #20
Antiguo 28 de enero de 2016, 22:46
Dasije
Forero Senior
Última Actividad 06.03.2022 17:04
Posts Posts: 173
Likes enviados Enviados: 1
Likes recibidos Recibidos: 79

Al mover los valores, utilizar mascara PIC 9999/99/99.

Yo tengo desarrollado unas rutinas para "descomponer" la mascara que recibe de la base de datos y volcarla a una variable PIC 9(8) en el orden que quiero que se muestre.



Empresa de desarrollo de aplicaciones en COBOL.

DASIJE INFORMATICA, S.L.
C/ TOMAS BRETON 20
11406 JEREZ DE LA FRONTERA
CADIZ

Teléfono : 956 11 21 11
Web: http://www.dasije.es / DASIJE INFORMATICA
E-m@il: clientes(@)dasije.es
Dasije is offline   Responder Con Cita
Respuesta



Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:27.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.