Ver la Versión Completa : [Sintaxis] Cerrar .dbf desde power
Breew
29 de abril de 2018, 13:29
Hola.
Os comento,
Bajo powercobol 9 hago unicamente consultas sobre dos bases de datos dbf creadas con FOXPRO.
Utilizo para acceder el Driver={Microsoft dBASE Driver (*.dbf)}; Driverid=277; Dbq=C:\DOSER\RAFEL\SEMANALES\DATOS\.
Funcionan perfectamente.
El caso es que en una actualizacion que hicieron en el programa bajo foxpro, me da un error cuando accedo a las bases.
Haciendo pruebas, he conseguido entrar en las bases abriendo las bases con el open office base, modificando el valor de cualquier registro y grabandolo.
Supongo que en la modificacion, dejaron las bases sin su correspondiente close y cuando accedo en power me da error.
Alguien sabe como podria cerrar las bases desde power para poder acceder sin tener que utilizar el open office ( es que una tabla es muy grande y me tarda en exceso )
Gracias por todo.
Dasije
1 de mayo de 2018, 20:48
Por OBDC no se puede cerrar archivos, es una conexión de red, o sea que se conecta y desconecta de sus sesiones abiertas, aunque no sea en red local.
Ahora los archivos DBF podía darse el caso de que estuviera abiertos de solo exclusivo y no te deje acceder a ellos, en ese caso, la solución es copiar los archivos que necesitas acceder a un ruta local, y desde hay accedes desde OBDC.
Breew
5 de mayo de 2018, 19:34
Hola.
La copia tambien me da error.
No entiendo que puede ser. El caso es que si abro con open oficce y lo guardo, entonces si que funciona.
Gracias
Kuk
5 de mayo de 2018, 22:42
Breew, no podría ser la versión del ODBC? Busca a ver si hay alguna más reciente del que tienes.
Breew
30 de mayo de 2018, 21:30
Hola.
Nada, tampoco estoy seguro si es el driver.
Como no se que version tengo, he instalado la ultima que he encontrado y tampoco.
No se si pedir a algun programador que me haga una aplicacion en fox pro que lo abra y lo cierre.
Siempre accedo en modo consulta y siempre sobre una copia, nunca accedo directamente al origen de la copia.
Breew
14 de junio de 2020, 10:09
Bueno.
Al final , lo pude arreglar a lo bestia.
Tras ver que si abria y grababa la copia de la base con el open officce, y despues podia manipularla con el driver, me arme de valor y cogi el original e hice lo mismo.
Desde entonces funciona todo correctamente. desde el programa original, no se ha visto ninguna anomalia, y desde power cobol todo va perfecto.
Hago incapie en que con el ODBC lo unico que hago son consultas para procesarlas de otra manera, pero en ningun caso modifico la base original.
Lo dejo aqui por si algun usuario ha tenido algun problema parecido.
Saludos
Kuk
14 de junio de 2020, 11:30
@Breew, pero entonces cuál era exactamente el problema? A la hora de copiar la base se corrompía o algo así?
Breew
14 de junio de 2020, 12:26
Hola Kuk.
No creo que estuviera corrompida, ya que desde la misma aplicacion hay una funcion para reindexarla y el problema continuaba.
El programa que utilizan es de una pequeña empresa y esta personalizado a sus necesidades.
Hicieron una actualizacion para añadir mas funciones, y supongo que alguna cosa paso en la base (añadieron mas registros ). Desde la aplicacion todo funcionaba bien.
Cuando accedi desde power, no tenia conexion a la base. Asi que decidi abrir una copia con el OpenOffice, eche un vistazo, la grabe y entonces podia acceder .
Empece a darle vueltas a la conexion , al driver, al tamaño de los registros y nada funcionaba.
No lo tengo claro, seguramente , hicieron alguna actualizacion de la base con una version mas actualizada de FOXPRO y al ser compatible con la anterior, no detectaron ningun problema.
Como la copia con open funcionaba, decidi probrar directamente con la original:abrir, modificar un registro y salvarlo todo con el open .
El programa ha funcionado sin novedades y mi aplicacion tambien.
@Breew, pero entonces cuál era exactamente el problema? A la hora de copiar la base se corrompía o algo así?
Breew
9 de septiembre de 2021, 08:15
Hola Coboleros.
Reabro este hilo, porque se me ha repetido el problema con otra tabla del visual Foxpro.
El progama que uso esta basado en una solucion que me dio Rapinto (Gracias amigo).
[Aporte] Base de Dados DBF por OLE2 - COBOL Foro (https://www.cobolforo.es/showthread.php?t=160)
El caso es que hay tablas que no puedo acceder via ADO a no ser que las abra con el open office y las grabe de nuevo .
Buscando la causa , creo que se debe a que hay tablas que se crearon como Tabla DbaseIII y otras son tablas Visual Foxpro.
Normalmente uso el siguiente driver
MOVE "Driver={Microsoft dBASE Driver (*.dbf)}; Driverid=277; Dbq=C:\doser\rafel\datos" TO ADO-CONNECT-STRING.
Para solventarlo, he instalado el visualfoxpro 9 , que supongo que me ha instalado el driver de FoxPor
he intento hacerlo servir
MOVE 'Driver={Microsoft Visual FoxPro Driver (*.dbf)}; Dbq=C:\doser\rafel\datos' TO ADO-CONNECT-STRING.
pero creo que no se si la instruccion seria esta, porque no hay manera de que funcione.
Muchas veces que importo la base con Open me indica que determine el conjunto de caracteres, supongo que en algun momento
se utilizo en un ordenador que no tiene el mismo conjunto de caracteres .
El programa original es muy antiguo, seguramente se origino en MSDos y con el tiempo se ha ido actualizando a varias versiones
compatibles con windows, mientras que las tablas son las mismas.
Alguno sabria indicarme que intruccion deberia poner en la conexion?
Supongo que si hago funcionar el driver de VisualFoxpro, podria consultar la tabla sin tener que modificarla.
Gracias
Breew
15 de septiembre de 2021, 15:45
Hola de nuevo.
He encontrado el comando para la conexion, al menos no da error a la primera
MOVE "Driver={Microsoft Visual FoxPro Driver}; SourceType=DBF; SourceDB=C:\doser\rafel\datos"
TO ADO-CONNECT-STRING.
Pero no consigo ver nada
SELECT * FROM CLIENTES
Intento que coja el contenido de un campo y lo meta en una variable para volcarlo en un ctlist:
Asi como en dbase III funcionaba con estas instrucciones, parece que no hace caso en foxpro.
GETFIELDS SECTION.
GETFIELDS-00.
INVOKE OBJ-FIELDS "GET-ITEM" USING IDX1 RETURNING OBJ-FIELD(IDX1 + 1).
INVOKE OBJ-FIELD(IDX1 + 1) "GET-NAME" RETURNING FIELD-NAME.
*
IF FIELD-NAME = "CLICODIGO" INVOKE OBJ-FIELD(IDX1 + 1) "GET-VALUE" RETURNING CLICODIGO . DISPLAY CLICODIGO .
IF FIELD-NAME = "NOMBRE" INVOKE OBJ-FIELD(IDX1 + 1) "GET-VALUE" RETURNING NOMBRE . DISPLAY NOMBRE .
IF FIELD-NAME = "RAZON" INVOKE OBJ-FIELD(IDX1 + 1) "GET-VALUE" RETURNING RAZON . DISPLAY RAZON .
IF FIELD-NAME = "NIF" INVOKE OBJ-FIELD(IDX1 + 1) "GET-VALUE" RETURNING NIF . DISPLAY NIF .
IF FIELD-NAME = "DIRECCION" INVOKE OBJ-FIELD(IDX1 + 1) "GET-VALUE" RETURNING DIRECCION . DISPLAY DIRECCION .
IF FIELD-NAME = "DP" INVOKE OBJ-FIELD(IDX1 + 1) "GET-VALUE" RETURNING DP . DISPLAY DP .
IF FIELD-NAME = "POBLACION" INVOKE OBJ-FIELD(IDX1 + 1) "GET-VALUE" RETURNING POBLACION . DISPLAY POBLACION .
IF FIELD-NAME = "PROVINCIA" INVOKE OBJ-FIELD(IDX1 + 1) "GET-VALUE" RETURNING PROVINCIA . DISPLAY PROVINCIA .
IF FIELD-NAME = "TELEFONO" INVOKE OBJ-FIELD(IDX1 + 1) "GET-VALUE" RETURNING TELEFONO . DISPLAY TELEFONO .
IF FIELD-NAME = "TELEFONO2" INVOKE OBJ-FIELD(IDX1 + 1) "GET-VALUE" RETURNING TELEFONO2 . DISPLAY TELEFONO2 .
GETFILEDS-99.
EXIT.
Confieso que practicamente no entiendo el codigo, simplemente lo modifico basandome en el original .
Gracias
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.