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