Seperti yang telah dijelaskan kepada Anda di komentar, while
loop akan terlihat seperti ini:
while **not** FData.FDQuery1.Eof do **begin**
ShowMessage(FData.FDQuery1.Fields[0].ToString);
**FData.FDQuery1.Next;**
end;
(dikurangi tanda bintang, tentu saja). Namun, itu tidak akan mengatasi masalah bahwa SQL Anda salah.
Jadi, coba ini saja:
-
Dalam proyek Delphi baru, tempatkan TFDConnection, TFDQuery, TDataSource, TDataSource dan TListBox pada formulir. Simpan formulir dan proyek.
-
Klik dua kali FDConnection1 untuk memunculkan editor koneksinya dan mengkonfigurasinya sehingga Anda dapat berhasil menghubungkannya ke database Anda.
-
Hubungkan DBGrid1 ke DataSource1 dan Datasource1 ke FDQuery1.
-
Tambahkan kode di bawah ini ke acara OnCreate formulir.
-
Kompilasi dan jalankan.
-
Anda harus segera melihat penyebab masalah Anda. Seperti yang dikatakan pesan kesalahan kepada Anda, tidak ada bidang strDBName di tabel INFORMATION_SCHEMA.TABLES.
Jadi, Anda perlu mundur ke bantuan online MySQL, mulai mis. di sini
https://dev.mysql.com/doc/refman /5.7/en/tables-table.html
dan cari tahu persis apa yang Anda cari, jika Anda belum tahu, dan bagaimana mendapatkannya dari dalam proyek Anda.
Btw, jika Anda tidak yakin apa yang Anda lakukan, Anda harus selalu mencoba SQL Anda terlebih dahulu di utilitas MySql Workbench.
Kode
FDQuery1.SQL.Text := 'SELECT * FROM INFORMATION_SCHEMA.TABLES';
FDQuery1.Open;
FDQuery1.GetFieldNames(ListBox1.Items);
Saya memiliki database MySql yang disebut 'MATestDB'. Untuk mendapatkan daftar bidang (kolom) di tabelnya, saya akan menambahkan kode ini ke TForm1.FormCreate:
FDQuery2.SQL.Text := 'select * from information_schema.columns where table_schema = ''MATestDB''';
FDQuery2.Open;
Jika Anda ingin FDQuery2 dan kisi-kisinya melacak tabel yang dipilih di FDQuery1, Anda dapat menggunakan kode seperti berikut untuk menyiapkan master-detail
hubungan antara mereka:
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, Anda tidak akan bisa mendapatkan info skema untuk database Paradox dengan cara yang sama, tetapi Anda harus bisa mencari di Google bagaimana mencari tahu informasi apa yang ingin Anda kumpulkan dari Paradox.
Btw #2:Dalam Sql yang Anda kutip dalam jawaban Anda yang dihapus, satu masalah adalah referensi ke DBGrid2.SelectedField.ToString
. Jika DBGrid2 mendapatkan datanya dari FDQuery2, maka yang Anda maksud adalah DBGrid**1**.SelectedField.ToString
. Jika Anda masih mengalami masalah dengan itu, saya sarankan Anda menanyakannya di q baru, tetapi pastikan Anda menyertakan semua kode yang diperlukan untuk mereproduksi masalah.