Importar txt para firebird
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
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
Curtidas 0
Respostas
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
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.
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
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
Grato
GOSTEI 0
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+
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
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
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
01/05/2008
No IBEXPERT tem alguma solução para esta importação?
GOSTEI 0