Importar arquivo dbf
tenho um arquivo chamado produto.dbf gerado no foxpro, preciso passar os dados para paradox e gerar um relatorio, como devo proceder.
Obrigado
Wesley
Wfsf@brfree.com.br
Obrigado
Wesley
Wfsf@brfree.com.br
Wesleyfsf
Curtidas 0
Respostas
Brazoli
23/05/2003
A maneira mais simples é criar uma tabela com a mesma strututura no piradox (é isto mesmo, piradox) e depois crie um programinha ponte que leia o dbf e grave no piradox.
Lembrando que vc vai precisar criar dois bdes....
Lembrando que vc vai precisar criar dois bdes....
GOSTEI 0
Marconi
23/05/2003
Não, voce não precisa de dois bdes. Os aquivos estão podem estar até no mesmo banco de dados.
Eu tenho um procedimento que copia arquivos dbf para paradox
procedure TForm1.Atualizar;
var
a,b,d:integer;
mes,arq: string;
begin
if nd.active then nd.Close; //arquivo dbase
if np.active then np.Close; // arquivo paradox
mes:=Omes; // Omes é uma variavel global que guarda o mes que está em operação.
arq:=´NF´+mes;
nd.TableName:=arq+´.dbf´;
Nd.Open;
Cria_Tabela(´NF´,arq); // Aqui cria a tabela paradox com os mesmos campos (vide procedure abaixo)
Np.TableName:=arq+´.db´;
Np.Open;
Nd.First;
While not Nd.eof do begin // agora é só copiar os campos.
Np.Append;
b:= np.FieldCount -1;
for a := 0 to b do
begin
Np.Fields[a]:=Nd.Fields[a];
end;
np.Post;
nd.next;
end;
end;
Procedure TForm1.Cria_Tabela(Alias,Nome_Tabela:String);
{Copia uma tabela DBF criando outra em Paradox}
var
i,j,tam:Integer;
mens:string;
Begin
With TTable.Create(Application) do
begin
Active := False;
DatabaseName :=Alias;
TableName := Nome_Tabela;;
TableType := ttParadox;
i:=nd.FieldCount;
for j:= 0 to i-1 do
begin
tam:=nd.Fields[j].DataSize-1;
if nd.Fields[j].DataType = ftString then mens:=´Character or string field´;
if nd.Fields[j].DataType = ftSmallint then
begin
mens:=´16-bit integer field´;
tam:=0;
end;
if nd.Fields[j].DataType = ftInteger then
begin
mens:=´32-bit integer field´;
tam:=0;
end;
if nd.Fields[j].DataType = ftWord then
begin
mens:=´16-bit unsigned integer field´;
tam:=0;
end;
if nd.Fields[j].DataType = ftBoolean then mens:=´Boolean field´;
if nd.Fields[j].DataType = ftFloat then
begin
mens:=´Floating-point numeric field´;
tam:=0;
end;
if nd.Fields[j].DataType = ftDate then
begin
mens:=´Date field´;
tam:=0;
end;
if nd.Fields[j].DataType = ftMemo then mens:=´Text memo field´;
FieldDefs.Add(nd.Fields[j].FieldName, nd.Fields[j].DataType, tam, False);
end;
CreateTable;
Free;
end;
end;
Olha eu copiei isto de um programa meu que já funciona. Limpei algumas linhas desnecessárias, mas acho que sobrou alguma coisa que voce não vai utilizar, tais como mensagens e variaveis que controlavam outras coisas. Mas acho que dá para aproveitar o código.
No seu form crie os dois objetos Table nd e np. Associe-os a dois Datasources e ao banco de dados onde ele vai encontrar a tabela que deseja converter.
Bom divertimento !!!!
Marconi
Eu tenho um procedimento que copia arquivos dbf para paradox
procedure TForm1.Atualizar;
var
a,b,d:integer;
mes,arq: string;
begin
if nd.active then nd.Close; //arquivo dbase
if np.active then np.Close; // arquivo paradox
mes:=Omes; // Omes é uma variavel global que guarda o mes que está em operação.
arq:=´NF´+mes;
nd.TableName:=arq+´.dbf´;
Nd.Open;
Cria_Tabela(´NF´,arq); // Aqui cria a tabela paradox com os mesmos campos (vide procedure abaixo)
Np.TableName:=arq+´.db´;
Np.Open;
Nd.First;
While not Nd.eof do begin // agora é só copiar os campos.
Np.Append;
b:= np.FieldCount -1;
for a := 0 to b do
begin
Np.Fields[a]:=Nd.Fields[a];
end;
np.Post;
nd.next;
end;
end;
Procedure TForm1.Cria_Tabela(Alias,Nome_Tabela:String);
{Copia uma tabela DBF criando outra em Paradox}
var
i,j,tam:Integer;
mens:string;
Begin
With TTable.Create(Application) do
begin
Active := False;
DatabaseName :=Alias;
TableName := Nome_Tabela;;
TableType := ttParadox;
i:=nd.FieldCount;
for j:= 0 to i-1 do
begin
tam:=nd.Fields[j].DataSize-1;
if nd.Fields[j].DataType = ftString then mens:=´Character or string field´;
if nd.Fields[j].DataType = ftSmallint then
begin
mens:=´16-bit integer field´;
tam:=0;
end;
if nd.Fields[j].DataType = ftInteger then
begin
mens:=´32-bit integer field´;
tam:=0;
end;
if nd.Fields[j].DataType = ftWord then
begin
mens:=´16-bit unsigned integer field´;
tam:=0;
end;
if nd.Fields[j].DataType = ftBoolean then mens:=´Boolean field´;
if nd.Fields[j].DataType = ftFloat then
begin
mens:=´Floating-point numeric field´;
tam:=0;
end;
if nd.Fields[j].DataType = ftDate then
begin
mens:=´Date field´;
tam:=0;
end;
if nd.Fields[j].DataType = ftMemo then mens:=´Text memo field´;
FieldDefs.Add(nd.Fields[j].FieldName, nd.Fields[j].DataType, tam, False);
end;
CreateTable;
Free;
end;
end;
Olha eu copiei isto de um programa meu que já funciona. Limpei algumas linhas desnecessárias, mas acho que sobrou alguma coisa que voce não vai utilizar, tais como mensagens e variaveis que controlavam outras coisas. Mas acho que dá para aproveitar o código.
No seu form crie os dois objetos Table nd e np. Associe-os a dois Datasources e ao banco de dados onde ele vai encontrar a tabela que deseja converter.
Bom divertimento !!!!
Marconi
GOSTEI 0
Marconi
23/05/2003
Na verdade trabalhar com as duas tabelas é útil quando se esta migrando de um sistema para outro. Durante algum tempo os dois sistemas (Clipper (ou Foxpro) e Delphi podem funcionar em paralelo.
Neste caso toda a manutenção é dada nas tabelas dbase (que trabalha bem nos dois). À medida que se migra, vai se tirando os acessos de certas tabelas do Clipper e assim eliminando os dbfs.
Marconi
Neste caso toda a manutenção é dada nas tabelas dbase (que trabalha bem nos dois). À medida que se migra, vai se tirando os acessos de certas tabelas do Clipper e assim eliminando os dbfs.
Marconi
GOSTEI 0
Alceste
23/05/2003
tenho um arquivo chamado produto.dbf gerado no foxpro, preciso passar os dados para paradox e gerar um relatorio, como devo proceder.
PO CARA EXPORTA O BANCO P/ PARADOX SIMPLES.
Obrigado
Wesley
Wfsf@brfree.com.br
GOSTEI 0