Hi zusammen
Da ich auf meinem neuen Rechner die neueste Version des
MySQL-Servers installiert habe (sofern dies immer noch so ist), kennt mein etwas älteres DelphiXE8 den Treiber unter Verwendung von DBExpress offenbar nicht mehr, weshalb ich gerade dabei bin, mich in Firedac einzuarbeiten.
Das scheint in den Grundzügen kein grösseres Problem zu sein - ich hab einfach das DBExpress-
Query durch dasjenige von Firedac ersetzt. Das hat mir problemlos die ersten 2 Testdatensätze eingefügt.
Wobei ich allerdings trotz intensivem Studium der Embarcadero-Seiten noch Probleme habe,, ist das Abrufen und allfällige Verändern der Servervariablen.
Ich hab z.B. Konstrukte wie:
FireDacMySQLModul.FDMySQLQueryInfo.SQL.Text := 'SHOW TABLES from ContentMasterData;'
oder
SqlString := 'SELECT * FROM SESSION_VARIABLES ORDER BY VARIABLE_NAME';
Unter DBExpress funktioniert das so, wie es sollte. Unter FireDac erhalte ich im ersten Fall die Fehlermeldung, dass die Tabelle 'ContentMasterData.ContentMasterData' nicht gefunden werden konnte:
Zitat:
Im Projekt ContentMasterDXE8.exe ist eine
Exception der Klasse EMySQLNativeException mit der Meldung '[FireDAC][Phys][
MySQL] Table 'contentmasterdata.contentmasterdata' doesn't exist' aufgetreten.
In diesem konkreten Fall konnte ich das zwar lösen, indem ich GetTableNames der Connctionkomponente aufrief. Folgender Code erzeugt die im angehängten Jpeg gezeigte Ausgabe, wobei die Komponenten sind TMemo, LBxCatalogNames, LBxTableNames, LBxFieldNames und LBxStoredProcedures:
Delphi-Quellcode:
procedure TServerInfoFrame.CatalogInformation;
var i, j: Integer; Catalog: string;
begin
FireDacMySQLModul.FDConnectionMySql.GetCatalogNames('', Self.LBxCatalogNames.Items);
for i := 0 to LBxCatalogNames.Items.Count - 1 do
begin
Catalog := LBxCatalogNames.Items[i];
Memo1.Lines.Add(Catalog);
Memo1.Lines.Add('*************');
SchemaInformation(Catalog);
TableInformation(Catalog);
StoredProcedureInfos;
end;
end;
procedure TServerInfoFrame.SchemaInformation(Catalog: string);
var j: Integer;
begin
FireDacMySQLModul.FDConnectionMySql.GetSchemaNames(Catalog,'', FSchemaList);
if FSchemaList.Count > 0 then
Memo1.Lines.AddStrings(FSchemaList)
else
begin
Memo1.Lines.Add('Keine Schema-Angaben zu '+Catalog+' vorhanden!');
Memo1.Lines.Add('');
end;
end;
procedure TServerInfoFrame.StoredProcedureInfos;
begin
FireDacMySQLModul.FDConnectionMySql.GetStoredProcNames('', '', '', '', LBxStoredProcedures.Items, [osMy, osSystem]);
end;
procedure TServerInfoFrame.TableInformation(Catalog: string);
begin
FireDacMySQLModul.FDConnectionMySql.GetTableNames(Catalog, '', '', FTablelist);
if FTablelist.Count > 0 then
Memo1.Lines.AddStrings(FTablelist)
else
begin
Memo1.Lines.Add('Keine Tabellen-Angaben zu '+Catalog+' vorhanden!');
Memo1.Lines.Add('');
end;
end;
Um die SessionVariablen abzurufen, benötige ich aber Zugriff auf die ServerTabelle SESSION_VARIABLES.
Wie komme ich an diese Variablen?
Gruss
Delbor