4

遵循DocWiki 后,我将我的 SQLite DB 部署到 assets\internal\

并使用以下代码:

SQLConnection1.Params.Values['Database'] := 
TPath.Combine(TPath.GetDocumentsPath, 'myDB.db');

但是,当我尝试访问其中一个表时,它不存在。

SQLite 的部署/访问的正确设置是什么?

4

5 回答 5

4

我刚刚完成了将 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 组件。

于 2013-09-18T22:57:53.677 回答
2

正确的部署集(所有配置 - 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;
于 2016-06-03T09:54:57.203 回答
1

我发现当您进行数据库更改并部署这些更改时,这些更改有时不会在设备上生效(仅在 ANDROID 上测试过)。从设备本身卸载应用程序并执行“全新”部署/安装将确保您更改的 SQLITE DB 与应用程序一起部署。

** imo - 您应该只在测试/调试时这样做。我完全同意@FLDelphi 的帖子,一旦完成,我将在我的应用程序中实施他的方法***

于 2014-11-10T18:19:45.110 回答
1

添加使用“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

于 2014-01-18T11:34:39.713 回答
0

我用过 FireDac 。

FDConnection1.Params.Values['Database'] := '$(DOC)/QuickQuote.s3db';

我在 FDConnection1BeforeConnect 上使用它。

所以一定要在部署中包含数据库文件。

我跟着这个 TUT点击这里

于 2013-09-20T01:14:44.373 回答