移动教程:使用dbExpress和SQLite(iOS和Android)
目录
注意: 本教程中介绍的dbExpress正在 已弃用 这意味着dbExpress将在即将发布的版本中从RAD Studio中删除。 我们建议您使用较新的数据库解决方案,而不是dbExpress, 消防DAC ,在类似的教程中进行了描述,如下所示: 移动教程:使用FireDAC和SQLite(iOS和Android) .
使用dbExpress连接到数据库
对于移动平台,dbExpress支持 InterBase目标 以及 数据库 。这些数据库产品可以在iOS和Android设备上运行。
对于其他数据库(如Oracle),您至少需要一个客户端库。 在Windows平台上,客户端库作为DLL提供以进行连接。因此,您需要使用中间层技术(如DataSnap)开发应用程序,以便从移动设备连接到这些数据库产品。
在Windows环境中创建数据库以用于开发
在数据浏览器中创建数据库
去 数据资源管理器 ,右键单击 数据库 节点并选择 添加新连接 : 定义连接的名称,例如 购物清单 . 指定数据库文件的位置: 单击 高级 按钮并打开 高级属性 对话框。 更改 故障IfMissing 属性到 False(错误) 然后单击“确定”关闭 高级属性 对话框: 回到 修改连接 对话框中,单击 测试连接 按钮。 使用此操作,如果不存在文件,则会创建新的数据库文件: 注: 确保 sqlite3.dll 存在于您的开发系统中。 如果此文件不存在,请从下载sqlite3.dll http://www.sqlite.org/download.html 到系统路径(例如 C: \Windows\SysWOW64 64位Windows)。
在DataExplorer上创建表
上 数据资源管理器 ,双击 购物清单 节点,在SQLite部分下单击鼠标右键 桌子 ,然后选择 新建表格 从上下文菜单中选择。 设置 数据类型 对于 商店商品 列到 文本 . 单击 保存 按钮并指定表名(例如, 项目 .)
设计和设置用户界面
使用创建多设备应用程序 文件>新建>多设备应用程序-Delphi 或 文件>新建>多设备应用程序-C++Builder . 删除一个 T工具栏 在表格上。 删除一个 按钮控件 并在 对象检查器 : 删除一个 按钮控件 并在 对象检查器 : 删除一个 T标签 并在 对象检查器 : 删除一个 列表框组件 组件,并在 对象检查器 : 设置 排列 属性到 顾客 ,以便ListBox组件使用整个表单。
连接到数据
选择 项目 上的表 数据资源管理器 并将其拖动到窗体设计器。 选择 购物英语连接 组件,然后更改 有联系的 属性到 真的 . 选择 项目表 组件,然后更改 活动 属性到 真的 . 选择 查看>LiveBindings Designer 和 LiveBindings设计器 打开。 选择 商店商品 在中 项目表 组件并拖动 商店商品 到 项目。 文本 属于 列表框1 .
创建事件处理程序,以便在用户从列表中选择项目时显示删除按钮
选择 列表框1 并为 OnItemClick(单击项目) 事件。
程序 T形1 . 列表框1项目单击 ( 常数 发件人 : T自定义列表框 ;
常数 项目 : T列表框项目 ) ;
开始
如果 列表框1 . 挑选出来的 <> 无 然后
按钮删除 . 可见 := 真的
其他的
按钮删除 . 可见 := False(错误) ;
结束 ;
空隙 __快速呼叫 T形1 :: 列表框1项目单击 ( 常数 T自定义列表框 * 发件人 , 常数 T列表框项目 * 项目 )
{
如果 ( 列表框1 -> 挑选出来的 )
按钮删除 -> 可见 = 真的 ;
其他的
按钮删除 -> 可见 = False(错误) ;
}
为“添加”按钮创建事件处理程序以向列表中添加条目
删除一个 TSQLQuery(TSQL查询) 组件添加到表单中。 在中设置以下属性 对象检查器 : 在表单设计器中,双击 按钮添加 组件。 将以下代码添加到此事件处理程序:
程序 T形1 . 按钮添加单击 ( 发件人 : TObject(目标) ) ;
开始
TDialogServices异步 . InputQuery(输入查询) ( '输入新项目' , [ “名称” ] , [ '' ] , 自我 . OnInputQuery_Close(输入查询关闭) ) ;
结束 ;
程序 T形1 . OnInputQuery_Close(输入查询关闭) ( 常数 A结果 : TModal结果 ; 常数 A值 : 阵列 属于 一串 ) ;
无功功率,无功功率
任务名称 : 一串 ;
开始
任务名称 := 一串 . 清空 ;
如果 A结果 <> mrOk先生 然后
出口 ;
任务名称 := A值 [ 0 ] ;
尝试
如果 不 ( 任务名称 . 修剪 = 一串 . 清空 ) 然后
开始
SQLQuery插入 . 参数按名称 ( “商店商品” ) . 作为字符串 := 任务名称 ;
SQLQuery插入 . 执行SQL () ;
项目表 . 刷新 ;
将填充控件链接到字段1 . 绑定列表 . FillList(填充列表) ;
如果 列表框1 . 挑选出来的 <> 无 然后
按钮删除 . 可见 := 真的
其他的
按钮删除 . 可见 := False(错误) ;
结束 ;
除了
在 前任 : 例外 做
显示消息 ( '错误:' + 前任 . 消息 ) ;
结束 ;
结束 ;
私有的
程序 OnInputQuery_Close(输入查询关闭) ( 常数 A结果 : TModal结果 ; 常数 A值 : 阵列 属于 一串 ) ;
类型定义 空隙 __快速呼叫 ( __闭合 * TInput关闭查询过程事件 )( 常数 系统 :: Ui类型 :: TModal结果 A结果 ,
系统 :: Unicode字符串 常数 * A值 , 常数 整数 A值_高 );
班 输入查询方法 : 公众的 TCpp接口对象 < TInput关闭查询过程 >
{
私有的 :
TInput关闭查询过程事件 事件 ;
公众的 :
输入查询方法 ( TInput关闭查询过程事件 _事件 ) {
事件 = _事件 ;
}
空隙 __快速呼叫 援引 ( 常数 系统 :: Ui类型 :: TModal结果 A结果 ,
系统 :: Unicode字符串 常数 * A值 , 常数 整数 A值_高 ) {
事件 ( A结果 , A值 , A值_高 );
}
};
空隙 __快速呼叫 OnInputQuery_Close(输入查询关闭) ( 常数 系统 :: Ui类型 :: TModal结果 A结果 ,
系统 :: Unicode字符串 常数 * A值 , 常数 整数 A值_高 );
空隙 __快速呼叫 T形1 :: 按钮添加单击 ( TObject(目标) * 发件人 ) {
字符串 标题 = “标题” ;
字符串 提示 [ 1 ];
提示 [ 0 ] = “提示0” ;
字符串 默认值 [ 1 ];
默认值 [ 0 ] = “默认值0” ;
_di_输入关闭查询过程 遇见 = 新的 输入查询方法 ( & OnInputQuery_Close(输入查询关闭) );
TDialogServices异步 :: InputQuery(输入查询) (
“标题” , 提示 , 0 , 默认值 , 0 , ( TInput关闭查询过程 * ) 遇见 );
}
空隙 __快速呼叫 T形1 :: OnInputQuery_Close(输入查询关闭) ( 常数 系统 :: Ui类型 :: TModal结果 A结果 ,
系统 :: Unicode字符串 常数 * A值 , 常数 整数 A值_高 ) {
字符串 任务名称 ;
任务名称 = "" ;
如果 ( A结果 != mrOk先生 )
返回 ;
任务名称 = A值 [ 0 ];
尝试 {
如果 ( 任务名称 . 修剪 () != "" )
SQLQuery插入 -> 参数按名称 ( “商店” ) -> 作为字符串 = 任务名称 ;
SQLQuery插入 -> 执行SQL ();
项目表 -> 刷新 ();
将填充控件链接到字段1 -> 绑定列表 -> FillList(填充列表) ();
如果 ( 列表框1 -> 挑选出来的 != 无效的 )
按钮删除 -> 可见 = 真的 ;
其他的
按钮删除 -> 可见 = False(错误) ;
}
抓住 ( 例外 & 前任 ) {
显示消息 ( “错误:” + 前任 . 消息 );
}
}
为删除按钮创建事件处理程序以从列表中删除条目
删除一个 TSQLQuery(TSQL查询) 组件添加到表单中。 在中设置以下属性 对象检查器 : 在结构视图中,选择 按钮删除 组件。 将以下代码添加到此事件处理程序。
程序 T形1 . 按钮删除单击 ( 发件人 : TObject(目标) ) ;
无功功率,无功功率
任务名称 : 字符串 ;
开始
任务名称 := 列表框1 . 挑选出来的 . 文本 ;
尝试
SQLQuery删除 . 参数按名称 ( “商店商品” ) . 作为字符串 := 任务名称 ;
SQLQuery删除 . 执行SQL () ;
项目表 . 刷新 ;
将填充控件链接到字段1 . 绑定列表 . FillList(填充列表) ;
如果 列表框1 . 挑选出来的 <> 无 然后
按钮删除 . 可见 := 真的
其他的
按钮删除 . 可见 := False(错误) ;
除了
在 e(电子) : 例外 做
开始
SHow消息 ( e(电子) . 消息 ) ;
结束 ;
结束 ;
结束 ;
空隙 __快速呼叫 T形1 :: 按钮删除单击 ( TObject(目标) * 发件人 ) {
字符串 任务名称 = 列表框1 -> 挑选出来的 -> 文本 ;
尝试 {
SQLQuery删除 -> 参数按名称 ( “商店” ) -> 作为字符串 = 任务名称 ;
SQLQuery删除 -> 执行SQL ();
项目表 -> 刷新 ();
将填充控件链接到字段1 -> 绑定列表 -> FillList(填充列表) ();
如果 ( 列表框1 -> 挑选出来的 )
按钮删除 -> 可见 = 真的 ;
其他的
按钮删除 -> 可见 = False(错误) ;
}
抓住 ( 例外 & e(电子) ) {
显示消息 ( e(电子) . 消息 );
}
}
为移动平台设置数据库部署
将数据库部署到移动设备。 在 文件 文件夹(适用于iOS设备)或 内部的 存储(适用于Android设备)。
在部署管理器中添加和配置数据库文件
可以使用以下两种方法之一将数据库添加到项目中: 右键单击中的项目名称 项目经理 并选择 添加… 从上下文菜单(或 项目>添加到项目 )以显示 添加到项目 对话框。 导航到数据库位置 C: \Users\Public\Documents\Embarcadero\Studio\23.0\Samples\Data ,选择数据库 购物清单.s3db 然后单击 正常开放 . 导航到数据库位置 C: \Users\Public\Documents\Embarcadero\Studio\23.0\Samples\Data 并拖放数据库 购物清单.s3db 项目经理中的项目。 单击 是的 以确认是否要将文件添加到项目中。
添加数据库文件后 特色文件 窗口显示,单击 取消 关闭它。 打开 部署管理器 通过选择 项目>部署 . 选择 调试配置-iOS设备-64位平台 或 调试配置-Android平台 从部署管理器顶部的目标平台下拉列表中,查看数据库 购物清单.s3db 已添加到平台中。 看看如何 远程路径 属于 购物清单.s3db 已为iOS和Android平台设置: 远程路径 在iOS设备平台上: 启动\文档\
修改代码以连接到移动平台上的本地数据库文件
指定SQLite数据库在移动设备上的位置
程序 T形1 . 连接前的购物链接 ( 发件人 : TObject(目标) ) ;
开始
{$IF定义(iOS)或定义(ANDROID)}
购物英语连接 . 参数 . 值 [ '支持的列元数据' ] := “假” ;
购物英语连接 . 参数 . 值 [ '数据库' ] :=
T路径 . 联合收割机 ( T路径 . 获取文档路径 , '购物清单.s3db' ) ;
{$ENDIF}
结束 ;
空隙 __快速呼叫 T形1 :: 连接前的购物链接 ( TObject(目标) * 发件人 ) {
#如果定义了(_PLAT_IOS)||定义了(-PLAT_ANDROID)
购物英语连接 -> 参数 -> 值 [ “支持的列元数据” ] = “错误” ;
购物英语连接 -> 参数 -> 值 [ “数据库” ] = 系统 :: Ioutils公司 :: T路径 :: 联合收割机 ( 系统 :: Ioutils公司 :: T路径 :: 获取文档路径 (), “购物清单.s3db” );
#结尾
}
如果不存在表,则创建表
在表单设计器中,选择 购物英语连接 组件。 在 对象检查器 ,双击 AfterConnect(连接后) 事件。 将以下代码添加到此事件处理程序:
程序 T形1 . 连接后购物链接 ( 发件人 : TObject(目标) ) ;
开始
购物英语连接 . 执行直接 ( '如果不存在项,则创建表(ShopItem文本不为NULL)' ) ;
结束 ;
空隙 __快速呼叫 T形1 :: 连接后购物链接 ( TObject(目标) * 发件人 ){
购物英语连接 -> 执行直接 ( “如果不存在项,则创建表格(ShopItem文本不为空)” );
}
在移动设备上运行应用程序
在 “项目”窗口 ,选择您的目标平台。 选择以下命令之一: -
运行>运行 -
运行>不调试运行
-
注: 如果在运行应用程序时遇到问题,请按照中给出的步骤进行操作 故障排除 .