FireDAC SQLITE: нет такого столбца таблицы: PRAGMA_TABLE_INFO
Я создаю приложение с delphi rio 10.3 с firedac sqlite3
Функция 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" что я сделал не так?
2 ответа
С 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';
Следующий код отлично работает для меня в базе данных 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
По крайней мере, вы можете использовать FireDAC LocalSQL для извлечения Name
из возвращенного набора результатов.
Я посмотрю, смогу ли я заставить SELECT работать с запросом PRAGMA...
Этот запрос отлично работает в надстройке FireFox Sqlite Manager.
select * from PRAGMA_table_info('mytable')
но возвращает ошибку
такой таблицы нет: PRAGMA_Table_Info'.
при выполнении FDQuery1.