Както вече ви беше обяснено в коментарите, вашият while
цикъл трябва да изглежда по следния начин:
while **not** FData.FDQuery1.Eof do **begin**
ShowMessage(FData.FDQuery1.Fields[0].ToString);
**FData.FDQuery1.Next;**
end;
(без звездичките, разбира се). Това обаче няма да преодолее проблема, че вашият SQL е неправилен.
Затова опитайте това вместо това:
-
В нов проект на Delphi поставете TFDConnection, TFDQuery, TDataSource,TDataSource и TListBox във формуляр. Запазете формуляра и проекта.
-
Щракнете двукратно върху FDConnection1, за да изскочите неговия редактор за свързване и да го конфигурирате, така че да можете успешно да го свържете към вашата база данни.
-
Свържете DBGrid1 към DataSource1 и Datasource1 към FDQuery1.
-
Добавете кода по-долу към събитието OnCreate на формуляра.
-
Компилирайте и стартирайте.
-
Трябва незабавно да видите причината за вашия проблем. Както ви каза съобщението за грешка, няма поле strDBName в таблицата INFORMATION_SCHEMA.TABLES.
Така че трябва да се върнете към онлайн помощта за MySQL, като започнете напр. тук
https://dev.mysql.com/doc/refman /5.7/en/tables-table.html
и разберете какво точно търсите, ако все още не знаете, и как да го получите от вашия проект.
Между другото, ако не сте сигурни какво правите, винаги първо трябва да опитате вашия SQL в помощната програма MySql Workbench.
Код
FDQuery1.SQL.Text := 'SELECT * FROM INFORMATION_SCHEMA.TABLES';
FDQuery1.Open;
FDQuery1.GetFieldNames(ListBox1.Items);
Имам MySql база данни, наречена „MATestDB“. За да получа списък с полетата (колоните) в неговите таблици, бих добавил този код към TForm1.FormCreate:
FDQuery2.SQL.Text := 'select * from information_schema.columns where table_schema = ''MATestDB''';
FDQuery2.Open;
Ако искате FDQuery2 и неговата мрежа да проследяват избраната таблица във FDQuery1, можете да използвате код като следния, за да настроите master-detail
връзка между тях:
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;
Между другото, няма да можете да получите информация за схема за база данни на Paradox по същия начин, но трябва да можете да потърсите в Google как да разберете каква информация искате да съберете от Paradox.
Между другото #2:В Sql, който цитирахте във вашия изтрит отговор, един проблем би бил препратката към DBGrid2.SelectedField.ToString
. Ако DBGrid2 получава своите данни от FDQuery2, тогава може да сте имали предвид DBGrid**1**.SelectedField.ToString
. Ако все още имате проблем с това, предлагам да попитате за това в ново q, но се уверете, че сте включили целия код, необходим за възпроизвеждане на проблема.