Einzelnen Beitrag anzeigen

Delbor

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

Firedac und Servervariablen

  Alt 9. Dez 2015, 15:04
Datenbank: MySQL • Version: 5.9.1 • Zugriff über: Firedac
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
Miniaturansicht angehängter Grafiken
gettablenames.jpg  
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