Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firedac und Servervariablen (https://www.delphipraxis.net/187565-firedac-und-servervariablen.html)

Delbor 9. Dez 2015 15:04

Datenbank: MySQL • Version: 5.9.1 • Zugriff über: Firedac

Firedac und Servervariablen
 
Liste der Anhänge anzeigen (Anzahl: 1)
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:


Delphi-Quellcode:
FireDacMySQLModul.FDMySQLQueryInfo.SQL.Text := 'SHOW TABLES from ContentMasterData;'


oder

Delphi-Quellcode:
  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


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 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