Array
(
)

saber o layout de um dbf !!!

Jadielson
   - 02 set 2004

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

:shock:


Thomaz_prg
   - 03 set 2004

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:

#Código


label1.caption := table1.fields[0].name;


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


Aroldo Zanela
   - 03 set 2004

Colega,

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

#Código

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;