Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Exportar una tabla de Fox pro a SQL Server desde Delphi (https://www.clubdelphi.com/foros/showthread.php?t=77302)

ZiriusB 12-01-2012 21:31:17

Exportar una tabla de Fox pro a SQL Server desde Delphi
 
Buenas amigos, les cuento desde el principio para que entiendan, en la empresa existe un sistema para llevar el control de horas, trabajadores, proyectos, embarcaciones etc etc...el sistema esta basado en Foxpro, el informatico anterior decidio hacer la aplicacion en Delphi pero dejo algunos(MUCHOS) cabos sueltos e importantes, uno de ellos es el siguiente.

Desde Microsoft projetc el Jefe de Reparacion hacia su cronograma y luego por una macro que habia sido creada para el sistema viejo este EXPORTABA la tabla a .dbf, luego iba al sistema e IMPORTABA esa tabla que habia sido creada...

Ahora con el nuevo sistema no encuentro la forma de IMPORTAR esa tabla .dbf que se crea para añadirla a la tabla SQL a la que debe ir...

estuve buscando mucho por la web y no encontre mayor ayuda...

Ahora solo tengo un TTABLE

ZiriusB 12-01-2012 21:35:03

Exportar una tabla de Fox pro a SQL Server desde Delphi
 
Buenas amigos, les cuento desde el principio para que entiendan, en la empresa existe un sistema para llevar el control de horas, trabajadores, proyectos, embarcaciones etc etc...el sistema esta basado en Foxpro, el informatico anterior decidio hacer la aplicacion en Delphi pero dejo algunos(MUCHOS) cabos sueltos e importantes, uno de ellos es el siguiente.

Desde Microsoft projetc el Jefe de Reparacion hacia su cronograma y luego por una macro en project este EXPORTABA la tabla a .dbf, luego iba al sistema e IMPORTABA esa tabla que habia sido creada...

Ahora con el nuevo sistema no encuentro la forma de IMPORTAR esa tabla .dbf que se crea para añadirla a la tabla SQL a la que debe ir...

estuve buscando mucho por la web y no encontre mayor ayuda...

----

Ahora solo tengo un TTABLE (Propiedad Databasename = al directorio donde van las dbf creadas), un Datasource conectado a TTABLE y su respectivo DBGRID que me muestra la tabla .DBF que selecciono(busco la tabla con un opendialog)...

Código Delphi [-]
If OpenDialog1.Execute Then
    Begin
     Table1.Close;
     Table1.DatabaseName := ExtractFilePath (OpenDialog1.Filename);
     Table1.TableName := ExtractFileName (OpenDialog1.Filename);
     Table1.Active := True;

    End;

Lo que quiero es luego de tener cargada la tabla de Foxpro cargada en el DBGRID pasar esos datos a SQL SERVER, o si existe una forma mas sencilla de hacerlo... agradezco enteramente su ayuda!

Gracias

ecfisa 12-01-2012 21:41:09

Hola ZiriusB.

Por favor trata de no duplicar los mensajes, combiné ambos en este.

Saludos y gracias por tu colaboración.

pcicom 13-01-2012 01:57:16

Si ya tienes la conexion al recordset que muestras en el GRID, entonces puedes recorrer uno a uno los registros en el GRID e insertarlos directamente a tu servidor SQL, con instrucciones SQL..

ZiriusB 13-01-2012 03:15:57

Ecfisa, no fue mi intención...borra el primer mensaje por favor!
---

pcicom, podrías darme una guía para hacerlo, para entenderte mejor...Gracias por tu ayuda!

ecfisa 13-01-2012 07:48:31

Hola ZiriusB.

No te preocupes (un descuido lo tiene cualquiera), lo que importa es que quedó en el mismo hilo para facilitar las búsquedas.

Un saludo. :)

ZiriusB 15-01-2012 23:05:11

De verdad necesito ayuda con esto, si tienen alguna sugerencia se los agradeceria...

Casimiro Notevi 15-01-2012 23:14:40

Explica con más detalle, por favor.

ZiriusB 15-01-2012 23:18:41

Buenas amigos, les cuento desde el principio para que entiendan, en la empresa existe un sistema para llevar el control de horas, trabajadores, proyectos, embarcaciones etc etc...el sistema esta basado en Foxpro, el informatico anterior decidio hacer la aplicacion en Delphi pero dejo algunos(MUCHOS) cabos sueltos e importantes, uno de ellos es el siguiente.

Desde Microsoft projetc el Jefe de Reparacion hacia su cronograma y luego por una macro en project este EXPORTABA la tabla a .dbf, luego iba al sistema e IMPORTABA esa tabla que habia sido creada...

Ahora con el nuevo sistema no encuentro la forma de IMPORTAR esa tabla .dbf que se crea para añadirla a la tabla SQL a la que debe ir...

estuve buscando mucho por la web y no encontre mayor ayuda...

----

Ahora solo tengo un TTABLE (Propiedad Databasename = al directorio donde van las dbf creadas), un Datasource conectado a TTABLE y su respectivo DBGRID que me muestra la tabla .DBF que selecciono(busco la tabla con un opendialog)...


Código Delphi [-]
If OpenDialog1.Execute Then
    Begin
     Table1.Close;
     Table1.DatabaseName := ExtractFilePath (OpenDialog1.Filename);
     Table1.TableName := ExtractFileName (OpenDialog1.Filename);
     Table1.Active := True;

    End;

Lo que quiero es luego de tener cargada la tabla de Foxpro cargada en el DBGRID pasar esos datos a SQL SERVER, o si existe una forma mas sencilla de hacerlo... agradezco enteramente su ayuda!

Gracias

-----

En resumen lo que quiero es pasar una tabla de foxpro (.dbf) a una tabla ya creada en SQL SERVER!

Cual duda tienes?, gracias por responder

Casimiro Notevi 15-01-2012 23:26:06

Si puedes leer la tabla dbf, entonces ahora sólo tendrás que ir recorriendo todos los registros y guardarlos en la otra base de datos.
¿Cuál es el problema?

ZiriusB 15-01-2012 23:28:50

Fue lo que me dijeron mas arriba, pero necesito un ejemplo no soy muy experto y queria un empujon, gracias por responder! :D

Casimiro Notevi 15-01-2012 23:34:29

Pues depende de qué componentes estás usando, pero básicamente:

Código Delphi [-]
tablanueva.open;
tabladbf.open;
while not tabladbf.eof do
begin
  tablanueva.append;
  tablanueva.campoxxx := tabladbf.campoxxx;
  tablanueva.campoyyy := tabladbf.campoyyy;
  tablanueva.campozzz := tabladbf.campozzz;
  tablanueva.post;
  //
  tabladbf.next;
end;
tablanueva.transaction.commit;

ZiriusB 15-01-2012 23:40:00

Uso un TTABLE para cargar la tabla de foxpro en el grid...

para grabar a SQL usare ADO!

mañana hago las pruebas, desde ya muchas gracias por la respuesta!

Casimiro Notevi 15-01-2012 23:43:52

Aquí estaremos por si tienes cualquier duda :)

Caral 16-01-2012 00:22:37

Hola
Yo convertiria primero de DBF a Access y luego a Sql Server, por que?:
1 Access y sql server son del mismo mocosoft asi que se entienden.
2 Para convertir de access a sql server el mismo access lo hace solo.
3 Aqui hay un programa que lo hace y no se tiene que tener ningun conocimiento previo.
Saludos

ZiriusB 16-01-2012 00:54:57

He probado ese programa Caral, el problema es que el usuario desde el mismo sistema debe con un boton (IMPORTAR POSICIONES) importar directamente, osea el usuario en un click debe guarda esos datos de la tabla de foxpro que se creo (.dbf) en una tabla de sql.... para el usuario todo este proceso es invisible, el solo da clic y listo ya tiene las posiciones en la base de datos SQL. Y dicho sea de paso este proceso se hace varias veces al mes y se hace y hara SIEMPRE!

Es por eso que no puedo hacerlo con el programa que tu me recomiendas, de todas formas gracias por responder! si tienes alguna otra sugerencia sera bienvenida!

Caral 16-01-2012 01:15:21

Hola
La idea mas sencilla es la que te indica Casimiro.
Lo que necesitas es simplemente que los campos de las dos tablas y bases de datos coincidan.
La verdad no entiendo la razon para que se necesiten dos bases de datos, seria mejor eliminar una, ademas de eliminar del todo el programa de foxpro que debe ser la razon de todo esto.
Saludos

ZiriusB 16-01-2012 18:07:55

Código Delphi [-]
procedure TForm20.ImportarClick(Sender: TObject);
begin
adoqdbf.open;
table1.open;
while not table1.eof do
begin
adoqdbf.append;
adoqdbf.FieldByName('Codproy').AsInteger := Table1.FieldByName('Proy').AsInteger;
adoqdbf.FieldByName('Codposic').AsInteger := Table1.FieldByName('Pos').AsInteger;
adoqdbf.FieldByName('Espec').AsInteger := Table1.FieldByName('Esp').AsInteger;
adoqdbf.FieldByName('Desc').AsString := Table1.FieldByName('Nombre').AsString;

adoqdbf.FieldByName('Horas').AsInteger := Table1.FieldByName('Trabajo').AsInteger;
adoqdbf.FieldByName('Fecini').AsDateTime := Table1.FieldByName('Comienzo').AsDateTime;
adoqdbf.FieldByName('Fecfinp').AsDateTime := Table1.FieldByName('Fin').AsDateTime;
table1.next;
end;
    ShowMessage('Se han cargado nuevas posiciones al Sistema de Tarjetas');
end;

Bueno, me ha quedado asi y pues ya funciona, muchisimas gracias por su ayuda!


CARAL, respondiendo a lo que dijistes de que porque se usan dos bases de datos es porque la tabla .dbf se crea a partir de una exportacion que hacen desde MICROSOFT PROJECT a traves de una macro de visual basic...

Como es algo urgente, me toca por el momento dejandolo trabajar asi para luego ver como borro por completo el sistema viejo (si te contara el enredo con el que se trabaja jajajaja)


La franja horaria es GMT +2. Ahora son las 09:35:46.

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