我从 Delphi 第 2 版开始就一直使用 Delphi,但这个问题让我头发花白。 我正在使用 Delphi 12 创建一个多设备应用程序。 我有一个 SQLite 数据库,其中有一个名为 Profile 的表。我创建了一个只有两个表单的程序来看看是否能找到问题,这是我第一次使用FireDac,但我已经使用SQLite制作了很多Android应用程序。 我创建了一个多设备应用程序,并添加了一个带有 FDConnection 和 FDTable 的数据模块,其中连接设置为 FDConnection,表名称设置为数据库中的表 Profile,FDConnection 设置为我的数据库。 一切都运行良好,直到我尝试在 Android 上调试,发现只传输了数据库,但没有传输表。 然后,我添加了一条 SQL 来创建表,我直接从 SQLite 应用程序的数据库浏览器复制了“创建表”。表被创建,但是当它执行 FDTable1.Open 时,我收到此错误:
我没有名为 A.Mobile 的列,并且它创建的表可以在 SQLite 应用程序的数据库浏览器中填充。
这是代码。
procedure TDataModule2.FDConnection1AfterConnect(Sender: TObject);
begin
if FDConnection1.DataSetCount = 0 then
begin
FDConnection1.ExecSQL('CREATE TABLE IF NOT EXISTS "Profile" ( "Firstname" TEXT NOT NULL,"Lastname" TEXT NOT NULL, " Street1 " TEXT NOT NULL, " Street2 " TEXT, " City " TEXT NOT NULL, " Apartment " TEXT, " Building " TEXT, " State " TEXT NOT NULL, " Zip " TEXT NOT NULL, " Phone " TEXT," Email " TEXT, " Mobile " TEXT NOT NULL UNIQUE, " Refby " TEXT, " Starch " TEXT, " RecEmail " INTEGER DEFAULT 1," RecSMS " INTEGER DEFAULT 1, " Verified " INTEGER DEFAULT 0," RefCode " TEXT, " CustomerID " INTEGER,PRIMARY KEY(" Mobile "))');
FDTable1.Open;
FDTable1.Append;
end
else
begin
FDTable1.Open;
end;
end;
procedure TDataModule2.FDConnection1BeforeConnect(Sender: TObject);
var
dbPath: String;
begin
dbPath := 'C:\ComcaMobileDelphi\database\ComcaMApp.db';
{$IF DEFINED(IOS) or DEFINED(ANDROID)}
dbPath := TPath.GetDocumentsPath + PathDelim + 'ComcaMApp.db';
{$ENDIF}
FDConnection1.Params.Values['Database'] := dbPath;
end;
我创建了一个没有 NOT NULL、没有 UNIQUE 和没有索引的新表,我不再收到错误。 我仍然不知道为什么会出现错误。