首页 > 解决方案 > 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 平台上同时运行相同的驱动程序。

否则,我可能在这里错过了一些东西。

标签: androidiosdelphifiremonkeyfiredac

解决方案


推荐阅读