Importar txt para firebird

Firebird

01/05/2008

Salve a todos,
Tenho um sistema em firebird e estou instalando em um cliente que ja tinha um em paradox, bom até blz.
exportei o paradox para txt, agora estou tentando importar para firebird mais não estou tendo sucesso,
Alguem tendo um script que importe ou alguma ideia pra me socorrer
no aguardo
Abraço a todos


F4rr3ll

F4rr3ll

Curtidas 0

Respostas

Edilcimar

Edilcimar

01/05/2008

seria melhor importar diretamente do piradox para o firebird, mas se quer direto do txt, terá que criar variáveis, ler o txt, jogar os valores nestas variáveis e depois jogar para dentro do firebird


GOSTEI 0
Badboysjc

Badboysjc

01/05/2008

Bom Dia !!

Verifique se tem como exportar os dados em formato CSV, se tiver, me avise que uso um programa simples que se chama CSTTOIB, ele aceita tanto FIREBIRD quanto INTERBASE, á única coisa é que para migrar os campos da tabela origem e destino tem que ser igual.

Abraços.


GOSTEI 0
F4rr3ll

F4rr3ll

01/05/2008

Edilcimar, vc tem algum exemplo de como importar do paradox direto pro firebird, pq é a primeira vez que estou fazendo este tipo de importação e não estou tendo sucesso
Grato


GOSTEI 0
Pattarelli

Pattarelli

01/05/2008

Ola,

Se ajudar eu uso o DATAPUMP do delphi para importar as tabelas parodox para meus bancos em firebird.

Espero ter ajudado.

T+


GOSTEI 0
Pauloroger

Pauloroger

01/05/2008

Crie um tabela no firebird chamada MAPEAMENTO, com os campos:

CAMPO: VARCHAR(20)
POSI: INTEGER
TAMANHO: INTEGER
TIPO: VARCHAR(1)

Coloque alguns dados conforme seu mapeamento, o meu esta assim:

DATA_CADASTRO, 1, 8, D
CENTRODECUSTO, 9, 4, A
NUMREQ, 14, 6, A
REQUISICAO, 24, 34, A
VALOR, 46, 20, M

Onde D é Data, A é alfanumerico e M é Moeda, ok



unit DataSetTxt;

interface

uses
Classes, DB, SysUtils;


procedure TxtToDataSet( Arquivo, Log : TStrings; Destino, Map: TDataSet);
procedure TextToField(Text : string; Field: TField; Tipo : char);
procedure DataSetToTxt (Arquivo : TStrings; DataSet, Map: TDataSet);


function FieldToText(Field: TField; Tam : Integer; Tipo : Char) : String;


implementation

procedure TxtToDataSet(Arquivo, Log: TStrings; Destino, Map: TDataSet);
var
i : integer;
Campo : string;

begin
(* varre o arquivo texto *)
for i := 0 to Arquivo.Count - 1 do
begin
Destino.Append;
(* para todos os campos a serem mapeados *)

try
Map.First;
while not Map.Eof do
begin
(* extrai campo conforme especificações de mapeamento *)
Campo := copy(Arquivo[i],
Map.FieldByName(´POSI´).AsInteger,
Map.FieldByName(´TAM´).AsInteger);

(* mapeia campo texto para TField *)
TextToField(Campo, Destino.FieldByName
(Map.FieldByName(´CAMPO´).AsString),
Map.FieldByName(´TIPO´).AsString[1]);
Map.Next;
end;

Destino.Post

except
on E : Exception do //trata exceção e não propaga
begin
if Log <> nil then
Log.Add(format(´Erro na linha ¬d : ¬s´,[i, E.Message]));
Destino.Cancel;
end;
end;
end;
end;

procedure textToField (text : string; Field : TField; Tipo : char);
var
dia, mes, ano : Word;
begin
case tipo of
´M´ : Field.AsCurrency := StrToCurr(text)/100;

´D´ :
begin
dia := StrToInt(copy(Text,1,2));
mes := strToInt(copy(Text,3,2));
ano := 1900 + StrToInt(copy(Text, 5, 2));
Field.AsDateTime := EncodeDate(ano,mes,dia);
end;

´A´, ´N´ : Field.AsString := Text;
end;
end;


procedure DataSetToTxt(Arquivo : TStrings; DataSet, Map : TDataSet);
var
linha : string;

begin
(*Varre o DataSet a ser exportado *)
DataSet.First;
while not DataSet.Eof do
begin
Map.first;
while not Map.Eof do
begin
linha := linha + FieldToText(DataSet.FieldByName(
Map.FieldByName(´CAMPO´).AsString),
Map.FieldByName(´TAM´).AsInteger,
Map.FieldByName(´TIPO´).AsString[1]);
Map.Next;
end;
Arquivo.Add(linha);
linha := ´´;
DataSet.Next;
end;
end;

function FieldToText(Field: TField; Tam: integer; Tipo: char): string;
var
fmt : string;

begin

Case Tipo of

´A´ :
begin
(* Formata string com espaços a direita *)
fmt := Format(´-¬d.¬ds´, [Tam,Tam]);
result := Format(´¬´ + fmt,[Field.AsString]);
end;

´N´ :
begin
(* Formata inteiro com zeros a esquerda *)
fmt := Format(´¬d.¬dd´, [Tam,Tam]);
result := Format(´¬´ + fmt,[Field.AsInteger]);
end;

´M´ :
begin
(* Formata moeda com zeros a esquerda *)
fmt := Format(´¬d.¬dd´, [Tam,Tam]);
result := Format(´¬´ + fmt,[round(Field.AsCurrency*100)]);
end;

(* Formata data como ddmmyyyy *)
´D´ : result := FormatDateTime(´ddmmyyyy´, Field.AsDateTime);
end;

end;


Crie um botão Importar, ao clicar nele:
var
txt : TStrings;

begin

//Rottina para Importação


if OpenDialog1.Execute then
begin
txt := TStringList.Create;
try
txt.LoadFromFile(OpenDialog1.FileName);
if txt.Count = 0 then
raise Exception.Create(´Arquivo vazio !!!´);
TxtToDataSet( txt, nil, DM.CDS_DadosExportacao, DM.CDS_Cadastro);
finally
txt.Free;
end;
end;

end;


Botão exportar
var
txt : TStrings;

begin


if SaveDialog1.Execute then
begin
txt := TStringList.Create;

try

DatasetToTxt(txt, DM.CDS_DadosExportacao, DM.SDS_Mapeamento);
txt.SaveToFile(SaveDialog1.FileName);
StatusBar1.SimpleText :=
Format(´Arquivos ¬s - Registros exportados : ¬d´, [SaveDialog1.FileName, txt.Count]);
finally
txt.Free;
end;
end;


Beleza, qualquer coisa estamos ai. Abraços


GOSTEI 0
Sluisrj

Sluisrj

01/05/2008

No IBEXPERT tem alguma solução para esta importação?


GOSTEI 0
POSTAR