Einzelnen Beitrag anzeigen

Benutzerbild von Nalincah
Nalincah

Registriert seit: 18. Jul 2003
898 Beiträge
 
Delphi 6 Professional
 
#3

Re: TInteger-/TStringField zur Laufzeit erzeugen

  Alt 12. Dez 2003, 11:47
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;
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat