PDA

Ver la Versión Completa : Importar informacion desde un csv


hecospina
08-01-2008, 23:07:19
Hola Amigos del foro
He estado leyendo el Hilo de "leer txt con firebird (http://www.clubdelphi.com/foros/showthread.php?t=51893) " 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
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
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
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.


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!