FireDAC SQLITE:无此类表列:PRAGMA_TABLE_INFO

问题描述 投票:0回答:2

我正在使用带有firedac sqlite3的delphi rio 10.3构建应用程序

pragma函数在我尝试使用“ SELECT COMMAND”时不起作用:

procedure Tamdf.Button31Click(Sender:TObject);
begin
   MyFDQuery.Open('SELECT name FROM PRAGMA_table_info("DOCM")');
   ShowMessage(MyFDQuery.Fields[0].AsString);
end;

我收到错误消息:“错误:没有这样的表列:PRAGMA_table_info.name”我做错了什么?

delphi firedac
2个回答
1
投票

以下代码在包含表MyTable的Sqlite数据库上对我来说工作正常。我不确定您使用的SQL是否正确用于FireDAC

procedure TForm3.Button1Click(Sender: TObject);
begin
  if FDQuery1.Active then
    FDQuery1.Close;
  FDQuery1.Open('PRAGMA Table_Info(''MyTable'')');
end;

返回

 cid    name
 0       ID
 1       NAME

如果没有别的,您可以使用FireDAC的LocalSQL从返回的结果集中提取Name

我将查看是否可以使SELECT与PRAGMA查询配合使用...

此查询在FireFox的Sqlite Manager加载项中正常工作

select * from PRAGMA_table_info('mytable')

但返回错误

没有这样的表:PRAGMA_Table_Info'。

由FDQuery1执行时。


1
投票

使用FireDAC,您可以对创建临时表“ table_info”使用解决方法:

MyFDQuery.Open(
  'DROP TABLE IF EXISTS table_info;' +
  'CREATE TEMPORARY TABLE table_info AS SELECT * FROM pragma_table_info("DOCM");' + 
  'SELECT name FROM table_info');

编辑

我的环境:Delphi 10.3.2 Rio,Win32,默认SQLite 3.28.0静态链接。没有特殊设置。

连接-TFDConnection仅包含:

FDConnection1.Params.DriverID := 'SQLite';
FDConnection1.Params.Database := 'D:\TMP\TEST.db';
© www.soinside.com 2019 - 2024. All rights reserved.