![]() |
TInteger-/TStringField zur Laufzeit erzeugen
Wenn man bei ner aktiven ADOTable nen Doppelklick macht, öffnen sich ein kleines Fenster. Per rechtsklick lassen sich dann mit "Alle Felder hinzufügen" alle Felder hinzufügen (Was sonst *g*). Jetzt meine Frage. Wie mach ich sowas zur Laufzeit? User öffnet ne Tabelle, drückt nen Button und alle Felder aus der Tabelle wurden erzeugt. Hoffe ihr versteht mich
|
Re: TInteger-/TStringField zur Laufzeit erzeugen
Moin moin
So...die Wahrscheinlichkeit dass ich mich irre is zwar hoch, aber ich denke das du den Feld-Editor zur Laufzeit nicht Einsetzen kannst, weil dieser imho persistente Feldobjekte erzeugt.... :gruebel: ... Bitte korrigiert mich wenn ich mich irre ... :wink: Was dir aber helfen könnte um Felder zur Laufzeit zu erstellen is die Eigenschaft fielddefs... schöne Grüße Sam |
Re: TInteger-/TStringField zur Laufzeit erzeugen
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; |
Re: TInteger-/TStringField zur Laufzeit erzeugen
Hi,
ein kleiner Hinweis: wenn in der IDE mit dem Feldeditor keine persistenten Felder erzeugt werden, werden die zur Laufzeit dynamisch automatisch beim Offnen des Dataset, (TTAble, TQuery etc) erstellt. Eigentlich muß man da von Hand nichts machen. Grüsse Woki |
Re: TInteger-/TStringField zur Laufzeit erzeugen
Zitat:
Leider hab ich noch ein Problem mit den Maske:
Delphi-Quellcode:
Leider wird nichts formatiert
if (Tabelle.FieldByName(FeldName).DataType = ftInteger) or
(Tabelle.FieldByName(FeldName).DataType = ftSmallint) or (Tabelle.FieldByName(FeldName).DataType = ftLargeInt) or (Tabelle.FieldByName(FeldName).DataType = ftBCD) or (Tabelle.FieldByName(FeldName).DataType = ftWord) or (Tabelle.FieldByName(FeldName).DataType = ftFloat) then begin // Maske auf das Feld legen (Zum formatieren numerischer Felder) if GridFelder.FieldByName('FORMATIERUNG').AsString <> '' then TNumericField(Tabelle.FieldByName(FeldName)).EditFormat := GridFelder.FieldByName('FORMATIERUNG').AsString; end; Der soll bei allen numerischen Feldern gucken ob in der Tabelle "Gridfelder" im Feld "FORMATIERUNG" ne Maske drin steht (0.00#.##) und wenn ja, diese Maske auf das Feld anwenden. Aber leider steht da nur z.b. "304" anstatt "304.00". |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz