Sqlite FDQuery append给出错误;没有这样的表格”;

Sqlite FDQuery append给出错误;没有这样的表格”;,sqlite,delphi,firedac,Sqlite,Delphi,Firedac,在Delphi10.1中,我编写了一个小程序来学习FireDAC和SQlite 我有FDConnection,FDQuery(使用SQL=SELECT*fromtning)和DataSource+DBGrid。 DBGrid显示(空)表Sætning。我想将包含CSV的列表框中的数据放入表中 这是我的代码:(fdwSætning=anFDQuery) 当我运行此代码时,会收到错误消息 [FireDAC][phys][SQLite]ERROR:no such table: Sætning 这不应

在Delphi10.1中,我编写了一个小程序来学习FireDAC和SQlite

我有
FDConnection
FDQuery
(使用
SQL=SELECT*fromtning
)和
DataSource+DBGrid
DBGrid
显示(空)表
Sætning
。我想将包含CSV的列表框中的数据放入表中

这是我的代码:(
fdwSætning
=an
FDQuery

当我运行此代码时,会收到错误消息

[FireDAC][phys][SQLite]ERROR:no such table: Sætning

这不应该发生。自德尔福2009年以来,因此。对于您所描述的内容,可能的解释是您已经在某个外部工具中创建了表(该工具无法保存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);

并不是说我不想阻止您,而是我建议您对表使用ASCII名称。我打赌它有一个设置,我可以搜索,但仍然…事实上,我的直觉是你在表名中有一个特殊的字符。在内部,可能有人将其解释为
S?tning
。谢谢维多利亚和杰瑞!你是对的。我将表名从Sætning更改为Saetning,现在没有“no-soke table”错误。相反,我得到了一个“[FireDAC][phys][SQLite]错误:数据库被锁定”-这肯定是一个耗时的爱好…:-)我打赌您只是忘记在设计时断开连接(
Connected
连接对象的属性)。但我最初的评论只是一个建议。我不是说这是不可能的。FireDAC应该完全支持Unicode Delphi中的Unicode表名。尽管我改为ANSI并重命名了我的表(这解决了问题),但我认为“没有这样的表”问题是由Unicode问题产生的,正如您所说的。在my FDConnection中,字符串未设置为Unicode(默认情况下,您必须选择)。不,默认情况下,FireDAC为您选择最好的。其他问题(“数据库锁定”)是由于my FDConnection在Delphi IDE中仍然处于活动状态而正确引起的。-当你处于“陡峭的学习曲线”的中间时,有太多的未知因素…谢谢你的回答!!!不客气!好的,我现在希望您能够使用一个新项目进行快速测试,该项目由连接(名为
FDConnection
)和查询对象(名为
FDQuery
)组成,并使用默认设置,运行我发布的代码,以验证Unicode在Delphi 10.1中是否适用。当然,像我这样命名表和字段是可怕的,但我想要一个证明。如果这是可行的,你可以考虑,当它提出了<代码> EasService失败异常时,Unicode有问题。谢谢你的测试!
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);