Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Importar informacion desde un csv (https://www.clubdelphi.com/foros/showthread.php?t=52053)

hecospina 08-01-2008 23:07:19

Importar informacion desde un csv
 
Hola Amigos del foro
He estado leyendo el Hilo de "leer txt con firebird " pero no es muy claro lo que requiere nuestro amigo
Tengo un problema similar, necesito importar la informacion de un archivo de texto separado por comas csv.
Lo he intentado creando una tabla con external file, pero al parecer cuando se crea el archivo txt, firebird crea un unico registro con todos los datos siendo el tamaño del campo el que determina cual es cada una de las columnas de la tabla.
Qué mas puedo hacer para importar dicha informacion directamente desde una consulta SQL
Gracias por la ayuda

juanelo 08-01-2008 23:37:26

Que tal Hecospina,
La duda que tengo es que si esta tarea de importar un archivo csv a firebird es una eventualidad o es que quieres que un aplicacion lo haga y sea alcance mas de la misma, para posteriores importaciones?.

Si el caso es el primero (es por esta ocacion que necesitas trasladar un csv) lo que yo haría es cargar el archivo csv en excel y posteriormente grabarlo como .dbf, de ahi utilizo el datapump para hacer la traslacion hacia firebird.

Para el caso 2, pues no quedaria mas que hacer una rutina que lea el archivo de texto y pasarlo a fb de manera "manual".
Saludos.

Gabo 09-01-2008 13:17:38

Sobre el primer caso que menciona juanelo (y si no he entendido mal el tema :D) se pueden hacer importaciones de un archivo csv a la base de datos de firebird con algunos programas como el DataBase Workbench.

hecospina 09-01-2008 14:42:24

Gracias por las respuestas, con esto soluciono mi problema

juanelo 09-01-2008 16:19:49

Cita:

Empezado por hecospina (Mensaje 256907)
Gracias por las respuestas, con esto soluciono mi problema

:confused::confused::confused: Con que?

hecospina 09-01-2008 16:31:25

Solo debo pasar la informacion una vez y voy a trabajar con datapum

laukri 01-02-2008 14:48:12

Cita:

Empezado por juanelo (Mensaje 256810)

Para el caso 2, pues no quedaria mas que hacer una rutina que lea el archivo de texto y pasarlo a fb de manera "manual".
Saludos.


hola! como se haria con la 2da opción? yo necesito leer datos desde un archivo (separado por ;) con un comando sql de forma manual


Gracias!

egostar 01-02-2008 17:26:56

Cita:

Empezado por laukri (Mensaje 262631)
hola! como se haria con la 2da opción? yo necesito leer datos desde un archivo (separado por ;) con un comando sql de forma manual

Gracias!

Cuando he tenido que importar datos desde archivos de texto siempre uso una rutina que me encontré si mal no recuerdo en Trucomania y se llama GetToken()

Así es como yo importo los datos a una BD cualquiera, lo único que cambiaría es el objeto Query que uses, IBQuery, ADOQuery, Query1.

Código Delphi [-]
procedure TFImporta.BitBtn1Click(Sender: TObject);

  function GetToken(Cadena,Separador:string;Token:integer):string;
  var
    Posicion:integer;
  begin
     while Token > 1 do begin
       Delete(Cadena,1,Pos(Separador,Cadena));
       Dec(Token);
     end;
     Posicion:=Pos(Separador,Cadena);
     if Posicion=0 then result:=cadena
     else Result:=Copy(Cadena,1,Posicion-Length(Separador));
  end;

  procedure CargaDatos(L:string);
  begin
    Codigo := GetToken(L,';',1);
    Extension := GetToken(L,';',2);
    Responsable := GetToken(L,';',3);
  end;

  procedure GrabaDatos;
  begin
     with Query1 do begin // IBQuery1, ADOQuery1, Query1 ......
         sql.clear;
         sql.add('INSERT INTO CODIGOS (Codigo, Extension, Responsable)');
         sql.add('VALUES ('+QuotedStr(Codigo)+','+
                            QuotedStr(Extension)+','+
                            QuotedStr(Responsable)+')');
         ExecSQL;
     end;
  end;

begin
   AssignFile(Arch,'archivo.csv');
   Reset(Arch);
   while not Eof(Arch) do begin
       Readln(Arch,Linea);
       CargaDatos(Linea);
       GrabaDatos;
   end;
   CloseFile(Arch);
   ShowMessage('Proceso terminado');
end;

Salud OS

laukri 03-02-2008 14:11:45

gracias por tu ayuda...
pero lo que yo necesito es leer un archivo desde firebird sin usar delphi...
gracias igual!


La franja horaria es GMT +2. Ahora son las 18:25:18.

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