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;
我在 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;