Ver la Versión Completa : [Sintaxis] Ayuda para interactuar con base de Datos
Breew
1 de junio de 2015, 18:58
Hola.
Tengo un fichero en c:\nshop\datos.mdb que me gustaria poder procesarlo.
En el se encuentra la tabla Articulos, de la cual , necesitaria ir controlando el stock para poder hacer pedidos, inventarios, etc.
He visto que en Los ejemplos de power esta el proyecto DbAccess, pero no tengo ni idea de poder hacerlo funcionar y tampoco se si me iria bien.
Supongo que deberia crear desde windows u origen de datos, pero no lo he hecho nunca y voy muy perdido.
Tambien veo que igual deberia de hacerlo desde el control powerDBaccess, pero ni idea.
Hay alguien que me puede hacer un pequeño tutorial para conseguir abrir la base y poderla leer.
Gracias
Kuk
1 de junio de 2015, 21:18
Breew, yo tampoco lo he hecho nunca. Pero se algunas cosas. Debes meter un DBaccess como decias, y en modo diseño conectarlo a la BBDD esa de access. Es decir, abres las propiedades de DBaccess con doble click, buscas origen de datos correspondiente a Access, y sigues los pasos para recuperar la tabla y su estuctura.
Hrmcobol
2 de junio de 2015, 03:24
Hola Breew, mándame una copia de la base y te armo un ppj que lea y actualice la tabla de artículos
Saludos
Hrmcobol
2 de junio de 2015, 13:08
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
Breew
4 de junio de 2015, 07:55
Hola.
Veo que debo de configurar DNS de sistema, pero me parece que me faltan drivers. Solo me aparece la opcion de SQL Server y de ahi no paso.
¿No has tocado nada de dns de Usuario ?
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
Hrmcobol
4 de junio de 2015, 12:37
Que Windows Tinenes, si es Win7 64 Busca Aqui:
C:\Windows\SysWOW64\odbcad32.exe
Breew
5 de junio de 2015, 07:55
Que Windows Tinenes, si es Win7 64 Busca Aqui:
C:\Windows\SysWOW64\odbcad32.exe
Ok, vaya despiste.
Conecta sin problemas, puedo leer la tabla, pero cuando actualizo, entiendo que deberia grabar el valor nuevo, pero no lo hace.
Tambien tengo dudas sobre como deberia planificarme, tengo poca experiencia.
He pensado hacer una busqueda por familias, o por proveedores. Ver el stock y ajustarlo para hacer el pedido.
Lo hago directamente sobre la base o paso los resultados a un Table control ?
La busqueda la hago por cobol o bien hay algun comando especial en DB ?
La base tiene 16.000 articulos, ya que es una base antigua, y cuando habro el fichero contiene varias tablas, Como le indico que tabla ha de buscar ?
Gracias por todo.
Breew
6 de junio de 2015, 13:55
Hola.
Estoy probando con una base dbf.
He hecho la conexion bien, y lee la tabla correctamente.
El problema lo encuentro al hacer una comparacion con la fecha.
Si vuelco el valor de la base en un cmtext me aparece formato yyyy/mm/dd.
He creado un cmtext para iniciar la busqueda y me aparece el error de power cobol db access control indicandome que no coinciden los tipos de datos en la expresion de criterios.
¿ Que formato le indico al CmText para que funcione la comparacion?
PD. En la seleccion del campo en el control power db access me indica el formato yyyy/mm/dd pero no funciona en el cmtext
Saludos.
Kuk
6 de junio de 2015, 20:33
He creado un cmtext para iniciar la busqueda y me aparece el error de power cobol db access control
A qué te refieres con lo de "iniciar la búsqueda"??? :piensa:
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.
Hrmcobol
6 de junio de 2015, 23:45
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
Breew
7 de junio de 2015, 21:37
A qué te refieres con lo de "iniciar la búsqueda"??? :piensa:
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
move "Text" OF Cm-CODIGO to wl-codigo
string "CLICODIGO = '" DELIMITED BY SIZE
WL-CODIGO DELIMITED BY SIZE
"'" DELIMITED BY SIZE
into wl-condi
end-string
move SPACES to "Condition" OF CmDb1
move wl-condi to "Condition" OF CmDb1
INVOKE CmDb1 "SelectRecords" RETURNING ReturnValue
Aqui , funciona correctamente y cuando leo un registro , la fecha me aparece con formato yyyy/MM/dd
move "Text" OF Cm-FECHA2 to wl-codigo
string "FECHA = '" DELIMITED BY SIZE
WL-CODIGO DELIMITED BY SIZE
"'" DELIMITED BY SIZE
into wl-condi
end-string
move wl-condi to "Condition" OF CmDb1
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
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
Kuk
8 de junio de 2015, 10:05
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. ;)
Breew
11 de junio de 2015, 23:02
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.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 wl-codigo pic x(010).
01 wl-condi pic x(050).
01 FECHA.
02 AÑO PIC X(4).
02 MES PIC X(2).
02 DIA PIC X(2).
01 FECHA-2 PIC X(10).
PROCEDURE DIVISION.
move spaces to wl-condi.
* move "Text" OF Cm-FECHA2 TO FECHA.
* STRING AÑO "/" MES "/" DIA DELIMITED BY SIZE
* into FECHA-2.
* MOVE FECHA-2 TO "Text" OF Cm-FECHA3.
* MOVE FECHA-2 TO WL-CODIGO.
* move wl-codigo TO "Text" OF Cm-FECHA3.
* string "FECHA >= '" DELIMITED BY SIZE
* WL-CODIGO DELIMITED BY SIZE
* "'" DELIMITED BY SIZE
* into wl-condi.
* aqui le meto la fecha a la fuerza para ver si chuta
move "FECHA > 2014/08/30" to wl-condi.
* end-string
move SPACES to "Condition" OF CmDb1
move wl-condi to "Condition" OF CmDb1
INVOKE CmDb1 "SelectRecords" RETURNING ReturnValue
if ReturnValue < zeros
INVOKE pow-self "DisplayMessage" USING "Atencion" "Codigo No Existe" 0
exit program.
INVOKE CmDb1 "ReadNextRecord" RETURNING ReturnValue
if ReturnValue = 1
move "FECHA" of CmDb1 to "Text" OF Cm-FECHA
move "CLICODIGO" of CmDb1 to "Text" OF Cm-Clicodigo
move "NOMBRE" of CmDb1 to "Text" OF Cm-Nombre
move "TOTAL_FRA" of CmDb1 to "Text" OF Cm-Total_fra
move "N_FACTURA" of CmDb1 to "Text" OF Cm-n_factura
ELSE DISPLAY RETURNVALUE
end-if
Se posiciona en una fecha erronea :-¿?
Y el avance de registro no funciona.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 wl-codigo pic x(010).
01 wl-condi pic x(050).
PROCEDURE DIVISION.
INVOKE CmDb1 "ReadNextRecord" RETURNING ReturnValue
if ReturnValue = 1
move "FECHA" of CmDb1 to "Text" OF Cm-FECHA
move "CLICODIGO" of CmDb1 to "Text" OF Cm-Clicodigo
move "NOMBRE" of CmDb1 to "Text" OF Cm-Nombre
move "TOTAL_FRA" of CmDb1 to "Text" OF Cm-Total_fra
move "N_FACTURA" of CmDb1 to "Text" OF Cm-n_factura
end-if
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. ;)
Kuk
12 de junio de 2015, 09:47
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:
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:
STRING AÑO "-" MES "-" DIA
DELIMITED BY SIZE INTO FECHA-2.
Por cierto, te compila con la Ñ ¿?!!! :) Nunca lo había probado.
Ya me contarás ;)
Breew
13 de junio de 2015, 00:33
Hola Kuk.
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:
STRING AÑO "-" MES "-" DIA
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.
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
Hrmcobol
13 de junio de 2015, 13:04
Hola Amigo, que tan grande es la base, no la puedes bajar a un DropBox?.
saludos
Breew
16 de junio de 2015, 22:24
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 .
Rapinto
22 de junio de 2015, 15:44
Breew,
Tenta o seguinte SQL
"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
Recato53
28 de enero de 2016, 19:03
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.
Dasije
28 de enero de 2016, 22:46
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.
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.