コメントですでに説明したように、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イベントに追加します。
-
コンパイルして実行します。
-
問題の原因がすぐにわかるはずです。エラーメッセージに示されているように、INFORMATION_SCHEMA.TABLESテーブルにstrDBNameフィールドはありません。
したがって、MySQLオンラインヘルプに戻る必要があります。ここ
https://dev.mysql.com/doc/refman /5.7/en/tables-table.html
探しているものが何であるか、まだわからない場合は、プロジェクト内から取得する方法を正確に把握してください。
ところで、何をしているのかわからない場合は、常にMySqlWorkbenchユーティリティでSQLを最初に試す必要があります。
コード
FDQuery1.SQL.Text := 'SELECT * FROM INFORMATION_SCHEMA.TABLES';
FDQuery1.Open;
FDQuery1.GetFieldNames(ListBox1.Items);
'MATestDB'というMySqlデータベースがあります。テーブル内のフィールド(列)のリストを取得するには、このコードを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データベースのスキーマ情報を同じ方法で取得することはできませんが、Paradoxから収集する情報を見つける方法をグーグルで検索できるはずです。
ところで#2:削除された回答で引用したSQLでは、1つの問題はDBGrid2.SelectedField.ToString
への参照です。 。 DBGrid2がFDQuery2からデータを取得する場合は、DBGrid**1**.SelectedField.ToString
を意味している可能性があります。 。それでも問題が解決しない場合は、新しいqで質問することをお勧めしますが、問題を再現するために必要なすべてのコードを含めるようにしてください。