saber o layout de um dbf !!!

02/09/2004

0

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

:shock:


Jadielson

Jadielson

Responder

Posts

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].name;


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


Responder

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 ] 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^[i] 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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar