GARANTIR DESCONTO

Fórum criar/gravar/ler arquivo dbf no delphi #371457

22/06/2009

0

Bom dia

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

Placido

Responder

Posts

22/06/2009

Uasan

Bom Dia,

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


Responder

Gostei + 0

22/06/2009

Placido

Muito obrigado pela ajuda

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


Responder

Gostei + 0

22/06/2009

Uasan

Bom Dia,

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


Responder

Gostei + 0

23/06/2009

Placido

Boa tarde..

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


Responder

Gostei + 0

25/06/2009

Placido

Boa tarde..

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar