Firedac Sqlite 查询在查询编辑器中运行,但在从代码调用时不运行

Firedac Sqlite Query runs in Query Editor, but not when called from code

我在 Delphi 10.3.1 中使用 Firedac 的内存 SQlite 数据库遇到问题。我已将适当的组件添加到我的表单中,将 Connection DriverID 设置为 SQLite 并将数据库名称设置为 :memory:(对于内存数据库)。 我创建了 FDQuery1 SQL 虚拟数据,如下所示:

DROP TABLE IF EXISTS dnsstats; (For debug purposes only)
create table DNSStats(Location nvarchar(30), IP_Address 
nvarchar(20),Ping_Time Integer,Index_No Integer);
insert into DNSStats values ('NoWhere', '123.234.111.112',100,1);
insert into DNSStats values ('AnyWhere', '123.234.111.113',10,2);
insert into DNSStats values ('SomeWhere', '123.234.111.114',120,3);
insert into DNSStats values ('WhatWhere', '123.234.111.115',106,4);
insert into DNSStats values ('ShareWhere', '123.234.111.116',101,5);
insert into DNSStats values ('UnderWhere', '123.234.111.117',200,6);
select * from DNSStats ORDER BY Location ASC;

这个 SQL 在查询编辑器中执行时效果很好。我可以将 ORDER BY 更改为任何字段,并且 SQL 仍然可以正常工作。

然而,当 运行 来自如下代码时:

procedure TForm1.Button1Click(Sender: TObject);
begin
datasource1.DataSet:=fdtable1;
fdquery1.execute();
fdtable1.TableName:='DNSStats';
dbgrid1.DataSource:=datasource1;
fdtable1.Active:=true;
end;

table 填充了适当的数据,但 ORDER BY Location ASC 被忽略,当为 ORDER BY 选择任何其他字段时就是这种情况。应用程序未发布错误消息。

我无法弄清楚为什么它在查询编辑器中有效,但在代码中却无效。我对 SQlite 和 Firedac 还是很陌生,所以非常感谢任何帮助。

不使用 FDTABLE,而是使用两个 FDQueries

将 FDQuery1 的 SQL 文本设置为

DROP TABLE IF EXISTS dnsstats; (For debug purposes only)
create table DNSStats(Location nvarchar(30), IP_Address 
nvarchar(20),Ping_Time Integer,Index_No Integer);
insert into DNSStats values ('NoWhere', '123.234.111.112',100,1);
insert into DNSStats values ('AnyWhere', '123.234.111.113',10,2);
insert into DNSStats values ('SomeWhere', '123.234.111.114',120,3);
insert into DNSStats values ('WhatWhere', '123.234.111.115',106,4);
insert into DNSStats values ('ShareWhere', '123.234.111.116',101,5);
insert into DNSStats values ('UnderWhere', '123.234.111.117',200,6);

和 FDQuery2 的 SQL 文本

select * from DNSStats ORDER BY Location ASC;

然后

procedure TForm1.Button1Click(Sender: TObject);
begin
datasource1.DataSet:=fdquery2;
dbgrid1.DataSource:=datasource1;
fdquery1.execute();
fdquery2.Open();
end;