android - TFDQuery 导致 App 在 iOS 模拟器上运行失败(Delphi 10.3 Upd 3 Firemonkey)
问题描述
我对在 iOS 平台上运行的 TFDQuery 有问题,该平台有 2 个 TFDConnections 和相同的 SQLite 驱动程序。该应用程序已安装并尝试打开,但它立即关闭,没有任何错误消息。当 TFDQuery 在设计时或运行时设置为 active = true 时,就会出现错误。
我有 2 个 TFDConnections 的原因是我需要 RestAPI LocalSQL,另一个是我的嵌入式数据库(SQLite3)。
这个问题我没有在 Windows 目标平台上得到。我还没有尝试过使用Android。
这是我针对此案的 MRE。请注意,我没有在此示例中包含 RestAPI LocalSQL,因为错误仅限于 TFDConnections 和 TFDQuery。
FMX程序:
unit main_u;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error, FireDAC.UI.Intf,
FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async,
FireDAC.Phys, FireDAC.Phys.SQLite, FireDAC.Phys.SQLiteDef,
FireDAC.Stan.ExprFuncs, FireDAC.FMXUI.Wait, Data.DB, FireDAC.Comp.Client, System.IOUtils,
FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt,
FireDAC.Comp.UI, FireDAC.Comp.DataSet;
type
TForm9 = class(TForm)
con2: TFDConnection;
qry1: TFDQuery;
cur1: TFDGUIxWaitCursor;
dvr1: TFDPhysSQLiteDriverLink;
con1: TFDConnection;
procedure con2BeforeConnect(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form9: TForm9;
implementation
{$R *.fmx}
procedure TForm9.con2BeforeConnect(Sender: TObject);
begin
{$IF DEFINED(iOS) or DEFINED(ANDROID)}
con2.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'smartcart.s3db');
{$ELSE}
con2.Params.Values['Database'] := 'D:\My Project Files\5. my_projects_aws-rest\project_x_v0\application\client\database\smartcart.s3db';
{$ENDIF}
end;
end.
FMX 文件:
object Form9: TForm9
Left = 0
Top = 0
Caption = 'Form9'
ClientHeight = 480
ClientWidth = 289
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
DesignerMasterStyle = 0
object con2: TFDConnection
Params.Strings = (
'Database=D:\My Project Files\5. my_projects_aws-rest\project_x_v' +
'0\application\client\database\smartcart.sdb3'
'LockingMode=Normal'
'DriverID=SQLite')
Connected = True
LoginPrompt = False
BeforeConnect = con2BeforeConnect
Left = 128
Top = 168
end
object qry1: TFDQuery
Active = True
Connection = con2
SQL.Strings = (
'SELECT * FROM lists')
Left = 128
Top = 232
end
object cur1: TFDGUIxWaitCursor
Provider = 'FMX'
Left = 80
Top = 32
end
object dvr1: TFDPhysSQLiteDriverLink
Left = 24
Top = 32
end
object con1: TFDConnection
Params.Strings = (
'DriverID=SQLite')
Connected = True
LoginPrompt = False
Left = 128
Top = 112
end
end
我做了一些研究,找不到任何与我的案例相关的解决方案。我可以说 TFDQuery 对于 2 个 TFDConnections 存在一些错误或问题,并且在 iOS 平台上同时运行相同的驱动程序。
否则,我可能在这里错过了一些东西。
解决方案
推荐阅读
- c++ - 如何让类公共数据成员只能被类方法修改?
- mysql - 未在 MySQL、PostgreSQL 和 SQLite 中创建的 Sequelize 关联
- javascript - 如何编写会话 cookie 以在移动到另一个页面时保留会话
- python - Altair:按功能中指定的值旋转文本
- c - 如何在c中计算数组元素到整数的模乘法?
- c# - HttpClient SendAsync 可以不阻塞 GUI 线程吗?
- wxpython - 如何在图像上绘制矩形框;wxPython?
- matlab - 线性索引的下标
- javascript - 编辑脚本以应用于所有工作表
- linux - 如何在没有 root 的情况下更新 libstdc++(未找到版本“GLIBCXX_3.4.20”)?