FDQuery 附加给出错误 "no such table"
FDQuery append gives error "no such table"
在Delphi10.1做了一个小程序学习FireDAC和SQlite
我有 FDConnection
、FDQuery
(有 SQL= SELECT * FROM Sætning
)和 DataSource + DBGrid
。
DBGrid
显示(空)table Sætning
。我想从包含 CSV 的列表框中将数据放入我的 table。
这是我的代码:(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;
当我 运行 此代码时,我收到错误消息
[FireDAC][phys][SQLite]ERROR:no such table: Sætning
这不应该发生。自 Delphi 2009 年以来,FireDAC fully supports Unicode metadata values, so as does SQLite DBMS。对您所描述的内容的可能解释是您在某些外部工具(无法保存 Unicode 元数据)中创建了 table。
因此,即使我强烈建议仅使用 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);
在Delphi10.1做了一个小程序学习FireDAC和SQlite
我有 FDConnection
、FDQuery
(有 SQL= SELECT * FROM Sætning
)和 DataSource + DBGrid
。
DBGrid
显示(空)table Sætning
。我想从包含 CSV 的列表框中将数据放入我的 table。
这是我的代码:(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;
当我 运行 此代码时,我收到错误消息
[FireDAC][phys][SQLite]ERROR:no such table: Sætning
这不应该发生。自 Delphi 2009 年以来,FireDAC fully supports Unicode metadata values, so as does SQLite DBMS。对您所描述的内容的可能解释是您在某些外部工具(无法保存 Unicode 元数据)中创建了 table。
因此,即使我强烈建议仅使用 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);