FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Extraer metadatos de archivos DBF
Saludos a todos en el foro...
Tengo dos bases de datos, una en dBASE III y la otra InterBase 6, el asunto es realizar una transición leyendo los registros de un archvo DBF y copiandolos a una tabla relacional en tiempo de ejecución (la estructura es estática). Mi pequeño problema es que existen registros marcados para ser eliminados que son copiados a la base de datos InterBase, por lo tanto obtengo registros duplicados y registros "basura" Mi idea es extraer metadatos de un archivo DBF para saber especificamente cuando un registro ha sido marcado para ser eliminado y de esta forma no sea copiado... pero he allí mi "pequeño gran problema" no se si es posible y de ser así cual seria el procedimiento, obviamente usando Delphi 7 ... gracias a todos por adelantado PD: para convertir los archivos DBF a InterBase utilice K2Pump http://www.ibphoenix.com/downloads/k2pump.zip
__________________
"Nadie es perfecto" (Don Nadie) |
#2
|
||||
|
||||
Pues mira, me acabo de bajar la utilidad que comentas, me he cogido una tabla Dbase con un campo memo incluso, la tabla tiene 2499 Registros he marcado para borrar 50, no he hecho pack y la he dejado como comento.
Con la utilidad que mencionas recien descargada, lo he pasado a una base de datos de Firebird 1.5, me ha pasado 2.449 registros, como ves los marcados no me los ha pasado. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#3
|
|||
|
|||
Gracias por la información, eso me aclara la mitad del problema... solo la mitad, el asunto es que los registro como tal no aparecen en un reporte hecho en Clipper, pero están en los archivos DBF... que son convertidos a tablas relacionales.
Tal vez sea una confusión, pero estoy casi seguro que los reportes de Clipper son generados a partir de los mismos archivos DBF que son utilizados en la conversión, y que esos registros marcados para eliminación estan pasando... así que no entiendo En otras palabras ¿tendrá algo que ver alguna función de Clipper? (por ejemplo pack) pienso que no, pero... :-( Lo unico que pudiese aclararme las dudas es ver los metadatos de los archivos, pero el DataBase Desktop no muestra información acerca de registros "eliminados" ¿o si? Última edición por DobleSiete fecha: 07-01-2005 a las 12:56:05. |
#4
|
|||||
|
|||||
Cita:
Cita:
Cita:
Cita:
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#5
|
|||
|
|||
Toda esa infomación es nueva para mi (excepto la existencia del DBU :-)) y alumbra bastante el problema... pero (siempre el "pero" por delante) no explica porque TU usaste el k2pump y transfirió los archivos marcados para borrar, pero en MI caso si los transfirió ¿por que?
Tu me hablaste de Firebird 1.5, yo estoy usando InterBase 6.0 ¿tendra algo que ver? Ademas tu me dices que los archivos DBF no tienen metadatos, eso no lo asimilo bien, k2pump utiliza funciones de Delphi para extraer información de los DBF, como nombres de archivos, tablas, tipos de datos, longitud, etc. entre esos datos debería estar el "switch" (por llamarlo de alguna manera) que dice "esta marcado para borrar, no te lo puedo proporcionar" ¿o eso lo maneja el mismo DBF? Gracias por tu enorme ayuda ... |
#6
|
||||
|
||||
Cita:
En los Dbf, cada tabla es un archivo, por lo tanto la única información que podemos extraer está en la propia tabla, no existe un sistema de metadatos y dominios como en Interbase y Firebird. Si utilizamos el BDE, que es el motor de base de datos de Borland que incorpora Delphi, podemos extraer todas estas propiedades a través de distintas funciones, FieldCount, FielDefs..... Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#7
|
|||
|
|||
En conclusion: ¿porque no transfirió los registros marcados para borrar de tu DBF, pero en mis archivos si los transfirió?
Con todo lo que me has explicado solo se me ocurre que sea una version mas reciente de k2pump o el uso de Firebird en vez de Interbase ¿tiene sentido alguno de los dos? Muchisimas gracias por las clases de dBase ... :-)
__________________
"Nadie es perfecto" (Don Nadie) |
#8
|
||||
|
||||
Cita:
Solamente aclaro que yo he bajado el mismo día que pusiste el mensaje el programa referenciado. Como no tiene versión ni fecha, lo único que puedo darte es la fecha de última modificación:10-11-2001, por lo que creo que estemos hablando del mismo. Para saber si estamos haciendo exactamente lo mismo: 1.-Con el DBU create una tabla. 2.-La pueblas con algunos registros. 3.-Borra por ejemplo los tres primeros, te marcará <<Deleted>> 4.-Con la utilidad citada pasa solamente esta tabla a Interbase. Te debiera pasar todos los registros menos los que marcaste para borrar. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#9
|
|||
|
|||
Ok, exactamente eso es lo que voy a hacer ...
PD: cuando dije "archivo marcados" si me referia a registros :-)
__________________
"Nadie es perfecto" (Don Nadie) |
#10
|
|||
|
|||
"Mas vale tarde que nunca" ...
La razón por la cual los registros marcados para borrar en los archivos DBF aparecen en la base de datos Interbase es por que así está configurado en Origenes de datos (ODBC) del Panel de control de Windows, en el momento de la conversión de formatos (DBF->SQL). Para que no aparezcan estos registros hay que ir al panel de control (esto es en Windows XP): Inicio -> Panel de control -> Herramientas administrativas -> Origenes de datos (ODBC) en la pestaña "DSN Usuario" seleccionar el origen de datos de usuarios, clic en el botón "Configurar", en la ventana "Configuración ODBC dBASE" click en el botón "Opciones", la ventana se expandirá con una nueva sección llamada "Controlador", desmarcar la opción "Mostrar filas eliminadas"... El resto es convertir los archivos DBF a tablas relacionales SQL, los registros marcados como <Deleted> en el DBU de Clipper ya no aparecerán en Interbase (por poner un ejemplo). Espero que le sea útil a alguien ...
__________________
"Nadie es perfecto" (Don Nadie) |
|
|
|