Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-01-2005
DobleSiete DobleSiete is offline
Miembro
 
Registrado: ene 2005
Posts: 32
Poder: 0
DobleSiete Va por buen camino
Unhappy 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)
Responder Con Cita
  #2  
Antiguo 06-01-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 07-01-2005
DobleSiete DobleSiete is offline
Miembro
 
Registrado: ene 2005
Posts: 32
Poder: 0
DobleSiete Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 07-01-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Cita:
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.
Los Ficheros de Clipper, generalmente generados con la utilidad DBU, son ficheros de tipo Dbase.

Cita:
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 un informe hecho en Clipper los registros marcados para borrar no saldrán, (normalmente), porque no se si sabrás que existen una instrucción Xbase, Set Deleted On/Off y dependiendo como este esta opción los registros se verán o no, a pesar de estar marcados para borrar, incluso existe otro instruccion Recall All que desmarcaría todos los registros marcardos para borrar.

Cita:
En otras palabras ¿tendrá algo que ver alguna función de Clipper? (por ejemplo pack) pienso que no, pero... :-(
Si se ejecuta Pack sobre una tabla Dbf todos los registros marcados para borrar desaparecerán, no siendo posible recuperarlos.

Cita:
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?
Las Tablas Dbase no tienen Metadatos, por eso no es posible mostrarlos, pero si utilizas DBU al visualizar los registros de una tabla, te mostrará todos pero cuando pases sobre los borrados verás <Deleted>. que como dije antes no desaparecen del todo hasta que se ejecuta un Pack sobre dicha tabla, de igual manera ocurre con Dbase III y Dbase IV.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #5  
Antiguo 07-01-2005
DobleSiete DobleSiete is offline
Miembro
 
Registrado: ene 2005
Posts: 32
Poder: 0
DobleSiete Va por buen camino
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 ...
Responder Con Cita
  #6  
Antiguo 07-01-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Cita:
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?
La información de los campos y el tipo de los mismos, se obtiene del propio DBF, no olvides que los Dbf son tablas planas de escritorio y no están almacenados en un solo archivo como Interbase, Firebird, o incluso Access aunque este último también es un sistema de escritorio.

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:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 07-01-2005
DobleSiete DobleSiete is offline
Miembro
 
Registrado: ene 2005
Posts: 32
Poder: 0
DobleSiete Va por buen camino
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)
Responder Con Cita
  #8  
Antiguo 07-01-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Cita:
En conclusion: ¿porque no transfirió los archivos marcados para borrar de tu DBF, pero en mis archivos si los transfirió?
Cuando dices archivos marcados supongo que te estás refiriendo a Registros no es así?

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:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #9  
Antiguo 07-01-2005
DobleSiete DobleSiete is offline
Miembro
 
Registrado: ene 2005
Posts: 32
Poder: 0
DobleSiete Va por buen camino
Ok, exactamente eso es lo que voy a hacer ...

PD: cuando dije "archivo marcados" si me referia a registros :-)
__________________
"Nadie es perfecto" (Don Nadie)
Responder Con Cita
  #10  
Antiguo 25-01-2005
DobleSiete DobleSiete is offline
Miembro
 
Registrado: ene 2005
Posts: 32
Poder: 0
DobleSiete Va por buen camino
"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)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está 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 14:22:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi