![]() |
Datenbank: Allgemein • Version: Allgemein • Zugriff über: Allgemein
InitFieldDefs aufrufen
Hallo!
Ich entwickele ein eigenes TDataset. Ich muß die Felderbeschreibung laden (über InternalInitFieldDefs), und im Field Editor die Felder erzeugen. Mein Problem ist, daß InternalInitFieldDefs wird NUR EINMAL gerufen in einer Edit-session. Falls die Felder werden verändert, ich muß alles schließen, und das Projekt neu öffnen. Wie kann signalisieren dem IDE, daß die Felder neu geladen werden muß? Ich habe schon die folgende versucht: (hilf nichts :( )
Delphi-Quellcode:
Grüße, Zsoca
procedure TMyTestDataSet.SetServerDataSet(SDSet: String);
begin ServerDataSet:= SDSet; FieldDefs.Updated := False; self.FFieldLayout := ''; self.FFieldData.Clear; self.DefChanged(Self); FieldDefList.Clear; FieldDefs.Clear; end; |
Re: InitFieldDefs aufrufen
Hi und erstmal Herzlich Willkommen in der DP :dp:
Wie genau werden denn die Felder geändert? Verwendest Du hier ein Property? Wenn ja, dann kannst Du einfach eine Methode als Setter verwenden, diese wird aufgerufen, sobald die Felder verändert werden. Dabei kannst Du dann einfach die InitialInitDefs-Methode aufrufen:
Delphi-Quellcode:
Muss jetzt nicht stimmen, was Signaturen/Typen usw. angeht, aber grob was in der Richtung halt.
TMyTestDataSet = class(TDataset)
private FFields: TStrings; protected procedure setFields(const Fields: TStrings); public property Fields: TStrings read FFields write setFields; end; ... procedure TMyTestData.setFields; begin self.FFields.Assign(Fields); self.InitialInitDefs; ... end; Gruß Der Unwissende |
Re: InitFieldDefs aufrufen
Hallo!
Das problem ist, daß Funktion was du vorgeschlagen hast, wird leider NIE vom Fields Editor aufgerufen... Alles was Fields Editor manipuliert ist DataSet.FieldDefs!
Delphi-Quellcode:
Grüße, Zsoca
// auszug aus dem TFieldsEditor
function TFieldsEditor.DoAddFields(All: Boolean): TField; var AddFields: TAddFields; I: Integer; FieldName: string; Field: TField; begin CheckFieldAdd; Result := nil; try DSDesigner.BeginUpdateFieldDefs; DataSet.FieldDefs.Update; finally DSDesigner.EndUpdateFieldDefs; end; AddFields := TAddFields.Create(Application); try { Add physical fields not already represented by TField components to the to the list of available fields } for I := 0 to DataSet.FieldDefList.Count - 1 do with Dataset.FieldDefList[I] do if (FieldClass <> nil) and not (faHiddenCol in Attributes) then begin FieldName := DataSet.FieldDefList.Strings[I]; Field := DataSet.FindField(FieldName); if (Field = nil) or (Field.Owner <> Dataset.Owner) then AddFields.FieldsList.Items.Add(FieldName); end; { Show the dialog } AddFields.SelectAll; AddFields.FieldsList.ItemIndex := 0; {$IFDEF MSWINDOWS} if All or (AddFields.ShowModal <> mrCancel) then Result := CreateFields(AddFields.FieldsList); {$ENDIF} finally AddFields.Release; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 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