FireDAC SQLITE: нет такого столбца таблицы: PRAGMA_TABLE_INFO - PullRequest
0 голосов
/ 01 ноября 2019

Я создаю приложение с Delphi RIO 10.3 с помощью firedac sqlite3

Функция прагмы не работает с «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 "что я сделал не так?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Следующий код отлично работает для меня в базе данных Sqlite, содержащей таблицу MyTable. Я не уверен, что используемый вами 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

Если ничего другого, вы можете использовать LocalSQL FireDAC для извлечения Name из возвращенного набора результатов.

Я посмотрю, смогу ли я получить SELECT для работы с запросом PRAGMA ...

Этот запрос отлично работает в надстройке SQlite Manager для FireFox

select * from PRAGMA_table_info('mytable')

, но возвращает ошибку

нет такой таблицы: PRAGMA_Table_Info '.

при выполнении FDQuery1.

1 голос
/ 01 ноября 2019

С 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';
...