在Delphi 10.1中,我编写了一个小程序来了解FireDAC和SQlite。

我有FDConnectionFDQuery(带有SQL= SELECT * FROM Sætning)和DataSource + DBGrid
DBGrid显示(空)表Sætning。我想从包含CSV的列表框中将数据放入表中。

这是我的代码:(fdwSætning = an 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 valuesdoes SQLite DBMS。关于您所描述的内容的可能解释是,您已经在某个外部工具(无法保存Unicode元数据)中创建了表。

因此,即使我强烈建议仅将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);

关于sqlite - FDQuery追加给出错误“没有这样的表”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45531391/

10-09 15:55