这是我的程序。当我执行它时没有任何反应;这是为什么?
FData.FDQuery1.SQL.Clear;
FData.FDQuery1.SQL.Add('select StrDBName FROM INFORMATION_SCHEMA.TABLES');
FData.FDQuery1.ExecSQL;
while FData.FDQuery1.Eof do
ShowMessage(FData.FDQuery1.Fields[0].ToString);
end;
答案 0 :(得分:1)
正如已在评论中向您解释的那样,您的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
然后确切地知道你在寻找什么, 如果您还不知道,以及如何从项目中获取它。
顺便说一句,如果您不确定自己在做什么,则应该首先在MySql Workbench实用程序中尝试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收集哪些信息。
Btw#2:在您删除的答案中引用的Sql中,一个问题是对DBGrid2.SelectedField.ToString
的引用。如果DBGrid2从FDQuery2获取其数据,那么您可能意味着DBGrid**1**.SelectedField.ToString
。如果您仍然遇到问题,我建议您在新的q中询问,但请确保包含重现问题所需的所有代码。