Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi InitFieldDefs aufrufen (https://www.delphipraxis.net/95906-initfielddefs-aufrufen.html)

zsoca 15. Jul 2007 19:49

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:
procedure TMyTestDataSet.SetServerDataSet(SDSet: String);
begin
  ServerDataSet:= SDSet;
  FieldDefs.Updated := False;
  self.FFieldLayout := '';
  self.FFieldData.Clear;
  self.DefChanged(Self);
  FieldDefList.Clear;
  FieldDefs.Clear;
end;
Grüße, Zsoca

Der_Unwissende 16. Jul 2007 16:04

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:
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;
Muss jetzt nicht stimmen, was Signaturen/Typen usw. angeht, aber grob was in der Richtung halt.

Gruß Der Unwissende

zsoca 16. Jul 2007 23:54

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:
// 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;
Grüße, Zsoca


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 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