Einzelnen Beitrag anzeigen

Delbor

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

Problem mit Umschalten der Verbindung

  Alt 28. Jan 2016, 14:45
Datenbank: MySQL • Version: 5.9xxx • Zugriff über: Firedac
Hi zusammen

Ich schlage mich noch immer damit herum, Servervariablen von MySQL abzufragen.
Offensichtlich handelt es sich dabei nicht um Metainformationen. Diese beschreiben meine eigene Datenbank. Ich brauche aber Variablen, die vom Server bereitgestellt werden, wie zum Beispiel maxallowedpacket, das die Maximalgrösse der Daten angibt, die in einem Feld gespeichert werden können.
Also versuche ich nun, die MySQL-Tabellen mit 'normalem' SQL abzufragen, was teilweise auch gelingt.
Das Problem dabei ist, das MySQL für jede Verbindung eine eigene Instanz einer Variablen bereitstellt. Desshalb benutze ich eine einzige FDConnection-Komponente und verbinde sie dynamisch mit dem Server.
So, wie ich das bislang verstanden habe, kann ich aber nicht mit einem Query (oder was auch immer)auf Datenbank B zugreifen, wenn in der Verbindungsdefinition Datenbank A angegeben ist.

Deshalb sieht meine CM-First.Create-Procedure zur Zeit so aus:
Delphi-Quellcode:
procedure TCM_First.FormCreate(Sender: TObject);
  var i,j: integer; QueryResult :TQueryResultClass;
      SQLString, Category : String;
begin
  FProcedureReport := TStringList.Create;
  ApplicationManager := TWinManager.Create(CM_First);
  FDMySQLDml:= TFDMySQLDml.Create(Self);
  FDMySQLDml.DefinePerformanceschemaConnection;
  FProcedureReport.Add('TFDMySQLDml.Create');
  FProcedureReport.Add('DefinePerformanceschemaConnection-Aufruf');
  FProcedureReport.Add(' ');
  ServerInfoFrame1.CatalogInformation;
  FProcedureReport.Add('ServerInfoFrame1.CatalogInformation-Aufruf');
  FDMySQLDml.OnFoundedCategory := Self.DoOnFoundedCategory ;
  FDMySQLDml.OnStartCategoryQuery := Self.DoOnStartCategoryQuery;
....
  if FDMySQLDml.DefineContentmasterConnection then
  begin
....
  end
  else
  begin
   ShowMessage('Die Verbindung konnte '+ #13#10 + ' nicht hergestellt werden.');
  end;
  FProcedureReport.Add(' ');
  FProcedureReport.Add('FDMySQLDml.FDConnectionMySql.ConnectionName := '+FDMySQLDml.FDConnectionMySql.ConnectionName);
  FProcedureReport.Add('FDMySQLDml.FDConnectionMySql.Params.Database := '+FDMySQLDml.FDConnectionMySql.Params.Database);
  FProcedureReport.Add('FDMySQLDml.FDQueryMain.ConnectionName := '+FDMySQLDml.FDQueryMain.ConnectionName);
  FProcedureReport.Add('FDMySQLDml.FDQueryCategory.ConnectionName := '+FDMySQLDml.FDQueryCategory.ConnectionName);
  FProcedureReport.Add('FDMySQLDml.FDMySQLQueryInfo.ConnectionName := '+FDMySQLDml.FDMySQLQueryInfo.ConnectionName);
end;
Einige für diese Frage nicht relevante Zeilen habe ich durch Punkte ersetzt.
Die DefineContentmasterprocedur und die DefinePerformanceschemaConnection sehen so aus - beide sind anundfürsich gleich; der Unterschied liegt nur in der zugewiesenen Datenbank:
Delphi-Quellcode:
function TFDMySQLDml.DefineContentmasterConnection: Boolean;
  var LIndent : String;
begin
  if (FHost <> 'localhost') or (FDataBase <> 'contentmasterdata') then
    Exit;
  LIndent := ' - ';
  FDConnectionMySQL.Close;
// FDQueryMain.Release
  FDConnectionMySQL.Params.Add('DriverID=MySQL');
  FDConnectionMySQL.Params.Add('Server=' + FHost);
  FDConnectionMySQL.Params.Add('Port=' + FPort);
  FDConnectionMySQL.Params.Add('Database=' + FDataBase);
  FDConnectionMySQL.Params.Add('User_Name=root');
  FDConnectionMySQL.Open;
  Result := True;
  CM_First.ProcedureReport.Add(' ');
  CM_First.ProcedureReport.Add('FUNCTION TFDMySQLDml.DefineContentmasterConnection');
  CM_First.ProcedureReport.Add('--------------------------------------------------');
  CM_First.ProcedureReport.Add('TFDMySQLDml.FDConnectionMySQL.Params.DriverID := '+ FDConnectionMySQL.Params.DriverID);
  CM_First.ProcedureReport.Add('TFDMySQLDml.FDConnectionMySQL.Params.Database := '+ FDConnectionMySQL.Params.Database);
end;
Im Anhang ist zu sehe, was mir ProcedurReport schliesslich im Memo ausgibt...

Als ich die FDConnection im Datamodul angelegt hatte, setzte ich deren Property Connection auf eine von mir im Datenexplorer definierte Verbindung.

Was mache ich falsch?

Gruss
Delbor
Miniaturansicht angehängter Grafiken
reportliste.png  
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 TBx (29. Jan 2016 um 05:58 Uhr) Grund: Dreckfuhler aus dem Titel gemopst
  Mit Zitat antworten Zitat