Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Die Sache mit dem Listenproperty

  Alt 1. Mär 2017, 19:28
Delphi-Version: 5
Hi zusammen

Da man Pferde ja bekanntlich vom Kopf her aufzäumt, fang ich gleich mal damit an. Meinem Datenmodul habe ich ein Feld mit zugehörigem Setter, Getter und Property verpasst. In private:
FContentmastertables: TStringlist; und
function GetContentmasterTables: TStringlist; sowie schliesslich public:
property Contentmastertables: TStringlist read GetContentmasterTables; Bei Programmstart greife ich ein erstes mal darauf zu:
Delphi-Quellcode:
procedure TServerInfoFrame.CatalogInformation;
  var i, j: Integer; Catalog: string;
      LIndent : String; CatNames: TStringlist;
begin
  CatNames := TStringList.Create;
  try
  ...
  finally
    CatNames.Free;
  end;
  LIndent := ' - ';
  for i := 0 to LBxCatalogNames.Items.Count - 1 do
  begin
...
    Catalog := LBxCatalogNames.Items[i];
// CM_First.ProcedureReport.Add(LIndent + 'Catalog := '+ Catalog);
    if Catalog = 'contentmasterdatathen
    begin
      Memo1.Lines.Add('*************');
      Memo1.Lines.Add(Catalog);
      Memo1.Lines.Add('------------');
      Memo1.Lines.AddStrings(FDMySQLDml.Contentmastertables); // Löst offenbar die AV aus. Der GRund: Keine Rückgabe
      ...
Dies löst den Getter aus:

Delphi-Quellcode:
function TFDMySQLDml.GetContentmasterTables: TStringlist;
  var SqlString : String; I: integer;
begin
  SqlString := 'SHOW TABLES';
  FDQueryMain.Open(SqlString);
  FDQueryMain.First;
  while not FDQueryMain.Eof do
  begin
    FContentmastertables.Add(FDQueryMain.Fields.Fields[0].AsString);
    FDQueryMain.Next;
  end;
  Result.Clear;
  Result := (FContentmastertables);
 end;
Spätestens bei der Übrgabe an Result krachts...

Ich habe jetzt mindestens einen Tag hinter mir. Dabei habe ich mir unter anderem dies und das.

Ich habe auch schon versucht, mit TStrings zu arbeiten. Aber irgendwie komm ich da nicht ganz klar. So, wie ich das verstanden habe, kann ich zwar eine Variable als TStrings deklarieren, muss dieser dann aber einen TStrings-Nachkommen "mit Hand und Fuss" zuweisen, bevor ich irgendwas befüllen kann.

Da es sich bei der Funktion um einen Getter handelt, kann ich die Methode nicht einfach in eine Prozedur umwandeln.
Was mache ich falsch??

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat