Einzelnen Beitrag anzeigen

Delbor

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

TableNames und die Zugriffsverletzung

  Alt 16. Mär 2017, 16:09
Datenbank: MySQL • Version: 5.7 • Zugriff über: FireDac
Hi zusammen

In der Createprozedure meiner Mainform hab ich 2 Aufrufe:
Delphi-Quellcode:
    ServerInfoFrame1.CatalogInformation;
    Serverinfoframe1.TableInformation('contentmasterdata');
Beide Methoden tun problemlos, was sie sollen:
Delphi-Quellcode:
procedure TServerInfoFrame.TableInformation(Catalog: string);
  var LIndent : String;
begin
  LIndent := ' - ';
  Self.LBxTableNames.Items.AddStrings(FDMySQLDml.Contentmastertables);
  FDMySQLDml.FDConnectionMySql.GetTableNames(Catalog, '', '', FTablelist);
  if FTablelist.Count > 0 then
  begin
    Memo1.Lines.Add('TServerInfoFrame.TableInformation / '+ Catalog);
    Memo1.Lines.Add('FDMySQLDml.FDConnectionMySql.DatabaseName' + FDMySQLDml.FDConnectionMySql.Params.Database);
    Memo1.Lines.AddStrings(FTablelist)
  end
  else
  begin
    Memo1.Lines.Add('Keine Tabellen-Angaben zu '+Catalog+' vorhanden!');
    Memo1.Lines.Add('');
  end;
end;
und der Getter des Propertys FDMySQLDml.Contentmastertables:

Delphi-Quellcode:
function TFDMySQLDml.GetContentmasterTables: TStringlist; // Wird nach TMySQL verlegt
  var SqlString : String; I: integer;
begin
    SqlString := 'SHOW TABLES';
    FDQueryMain.Open(SqlString);
    FDQueryMain.First;
    while not FDQueryMain.Eof do
    begin
      FContentmastertables.Add(FDQueryMain.Fields.Fields[0].AsString);
      FDQueryMain.Next;
    end;
      FDQueryMain.Close;
  Result := (FContentmastertables);
 end;
Trotzdem erhalte ich die Fehlermeldung:

Zitat:
Im Projekt ContentMasterDXE8.exe ist eine Exception der Klasse EMySQLNativeException mit der Meldung '[FireDAC][Phys][MySQL] Table 'contentmasterdata.kategorien_tabelle' doesn't exist' aufgetreten.
Die entsprechende Abfrage:

Delphi-Quellcode:
procedure TFDMySQLDml.SelectCategoryRecords;
  var SQLString: UTF8String; Zero: Boolean;
      QueryCategory : TQueryResultClass; LCategory : String; LCategoryKey : Integer;
begin
  if FCategoryList.Count>0 then
     FCategoryList.Clear;
  if assigned(FOnStartCategoryQuery) then
  begin
     Zero := True;
     FOnStartCategoryQuery(Self, Zero);
  end;
  SQLString := 'SELECT Kath_ID as Kath_ID, Kategorie as Kategorie FROM kategorien_tabelle';
  FDQueryMain.SQL.Text := SQLString;
  FDQueryMain.Open; //<==Kategorientabelle wird nicht gefunden `` ` ` ``
  FDQueryMain.First;
  while not FDQueryMain.Eof do
  begin
    QueryCategory := TQueryResultClass.Create(Self);
    QueryCategory.KategoryTabelle.Kath_Id := FDQueryMain.FieldByName('Kath_ID').AsInteger;
    QueryCategory.KategoryTabelle.Kategory := UTF8ToUnicodeString(FDQueryMain.FieldByName('Kategorie').AsString);
    FCategoryList.Add(QueryCategory);
    if assigned(FOnFoundedCategory) then
    begin
      LCategory := QueryCategory.KategoryTabelle.Kategory;
      LCategoryKey := QueryCategory.KategoryTabelle.Kath_Id;
      FOnFoundedCategory(Self,LCategory,LCategoryKey);
    end;
    FDQueryMain.Next;
  end;
// CM_First.CmbxFrame1.ComboBox1.Items.Add(FCategoryList.CurrentRecord.KategoryTabelle.Kategory);
  FDQueryMain.SQL.Clear;
  FDQueryMain.Close;
end;
Wie aus dem Anhang ersichtlich, tun beide Abfragemethoden (die von Firedac und die Direktabfrage) genau, was sie sollen und listen die gesuchten Tabellen auf - inklusive der schlussendlich vermissten 'contentmasterdata.kategorien_tabelle'.

Was soll das, bzw. was mache ich falsch?

Gruss
Delbor
Miniaturansicht angehängter Grafiken
tablenames.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