Fórum criar/gravar/ler arquivo dbf no delphi #371457
22/06/2009
0
Desenvolvo software em delphi
Preciso de um programa medelo em delphi que cria uma estrutura de um arquivo em dbf, grave o arquivo dbf e le o arquivo dbf
exemplo da estrutura no dbf
codigo numeric 5,0
nome char 50
datavenda date
vrvenda numeric 12,2
grato
placido
Placido
Curtir tópico
+ 0Posts
22/06/2009
Uasan
Essa eu sei resolver :oops:
Segue o codigo para criar um tabela DBF com index.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Table1 : TTable;
begin
{ Criar arquivos }
Table1 := TTable.create(Application);
{ Cria arquivo }
with Table1 do
begin
Active := False;
DatabaseName := ´C:\´;
TableName := ´teste´;
TableType := ttdBASE;
with FieldDefs do
begin
Clear;
Add(´Name1´, ftString, 20, False);//ver lista abaixo de tipos de campos.
Add(´Name2´, ftString, 20, False);
Add(´Name3´, ftString, 20, False);
Add(´Name4´, ftString, 20, False);
end;
CreateTable;
AddIndex(´Indice1´, ´Name1 + Name2´, [ixExpression]);
AddIndex(´Indice2´, ´Name2 + Name3´, [ixExpression]);
AddIndex(´Indice3´, ´Name3 + Name4´, [ixExpression]);
end;
end;
end.
Tipos de campos:
ftString = Char
ftInteger= NUmerico
ftboolean = Booleando
ftcurrency = currency
ftFloat = Float
ftDate = DATA
Depois para ler e so criar uma tabela em modo run time:
procedure TForm1.Button2Click(Sender: TObject); var tabela:ttable; begin tabela := tabela.Create(nil); tabela.Database := ´C:\teste.dbf´; tabela.IndexName := ´C:\teste.mdx´; tabela.Open := true; end;
Espero ter dado uma luz.
[]´s
Gostei + 0
22/06/2009
Placido
Mas está dando erro na criação do campo do tipo data
veja o meu programa abaixo
--------------------------
procedure Tfrmexportaarquivofaturamento.SpeedButton1Click(Sender: TObject);
var
Table1 : TTable;
begin
{ Criar arquivos }
Table1 := TTable.create(Application);
{ Cria arquivo }
with Table1 do
begin
Active := False;
DatabaseName := ´C:\sgcadm\dbf\´;
TableName := ´ppndbf.dbf´;
TableType := ttdBASE;
with FieldDefs do
begin
Clear;
Add(´dataemi´, ftDate, 10 , False);
Add(´dataven´, ftDate, 10, False);
Add(´documento´, ftString, 12, False);
Add(´cfop´, ftString, 4, False);
Add(´valor´, ftCurrency, 14, False);
Add(´nomecli´, ftString, 55, False);
Add(´cro´, ftString, 5, False);
Add(´cpf´, ftString, 14, False);
Add(´parcela´, ftString, 5, False);
end;
CreateTable;
AddIndex(´Indice1´, ´DATAEMI´, [ixExpression]);
end;
end;
----------------------
se for possivel passe um exmplo para definição do campo do tipo data e numeric com 2 casas decimais
Obrigado pela ajuda
Plácido
Gostei + 0
22/06/2009
Uasan
Esqueci de avisa os campos DATA e CURRENCY não precisa estipular tamanho do campo.
Tente dessa maneira assim evita o erro do ADD, que necessita adicionar informação completa.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Table1 : TTable;
begin
{ Criar arquivos }
Table1 := TTable.create(Application);
{ Cria arquivo }
with Table1 do
begin
Active := False;
DatabaseName := ´C:\sgcadm\dbf\´;
TableName := ´ppndbf.dbf´;
TableType := ttdBASE;
with FieldDefs do
begin
Clear;
with AddFieldDef do
begin
Name := ´dataven´;
DataType := ftdate;
Required := True;
end;
with AddFieldDef do
begin
Name := ´documento´;
DataType := ftString;
Required := false;
Size := 12;
end;
with AddFieldDef do
begin
Name := ´cfop´;
DataType := ftString;
Required := false;
size := 4;
end;
with AddFieldDef do
begin
Name := ´valor´;
DataType := ftCurrency;
Required := false;
end;
with AddFieldDef do
begin
Name := ´nomecli´;
DataType := ftString;
Required := false;
size := 50;
end;
with AddFieldDef do
begin
Name := ´cro´;
DataType := ftString;
Required := false;
size := 5;
end;
with AddFieldDef do
begin
Name := ´cpf´;
DataType := ftString;
Required := false;
size := 14;
end;
with AddFieldDef do
begin
Name := ´parcela´;
DataType := ftString;
Required := false;
size := 5;
end;
end;
CreateTable;
AddIndex(´Indice1´, ´DATAEMI´, [ixExpression]);
end;
end;
end.
[]´s
Gostei + 0
23/06/2009
Placido
Mru amigo obriagod pela ajuda para criar o arquivo dbf e o indice deu tudo certo
Agora me ajede a resolver outra coisa
estou lendo um clientdadaset e preciso gravar estas informações do
clientdadaset para esta tabela dbf
veja o meu exemplo
-------------------------------------------------------------
procedure Tfrmexportaarquivofaturamento.btnGravaDbfClick(Sender: TObject);
var
Table1 : TTable;
begin
Table1 := TTable.create(Application);
with Table1 do
begin
Active := False;
DatabaseName := ´C:\sgcadm\dbf\´;
TableName := ´ppndbf.dbf´;
TableType := ttdBASE;
end;
QueryFaturamento.Close;
cdsFaturamento.Close;
QueryFaturamento.ParamByName(´EMPRESA´).Value := FrmPrincipalSGCAdm.CodEmpresa;
QueryFaturamento.ParamByName(´DATAINICIAL´).AsDate := dbDatainicial.Date ;
QueryFaturamento.ParamByName(´DATAFINAL´).AsDate := dbDatafinal.date;
QueryFaturamento.Open;
cdsFaturamento.Open;
while (cdsFaturamento.Eof = false) do
begin
// fazer um exemplo para gravar o campo (dataemi)
// fazer um exemplo para gravar o campo (valor)
// fazer um exemplo para gravar o campo (documento)
cdsPadrao.Next;
end; // while
end;
-----------------------------------------------------------
Ou seja me ajudar a fazer um procedimneto para incluir os dados na tabela dbf
Grato
Plácido
Gostei + 0
25/06/2009
Placido
Consegui criar o arquivo dbf
Agora para gravar o arquivo dbf esta dando erro
Veja no exemplo
Estou utilizando o componente BDE (ttable)
Estou lendo uma query e quero gravar os dados na tabela dbf
Preciso de uma ajuda para resolver o problema.
Exemplo do programa
-----------------------------------------------------------------------
procedure Tfrmexportaarquivofaturamento.btnGravaDbfClick(Sender: TObject);
begin
// Table1 := TTable.create(Application);
with tabelappn do
begin
Active := False;
end;
QueryFaturamento.Close;
cdsFaturamento.Close;
QueryFaturamento.ParamByName(´EMPRESA´).Value := FrmPrincipalSGCAdm.CodEmpresa;
QueryFaturamento.ParamByName(´DATAINICIAL´).AsDate := dbDatainicial.Date ;
QueryFaturamento.ParamByName(´DATAFINAL´).AsDate := dbDatafinal.date;
QueryFaturamento.Open;
cdsFaturamento.Open;
while (cdsFaturamento.Eof = false) do
begin
tabelappn.Insert; ??? que comando coloco aqui para inserir um registro na tabela
tabelappndataemi.Value := cdsFaturamentoPED_DATAVENDA.AsDateTime;
tabelappndataven.Value := cdsFaturamentoPED_DATAVENDA.AsDateTime;
tabelappn.??; que comando coloco aqui para gravar o registro
cdsFaturamento.Next;
end; // while
end;
---------------------------------------------------------------------
Grato
Plácido
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)