移动教程:使用InterBase ToGo和FireDAC(iOS和Android)
目录
提示: 要学习本教程,您需要一个 许可证 对于 IBToGo公司 或 IB岩 :
如果您购买了以下RAD Studio版本之一,您将在电子邮件中收到IBLite无限开发和部署许可证的密钥:
雅典RAD工作室 专业或以上 所有版本 Delphi Athens Professional或更高版本,带手机 如果您是试用用户,那么您的安装包括IBToGo的试用许可证。 您可以在部署步骤中选择测试许可证,在iOS和Android上测试InterBase,如本教程所述。 试用许可证随试用产品一起安装,位于
C: \Users\Public\Documents\Embarcadero\InterBase\redist\InterBase2020 . 按照中的步骤操作 IBSite和IBToGo部署许可 以获取并安装许可证文件。
注: 在Android设备上,InterBase ToGo应用程序需要特定的 权限 待设置,具体为: 读取外部存储器 (数据库放在外部内存中) 写入外部存储器 (数据库放在外部内存中) 互联网 (您需要连接到远程服务器)
注: 您可以使用FireDAC、dbExpress和Interbase Express(IBX)组件来构建 Interbase ToGo 应用。 有关Interbase Express组件在Delphi应用程序中使用的详细讨论,请阅读 InterBase Express入门 文章。 对于本教程,我们将连接到 Interbase ToGo 使用FireDAC。
使用FireDAC连接到数据库
对于移动平台, 消防DAC 支架 InterBase目标 以及 数据库 。这些数据库产品可以在iOS和Android设备上运行。
对于其他数据库(如Oracle),您至少需要一个客户端库。 在Windows平台上,客户端库作为DLL提供以进行连接。因此,您需要使用中间层技术(如DataSnap)开发应用程序,以便从移动设备连接到这些数据库产品。
设计和设置用户界面
创建 HD多设备应用程序 ,选择以下选项之一: 文件>新建>多设备应用程序-Delphi>空白应用程序 文件>新建>多设备应用程序-C++Builder>空白应用程序
删除一个 T列表视图 组件。 在 对象检查器 ,设置ListView的以下属性: 添加 T面板 组件,并在对象检查器中设置以下属性: 设置 排列 属性 T面板 组件到 顶部 .
添加 T标签 组件,并在对象检查器中设置以下属性:
连接到数据
上 工具选项板 ,双击 TFD连接 组件。 右键单击 TFD连接 组件并选择 连接编辑器 . 在FireDAC连接编辑器中,设置 TFD连接 : 设置 驱动程序ID 属性到 IB公司 . 设置 数据库 参数设置为: C: \Users\Public\Documents\Embarcadero\Studio\23.0\Samples\Data\dbdemos.gdb (数据库的位置) 然后单击 正常开放 在“文件打开”对话框中。
设置 用户名(_N) 参数到 系统数据库 . 设置 密码 参数到 法宝 . 设置 协议 参数到 TCPIP公司 . 单击 测试 按钮测试连接。 单击 好 啊 关闭连接编辑器。
在 对象检查器 ,设置以下属性 TFD连接 : 添加 TFD查询 组件添加到表单中。 右键单击 TFD查询 组件并选择 查询编辑器 . 在 对象检查器 ,设置 活动 的属性 TFD查询 组件到 真的 . 打开 LiveBindings设计器 并按如下方式连接数据和用户界面: 单击 公用名(_N) 在FDQuery1中,将鼠标光标拖动到 项目。 文本 在ListView1中。 在这一点上, TBindSourceDB(绑定源数据库) 和 TBindingsList(绑定列表) 组件已添加到表单中。
单击 物种_名称 在BindSourceDB1中,将鼠标光标拖动到 项目。 详细信息 在ListView1中。
添加 TFD为什么IBDriverLink 组件添加到表单中。 添加 TFDGUIxWaitCursor(TFDGUIxWaitCursor) 组件添加到表单中。
将应用程序部署到Mobile
将数据库部署到移动设备。 在 文件 文件夹(适用于iOS设备)或 内部的 存储(适用于Android设备)。
将InterBase ToGo必需的文件和数据库文件部署到Mobile
Interbase ToGo所需文件(许可文件和其他配置文件) 数据库文件(dbdemos.gdb)
可以使用以下两种方法之一将数据库添加到项目中: 右键单击中的项目名称 项目经理 并选择 添加… 从上下文菜单(或 项目>添加到项目 )以显示 添加到项目 对话框。 导航到数据库位置 C: \Users\Public\Documents\Embarcadero\Studio\23.0\Samples\Data ,选择数据库 数据库演示程序.gdb 然后单击 正常开放 . 导航到数据库位置 C: \Users\Public\Documents\Embarcadero\Studio\23.0\Samples\Data 并拖放数据库 数据库演示程序.gdb 项目经理中的项目。 单击 是的 以确认是否要将文件添加到项目中。
添加数据库文件后 特色文件 窗口显示。 选择 InterBase目标 在中 要素文件 ,然后单击 好 啊 关闭“特色文件”对话框。 在节点下 InterBase目标 您需要选择在设备上部署应用程序时要使用的许可证。 这个 提示 本教程开头介绍了如何激活InterBase许可证。 可用许可文件的建议名称列在 “特色文件”对话框 ,在以下名称模式下: reg_*.txt格式 . 如下图所示 reg_ibtogo.txt格式 本教程选择了许可文件。
您可能已从Embarcadero收到IBToGo或IBSite的许可文件,其模式为 reg_nnnnnnn.txt ,其中 nnnnnnn 是生成的数字: 如果您已保存该文件 reg_ibtogo.txt格式 或 注册表.txt 位于以下位置(例如, C: \Users\Public\Documents\Embarcadero\InterBase\redist\InterBase2020 ),您可以只选择所需的许可证。 如果已使用原始名称保存文件,请选择 添加文件 (如下一步所示),并将许可证文件包含在需要与应用程序一起部署的文件列表中。
打开 部署管理器 通过选择 项目>部署 . 选择 调试配置-iOS设备-64位平台 或 调试配置-Android平台 从部署管理器顶部的目标平台下拉列表中,查看数据库 数据库演示程序.gdb 已添加到平台中。 看看如何 远程路径 属于 数据库演示程序.gdb 已为iOS和Android平台设置: 远程路径 在iOS设备平台上: 启动\文档\
远程路径 在Android平台上: 资产\内部\
在 表单设计器 ,选择 TFD连接 组件。 在 对象检查器 ,转到“事件”选项卡,然后双击 连接之前 事件。 实施 事件处理程序 对于 连接之前 事件,添加以下代码: 对于 德尔福:
程序 T形1 . FDConnection1连接前 ( 发件人 : TObject(目标) ) ; 开始 {$IF定义(iOS)或定义(ANDROID)} FD连接1 . 参数 . 值 [ “协议” ] := “本地” ; FD连接1 . 参数 . 值 [ '数据库' ] := T路径 . 联合收割机 ( T路径 . 获取文档路径 , 'dbdemos.gdb' ) ; {$ENDIF} 结束 ; 这个 T路径 记录在中声明 系统。 IO实用程序 单位,所以您需要添加 系统。 IO实用程序 在uses子句中,如下所示: 实施 {$R*.fmx} {$R*.NmXhdpiPh.fmx安卓} {$R*.iPhone4in.fmx IOS} 使用 系统 . IO实用程序 ; 程序 T形1 . FDConnection1连接前 ( 发件人 : TObject(目标) ) ; //此处显示以前的代码 对于 C++语言:
空隙 __快速呼叫 T形1 :: SQLConnection1连接前 ( TObject(目标) * 发件人 ) { #如果定义了(_PLAT_IOS)||定义了(-PLAT_ANDROID) FD连接1 -> 参数 -> 值 [ “协议” ] = “本地” ; FD连接1 -> 参数 -> 值 [ “数据库” ] = 系统 :: Ioutils公司 :: T路径 :: 联合收割机 ( 系统 :: Ioutils公司 :: T路径 :: 获取文档路径 (), “dbdemos.gdb” ); #结尾 } 您需要添加 #包括<系统。 IOUtils.hpp> 在单元(.cpp文件)中。
在移动设备上运行应用程序
故障排除
InterBase问题
异常处理问题
选择 FD连接1 组件,并更改 有联系的 属性到 False(错误) . 将按钮拖到表单上,然后创建以下事件处理程序以手动连接到数据库: 德尔福: 程序 T形1 . 按钮1单击 ( 发件人 : TObject(目标) ) ; 开始 尝试 FD连接1 . 有联系的 := 真的 ; FD查询1 . 活动 := 真的 ; 除了 在 e(电子) : 例外 做 开始 显示消息 ( e(电子) . 消息 ) ; 结束 ; 结束 ; 结束 ; C++语言: 空隙 __快速呼叫 T形1 :: 按钮1单击 ( TObject(目标) * 发件人 ) { 尝试 { FD连接1 -> 有联系的 = 真的 ; FD查询1 -> 活动 = 真的 ; } 抓住 ( 例外 & e(电子) ) { 显示消息 ( e(电子) . 消息 ); } } 检查 错误消息。