关注DocWiki后,我将SQLite数据库部署到资产\ internal \
并使用以下代码:
SQLConnection1.Params.Values['Database'] :=
TPath.Combine(TPath.GetDocumentsPath, 'myDB.db');
但是,当我尝试访问其中一个表时,它不存在。
SQLite的部署/访问的正确设置是什么?
答案 0 :(得分:4)
我刚刚将一个SQLite数据库部署到一个Android应用程序。这就是我所学到的。
使用应用程序部署数据库的Instad,我在connect上创建它,然后创建表(如果它们不存在)。
我还使用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组件。
答案 1 :(得分: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
答案 2 :(得分:1)
我发现当您更改数据库并部署这些更改时,更改有时不会对设备生效(仅在ANDROID上进行测试)。从设备本身卸载应用程序并执行“全新”部署/安装将确保您使用应用程序部署更改的SQLITE数据库。
** i.m.o - 你应该只为测试/调试这样做。我完全同意@FLDelphi的帖子,并且一旦完成***就会在我的APP中实现他的方法
答案 3 :(得分:1)
正确的部署集(所有配置 - Android平台):
Local Name: myDB.db
Remote Path: .\assets\internal\
Remote Filename: myDB.db
事件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;
答案 4 :(得分:0)
我使用过FireDac。
FDConnection1.Params.Values['Database'] := '$(DOC)/QuickQuote.s3db';
我在FDConnection1BeforeConnect上使用它。
所有这些都要确保在Deploment中包含数据库文件。
我遵循了这个TUT Click Here