遵循DocWiki 后,我将我的 SQLite DB 部署到 assets\internal\
并使用以下代码:
SQLConnection1.Params.Values['Database'] :=
TPath.Combine(TPath.GetDocumentsPath, 'myDB.db');
但是,当我尝试访问其中一个表时,它不存在。
SQLite 的部署/访问的正确设置是什么?
遵循DocWiki 后,我将我的 SQLite DB 部署到 assets\internal\
并使用以下代码:
SQLConnection1.Params.Values['Database'] :=
TPath.Combine(TPath.GetDocumentsPath, 'myDB.db');
但是,当我尝试访问其中一个表时,它不存在。
SQLite 的部署/访问的正确设置是什么?
我刚刚完成了将 SQLite 数据库部署到 Android 应用程序的过程。这是我学到的。
除了使用应用程序部署我的数据库之外,我在连接时创建它,然后如果它们不存在则创建表。
我还使用 TFDConnection 组件而不是 TSQLConnection 组件。
所以在 TFDConnection BeforeConnect 上:
{$IF DEFINED(IOS) or DEFINED(ANDROID)}
FDConnection1.Params.Values['Database'] :=
TPath.GetDocumentsPath + PathDelim + 'MyDatabase.s3db';
{$ENDIF}
在 TFDConnection AfterConnect 上:
FDConnection1.ExecSQL('CREATE TABLE IF NOT EXISTS MyTable (myField1 TEXT NOT NULL)');
我刚刚在模拟器和我的 Droid X 上测试了这个方法。
还要确保包含 TFDGUIxWaitCursor 和 TFDPhysSQLiteDriverLink 组件。
正确的部署集(所有配置 - Android 平台):
Local Name: myDB.db
Remote Path: .\assets\internal\
Remote Filename: myDB.db
Event BeforeConnection 必须包含以下代码:
procedure TDM.conSQLiteBeforeConnect(Sender: TObject);
var
dbPath: string;
begin
{$IF DEFINED(iOS) or DEFINED(ANDROID)}
dbPath := TPath.Combine(TPath.GetDocumentsPath, 'myDB.db');
{$ENDIF}
FDConnection1.Params.Values['Database'] := dbPath;
end;
我发现当您进行数据库更改并部署这些更改时,这些更改有时不会在设备上生效(仅在 ANDROID 上测试过)。从设备本身卸载应用程序并执行“全新”部署/安装将确保您更改的 SQLITE DB 与应用程序一起部署。
** imo - 您应该只在测试/调试时这样做。我完全同意@FLDelphi 的帖子,一旦完成,我将在我的应用程序中实施他的方法***
添加使用“System.IOUtils”
在连接按钮中:
var
DbYol : string;
begin
DbYol := System.IOUtils.TPath.GetDocumentsPath + PathDelim + 'SqliteDers.s3db';
With FDConnection1 do
begin
LoginPrompt := False;
Params.Clear;
Params.Values['Database'] := DbYol;
Params.Values['DriverID'] := 'SQLite';
Params.Values['CharacterSet'] := 'utf8';
Connected := True;
// Create new database if no exist
end;
With FDQuery1 do
begin
Active := False;
Connection := FDConnection1;
SQL.Clear;
SQL.Add( 'CREATE TABLE IF NOT EXISTS DERS (' );
SQL.Add( ' ADI nvarchar(10)');
SQL.Add( ' );');
ExecSQL;
göre ayarlıyoruz
SQL.Clear;
SQL.Add( 'SELECT');
SQL.Add( ' ADI' );
SQL.Add( ' FROM DERS' );
Active := True;
end;
这是一个很好的例子。
http://www.brsatalay.com/xe5-mobil-uygulamada-sqlite-veritabani-kullanimi
我用过 FireDac 。
FDConnection1.Params.Values['Database'] := '$(DOC)/QuickQuote.s3db';
我在 FDConnection1BeforeConnect 上使用它。
所以一定要在部署中包含数据库文件。
我跟着这个 TUT点击这里