Jak już wyjaśniono w komentarzach, Twoje while
pętla powinna wyglądać mniej więcej tak:
while **not** FData.FDQuery1.Eof do **begin**
ShowMessage(FData.FDQuery1.Fields[0].ToString);
**FData.FDQuery1.Next;**
end;
(oczywiście bez gwiazdek). Nie rozwiązałoby to jednak problemu, że Twój SQL jest niepoprawny.
Spróbuj więc zamiast tego:
-
W nowym projekcie Delphi umieść w formularzu TFDConnection, TFDQuery, TDataSource,TDataSource i TListBox. Zapisz formularz i projekt.
-
Kliknij dwukrotnie FDConnection1, aby wyświetlić jego edytor połączeń i skonfigurować go tak, abyś mógł pomyślnie połączyć go z bazą danych.
-
Podłącz DBGrid1 do DataSource1 i Datasource1 do FDQuery1.
-
Dodaj poniższy kod do zdarzenia OnCreate formularza.
-
Skompiluj i uruchom.
-
Powinieneś natychmiast zobaczyć przyczynę swojego problemu. Jak powiedział komunikat o błędzie, w tabeli INFORMATION_SCHEMA.TABLES nie ma pola strDBName.
Musisz więc wrócić do pomocy online MySQL, zaczynając m.in. tutaj
https://dev.mysql.com/doc/refman /5.7/pl/tabele-tabela.html
i ustal dokładnie, czego szukasz, jeśli jeszcze tego nie wiesz, i jak uzyskać to z poziomu swojego projektu.
Btw, jeśli nie jesteś pewien, co robisz, zawsze powinieneś najpierw wypróbować swój SQL w narzędziu MySql Workbench.
Kod
FDQuery1.SQL.Text := 'SELECT * FROM INFORMATION_SCHEMA.TABLES';
FDQuery1.Open;
FDQuery1.GetFieldNames(ListBox1.Items);
Mam bazę danych MySql o nazwie 'MATestDB'. Aby uzyskać listę pól (kolumn) w swoich tabelach, dodałbym ten kod do TForm1.FormCreate:
FDQuery2.SQL.Text := 'select * from information_schema.columns where table_schema = ''MATestDB''';
FDQuery2.Open;
Jeśli chcesz, aby FDQuery2 i jego siatka śledziły wybraną tabelę w FDQuery1, możesz użyć kodu podobnego do poniższego, aby skonfigurować master-detail
związek między nimi:
procedure TForm1.FormCreate(Sender: TObject);
begin
FDQuery1.SQL.Text := 'SELECT * FROM INFORMATION_SCHEMA.TABLES';
FDQuery2.SQL.Text := 'select table_schema, table_name, column_name, data_type, character_maximum_length, ordinal_position from information_schema.columns where table_schema = :Table_Schema and table_name = :Table_Name';
FDQuery2.IndexFieldNames := 'table_schema;table_name;ordinal_position';
FDQuery2.MasterFields := 'table_schema;table_name';
FDQuery2.MasterSource := DataSource1;
FDQuery1.Open;
FDQuery1.GetFieldNames(ListBox1.Items);
FDQuery2.Open;
FDQuery2.GetFieldNames(ListBox2.Items);
end;
Btw, nie będziesz w stanie uzyskać informacji o schemacie dla bazy danych Paradox w ten sam sposób, ale powinieneś być w stanie wyszukać w Google, jakie informacje chcesz zebrać z Paradox.
Btw #2:W Sql, który zacytowałeś w usuniętej odpowiedzi, jednym problemem byłoby odwołanie do DBGrid2.SelectedField.ToString
. Jeśli DBGrid2 pobiera swoje dane z FDQuery2, możesz mieć na myśli DBGrid**1**.SelectedField.ToString
. Jeśli nadal masz z tym problem, sugeruję, abyś zapytał o to w nowym q, ale upewnij się, że zawierasz cały kod niezbędny do odtworzenia problemu.