Ich habs mal so versucht:
Delphi-Quellcode:
procedure FormatFelder(Tabelle:TADOTable;GridFelder:TADOTable);
var i : Integer;
IntFeld : TIntegerField;
StrFeld : TStringField;
WStrFeld : TWideStringField;
SmaIntFeld : TSmallintField;
LarIntFeld : TLargeintField;
WrdField : TWordField;
AIncField : TAutoIncField;
FloField : TFloatField;
CurField : TCurrencyField;
BooField : TBooleanField;
DTField : TDateTimeField;
DatField : TDateField;
TimField : TTimeField;
BytField : TBytesField;
BCDField : TBCDField;
BlobField : TBlobField;
MemoField : TMemoField;
VarField : TVariantField;
VarBytField: TVarBytesField;
begin
end;
GridFelder.First;
// Alle Felder der Tabelle werden durchlaufen, und je nach Feldtyp wird für jedes
// Feld ein Objekt erstellt, in dem Feldspezifische Eigenschaften geändert werden.
for i := 0 to Tabelle.FieldCount - 1 do
begin
// Abfrage des Datentyps
case Tabelle.Fields[i].DataType of
// Feldtyp = DataType - ft (z.B. String, Integer)
ftString:
begin
StrFeld := TStringField.Create(Tabelle);
StrFeld.Name := Tabelle.Name+'_'+Tabelle.Fields[i].Name;
StrFeld.field
end;
ftInteger:
begin
IntFeld := TIntegerField.Create(Tabelle);
IntFeld.Name := Tabelle.Name+'_'+Tabelle.Fields[i].Name;
end;
ftWideString :
begin
WStrFeld := TWideStringField.Create(Tabelle);
WStrFeld.Name := Tabelle.Name+'_'+Tabelle.Fields[i].Name;
end;
ftSmallint:
begin
SmaIntFeld := TSmallintField.Create(Tabelle);
SmaIntFeld.Name := Tabelle.Name+'_'+Tabelle.Fields[i].Name;
end;
// Hier hab ich jetzt welche rausgelassen, damit es nicht so lang wird
end;
end;
while not GridFelder.Eof do
begin
FeldName := GridFelder.FieldByName('FELD').AsString;
case Tabelle.FieldByName(FeldName).DataType of
ftInteger:
begin
// Sichtbarkeit (Visible) ändern
if GridFelder.FieldByName('Visible').AsInteger = 1 then
TIntegerField(Tabelle.Name+'_'+FeldName).Visible := True
else
TIntegerField(Tabelle.Name+'_'+FeldName).Visible := False;
// Schreibgeschützt (ReadOnly) ändern
if GridFelder.FieldByName('NURLESEN').AsInteger = 1 then
TIntegerField(Tabelle.Name+'_'+FeldName).ReadOnly := True
else
TIntegerField(Tabelle.Name+'_'+FeldName).ReadOnly := False;
end;
end;
GridFelder.Next;
end;
end;