在Delphi 10.3.1中使用Firedac的In SQlite内存数据库出现问题。我已经在表单中添加了适当的组件,将连接驱动程序ID设置为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;
该表中填充了适当的数据,但是ORDER BY Location ASC
被忽略,并且为ORDER BY
选择了任何其他字段时,情况就是这样。该应用程序未发布任何错误消息。
我无法弄清楚为什么它可以在查询编辑器中工作,但不能从代码中解决。我对SQlite和Firedac还是很陌生,因此将不胜感激。
答案 0 :(得分:1)
使用两个FDQueries代替FDTABLE
将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;