[英]FDQuery append gives error “no such table”
In Delphi 10.1 I made a small program to learn about FireDAC and SQlite. 在Delphi 10.1中,我制作了一个小程序来了解FireDAC和SQlite。
I have FDConnection
, FDQuery
(with SQL= SELECT * FROM Sætning
) and DataSource + DBGrid
. 我有
FDConnection
, FDQuery
(使用SQL= SELECT * FROM Sætning
)和DataSource + DBGrid
。 The DBGrid
shows the (empty) table Sætning
. DBGrid
显示(空)表Sætning
。 I want to put data into my table from a listbox containg a CSV. 我想从包含CSV的列表框中将数据放入我的表中。
This is my code: ( fdwSætning
= an FDQuery
) 这是我的代码:(
fdwSætning
= FDQuery
)
procedure TMainForm.bCSV_SQLite_SætningClick(Sender: TObject);
var
loop : integer;
nr, lang, tekst : string;
begin
{ Read CSV file into Listbox }
Listbox1.Items.LoadFromFile('GMS_Saetninger.txt');
{ Put the values from the CSV into the fields in each record }
for loop:= 0 to Listbox1.Items.Count-1 do begin
fdqSætning.Edit;
nr:= copy(Listbox1.Items[loop],1,4);
lang:= copy(Listbox1.Items[loop],5,2);
tekst:= copy(Listbox1.Items[loop],8, length(Listbox1.Items[loop]));
fdqSætning.Append;
fdqSætning.FieldByName('SAETNING_ID').AsString:= nr;
fdqSætning.FieldByName('LANGUAGE').AsString:= lang;
fdqSætning.FieldByName('SENTENCE').AsString:= tekst;
fdqSætning.Post;
end;
end;
When I run this code I get the error message 当我运行此代码时,我收到错误消息
[FireDAC][phys][SQLite]ERROR:no such table: Sætning
That should not happen. 这不应该发生。 Since Delphi 2009, FireDAC fully supports Unicode metadata values , so as does SQLite DBMS .
自Delphi 2009起, FireDAC完全支持Unicode元数据值 , SQLite DBMS也是如此 。 Possible explanation for what you describe is that you've created your table in some external tool (which cannot save Unicode metadata).
您所描述内容的可能解释是您已在某些外部工具(无法保存Unicode元数据)中创建了表。
So even when I would highly suggest using only ASCII chars for database object names, you can still do something like this with FireDAC since Delphi 2009: 因此,即使我强烈建议仅使用ASCII字符作为数据库对象名称,因此自Delphi 2009以来,您仍然可以使用FireDAC执行类似的操作:
FDConnection.Params.Add('DriverID=SQLite');
FDConnection.Params.Add('Database=C:\MyDatabase.db');
FDQuery.SQL.Text := 'CREATE TABLE ṀÿṪäḅḷë (MɏFɨɇłđ INTEGER)';
FDQuery.ExecSQL;
FDQuery.SQL.Text := 'INSERT INTO ṀÿṪäḅḷë (MɏFɨɇłđ) VALUES (1234)';
FDQuery.ExecSQL;
FDQuery.SQL.Text := 'SELECT MɏFɨɇłđ FROM ṀÿṪäḅḷë';
FDQuery.Open;
Assert(FDQuery.FieldByName('MɏFɨɇłđ').AsInteger = 1234);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.