AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TInteger-/TStringField zur Laufzeit erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

TInteger-/TStringField zur Laufzeit erzeugen

Ein Thema von Nalincah · begonnen am 12. Dez 2003 · letzter Beitrag vom 15. Dez 2003
Antwort Antwort
Benutzerbild von Nalincah
Nalincah

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

TInteger-/TStringField zur Laufzeit erzeugen

  Alt 12. Dez 2003, 08:59
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
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Benutzerbild von BluesKid
BluesKid

Registriert seit: 2. Sep 2003
Ort: NRW
133 Beiträge
 
Delphi 2005 Professional
 
#2

Re: TInteger-/TStringField zur Laufzeit erzeugen

  Alt 12. Dez 2003, 10:36
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.... ...

Bitte korrigiert mich wenn ich mich irre ...

Was dir aber helfen könnte um Felder zur Laufzeit zu erstellen is die Eigenschaft fielddefs...

schöne Grüße

Sam
  Mit Zitat antworten Zitat
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, 10: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
woki

Registriert seit: 29. Mär 2003
563 Beiträge
 
Delphi 2006 Architect
 
#4

Re: TInteger-/TStringField zur Laufzeit erzeugen

  Alt 12. Dez 2003, 16:05
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
  Mit Zitat antworten Zitat
Benutzerbild von Nalincah
Nalincah

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

Re: TInteger-/TStringField zur Laufzeit erzeugen

  Alt 15. Dez 2003, 13:38
Zitat von woki:
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
Jo, Danke. Hat mir weiter geholfen.

Leider hab ich noch ein Problem mit den Maske:

Delphi-Quellcode:
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;
Leider wird nichts formatiert

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".
Sebastian
Ehemals bekannt als General2004
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz