我正在使用 Delphi 12 创建一个 Multi_Device 应用程序。我有一个带有表
Profile
的 SQLite 数据库。我创建了两个表格来看看是否能找到问题。
我添加了一个带有 FDConnection 和 FDTable 的数据模块,其中连接设置为 FDConnection,表名称设置为数据库中的表
Profile
,FDConnection 设置为我的数据库。一切正常,直到我在Android上调试,发现只传输了数据库,但没有传输表。
我直接从 SQLite 的 DB Browser 复制了
CREATE TABLE
SQL。该表已创建,但是当我执行 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 和没有索引的新表,我不再收到错误。 我仍然不知道为什么会出现错误。
抱歉,我的旧 Delphi 没有错误复制按钮。 由于我直接从 SQLite DB 浏览器应用程序复制了 sql 字符串并且它在那里工作,所以我认为这并不重要。我将在没有空格的情况下再试一次,但我看不出如何使 Sql 字符串不带双引号。当我在 Android 中创建 SQLite 字符串来创建表时,它们也有双引号。