Als Besonderheit des dBase-Format müssen bei Numeric-Feldern die Weite und Dezimalstellen angegeben werden. Mit Delphi bekommt man diese Definition nicht so einfach zurück. Folgende einfache Komponente ist ein Nachfolger von DataSet. Die Felder Units1 (Weite) und Units2 (Dezimalstellen) enthalten die entsprechenden Informationen.
uses BDE;
type
TFelderListe = class(TDBDataSet)
private
FTableName: string;
protected
function CreateHandle: HDBICur; override;
function GetRecordCount: LongInt; override;
public
property TableName: string read FTableName write FTableName;
end;
{ TFelderListe }
function TFelderListe.CreateHandle: HDBICur;
var
STableName : array[0..255] of Char;
begin
AnsiToNative(DBLocale, FTableName, STableName, SizeOf(STableName));
Check(DbiOpenFieldList(DBHandle, STableName, nil, false, result));
end;
function TFelderListe.GetRecordCount: LongInt;
begin
check(dbiGetRecordCount(handle, result));
end;
Beispiel:
procedure TForm1.FormCreate(Sender: TObject);
var
fl : TFelderListe;
begin
fl := TFelderListe.Create(self);
fl.TableName := 'xxx.dbf';
fl.Active := true;
DataSource1.DataSet := FL;
end;
|