02/09/2004

saber o layout de um dbf !!!

Como faço no delphi para saber o layout de um arquivo dbf?

:shock:


Jadielson

Respostas

03/09/2004

Thomaz_prg

Ative uma table, com este DBF, e, utilize um laço para pegar os dados que você quer.
Por exemplo, passar o nome do primeiro campo para um label:

label1.caption := table1.fields[0&93;.name;


você pode utilizar as outras propriedades do campo, tais como type (tipo), por exemplo...


Responder Citar

03/09/2004

Aroldo Zanela

Colega,

Abaixo em fragmento de uma ferramenta que desenvolvi para upsize de DBF para Firebird. Espero que seja o que procura:

type
TDescricao = Array[ 0..MaxInt Div SizeOf( FLDDesc ) - 1 &93; of FLDDesc;
var
I, Total: Integer;
Cursor: CURProps;
  Descricao: ^TDescricao;
  Tipo, Direito: String;
  nTam: word;
  Ligacao: String;
Begin
If not tbOrigem.Active Then tbOrigem.Open;

  Check( dbiGetCursorProps( tbOrigem.Handle, Cursor ) );

  Descricao := AllocMem( Cursor.iFields*SizeOf( FLDDesc ) );

  Try
  Check( dbiGetFieldDescs( tbOrigem.Handle,@Descricao^ ) );

    Total := 0;

    For i := 0 to Cursor.iFields-1 do
    With Descricao^&91;i&93; do
    Begin
Case iFldType Of
      0: Tipo :=  ´UNKNOWN´;
        1: Tipo :=  ´VARCHAR(´+IntToStr(iUnits1)+ ´)´;
        2: Tipo :=  ´DATE´;
        3: Tipo :=  ´BLOB´;
        4: Tipo :=  ´CHAR(1) /* Logical */´;
        5: Tipo :=  ´SMALLINT´;
        6 : Tipo :=  ´INTEGER´;
        7: begin
        if iUnits1 > 18 then iUnits1 := 18;
              if iUnits2 > 0 then
        Tipo :=  ´NUMERIC(´+IntToStr(iUnits1)+ ´,´ +IntToStr(iUnits2)+´)´
              else
              Tipo :=  ´NUMERIC(´+IntToStr(iUnits1)+´)´;
            end;
        8: Tipo :=  ´BCD´;
        9: Tipo :=  ´BYTES´;
        10 : Tipo := ´TIME´;
        11 : Tipo := ´TIMESTAMP´;
        12 : Tipo := ´SMALLINT´;
        13 : Tipo := ´INTEGER´;
        14 : Tipo := ´DOUBLE PRECISION´;
        15 : Tipo := ´BYTES´;
      End;

      if i = 0 then
      begin
      Tipo   := Tipo + ´ NOT NULL´;
      Result := StrPas(szName);
      end;

      IF I = cURSOR.iFields-1 then
      Ligacao := ´);´
      else
      Ligacao := ´,´;

      Texto.Lines.Add( ´  ´+PadR(StrPas( szName ),10, ´ ´) + ´ ´ + Tipo + Ligacao );

  End;

  finally
  FreeMem( Descricao, Cursor.iFields*SizeOf( FLDDesc ) );
  End;



Responder Citar