AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FDConnection.GetCatalognames wirft AV

Ein Thema von Delbor · begonnen am 9. Mär 2017 · letzter Beitrag vom 10. Mär 2017
Antwort Antwort
Delbor

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

FDConnection.GetCatalognames wirft AV

  Alt 9. Mär 2017, 21:40
Delphi-Version: XE8
Hi zusammen

Ich habe meinem Datenmodul eine eigene Klasse zur 'direkten Kommunikation mit dem Server' spendiert. Im wesentlichen sollen damit Sessionvariablen abgerufen/verändert werden können.
Delphi-Quellcode:
  TMySQLCorrespondent = class(TPersistent)
    private{private Declarations}
      FContentmasterConnection : Boolean;
      FCatalogInformation: TStringlist;
      FMaxAllowedPacket: Integer;
    FCatNames: TStringList;
...
      function DefineContentmasterConnection: Boolean;
      function GetPerformanceSchemaConnection: Boolean;
      function GetSessionVarlist: TStringList;
      function GetCatalogInformation: TStringlist; //<==
    public{public Declarations}
      property ContentmasterConnection2: Boolean read DefineContentmasterConnection;
      property PerformanceSchemaConnection: Boolean read GetPerformanceSchemaConnection;
      property Cataloginformation : TStringlist read GetCatalogInformation;
...

    Constructor Create(AOwner: TObject);
    Destructor Destroy; override;
  end;
So die Deklaration. Einige der Felder und Propertys, die für diesen Thred nicht wichtig sind, habe ich durch Pünktchen ersetzt.
Das Thema ist das Feld FCatNames. Und so wird das verwendet:

Delphi-Quellcode:
constructor TMySQLCorrespondent.Create(AOwner: TObject);
begin
  inherited Create;
  FCatalogInformation := TStringlist.Create;
  FCatNames := TStringList.Create;
end;

destructor TMySQLCorrespondent.Destroy;
begin
  FCatalogInformation.Free;
  FCatNames.Free;
  inherited;
end;

function TMySQLCorrespondent.GetCatalogInformation: TStringlist;
  var i, j: Integer; Catalog: string;
begin
    FDMySQLDml.FDConnectionMySql.GetCatalogNames('', FCatNames); // AV
    Result := FCatNames;
end;
Die AV wird ausgelöst, weil FCatnames unbekannnt ist, also nicht mal nil.
Was könnte da falsch sein?

Im Anhang noch 3 Jpegs meines Strukturfensters. Aktiv sind dabei:
Struktur1: TCM_First (das Hauptfenster)
Struktur2: TServerInfoFrame
Struktur3: FDMySQLDml (Datenmodul

Gruss
Delbor

Gruss
Delbor
Angehängte Grafiken
Dateityp: jpg Struktur1.JPG (139,6 KB, 12x aufgerufen)
Dateityp: jpg Struktur2.JPG (138,6 KB, 6x aufgerufen)
Dateityp: jpg Struktur3.JPG (106,1 KB, 6x aufgerufen)
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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.052 Beiträge
 
Delphi 12 Athens
 
#2

AW: FDConnection.GetCatalognames wirft AV

  Alt 9. Mär 2017, 22:06
Die AV wird ausgelöst, weil FCatnames unbekannnt ist, also nicht mal nil.
Wenn es unbekannt wäre, gäbe es keine AV, sondern der Compiler hätte gemeckert. Eine AV kann nur zur Runtime kommen und da hat der Compiler schon alles abgenickt.

Ist FDMySQLDml zu dem Zeitpunkt eigentlich schon initialisiert?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delbor

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

AW: FDConnection.GetCatalognames wirft AV

  Alt 9. Mär 2017, 22:49
Hi Uwe Raabe
Ja. FDMySQLDml ist das Datenmodul. Und TMySQLCorrespondent ist da deklariert (vor FDMySQLDml) und ein privates Feld des Datenmoduls.

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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.052 Beiträge
 
Delphi 12 Athens
 
#4

AW: FDConnection.GetCatalognames wirft AV

  Alt 9. Mär 2017, 23:32
Du übergibst ja als Rückgabewert in GetCatalogInformation die aktuelle FCatNames-Instanz. Der Rückgabewert wird aber nicht irgendwo freigegeben, oder?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delbor

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

AW: FDConnection.GetCatalognames wirft AV

  Alt 9. Mär 2017, 23:51
Hi Uwe Raabe

Zitat:
Der Rückgabewert wird aber nicht irgendwo freigegeben, oder?
Nein.Vorgängig hatte ich mit einer lokalen Liste gearbeitet und sie auch lokal wieder freigegeben - und prompt keinen Rückgabewert erhalten. Daraufhin habe ich die Liste privat deklariert - so kann ich sie auch wieder korrekt freigeben.

Gruss
Delbor

PS: Der Aufruf:
Delphi-Quellcode:
procedure TServerInfoFrame.CatalogInformation;
  var i, j: Integer; Catalog, SQLString: string;
      LIndent : String; CatNames: TStringlist;
begin
  Self.LBxCatalogNames.Items.Insert(0,'procedure TServerInfoFrame.CatalogInformation;');
  Self.LBxCatalogNames.Items.Insert(1,'**********************************************');
  Catnames := TStringlist.Create;
  try
// FDMySQLDml.FDConnectionMySql.GetCatalogNames('', CatNames);
    Self.LBxCatalogNames.Items.Add('Datenbank: ' + FDMySQLDml.FDConnectionMySql.Params.Database);
    Self.LBxCatalogNames.Items.AddStrings(FDMySQLDml.MySQLCorrespondent.Cataloginformation); //<< AV
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (10. Mär 2017 um 01:13 Uhr)
  Mit Zitat antworten Zitat
Delbor

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

AW: FDConnection.GetCatalognames wirft AV

  Alt 10. Mär 2017, 06:44
Hi zusammen

Interessanterweise sind heute morgen die Fehlermeldungen in der Strukturansicht weg. Bin gespannt darauf, was es braucht, bis sie wieder da sind. Erwartet hätte ich, dass die Fehlermeldungen nach dem ersten Durchsteppen wieder da wären...

Am Fehler selbst hat sich nichts geändert. Entgegen meinem ersten Beitrag muss ich mich allerdings etwas korrigieren: Ich habe die Liste mal unter 'Überwachte Ausdrücke' eingetragen. Wenn nun beim durchsteppen die Unit des Datenmoduls aktiv wird, steht unter dem Eintrag der Liste "nicht verfügbarer Wert". Ist die Ausführungsposition bei Durchsteppen auf der entsprechenden Zeile und wenn ich die Maus über den Listenbezeichner halte, erhalte ich genau diese Meldung.


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
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 07:25 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