DA13 – 在 Data Abstract 中使用 NexusDB 数据库
作者 : Lauchlan Mackinnon
Email: LMackinnon (at) ozemail (dot) com (dot) au
RemObjects 提示 : 虽然我们认为本文内容是正确的 , 但是我们不对此作任何的保证 . 我们很感谢 Lauchlan 创建了发布在此的文章 .
提示 2: 一些图片被缩小了 , 但是你可以点击它们放大查看 .
导论
当前两个热门的 Delphi 技术是 NexuxDB 数据库和 RemObjects Data Abstract N- 层分布式应用开发架构 . (Nexus DB 是一款适合 Delphi 、 C++Builder 开发者的超高速,拥有客户端及服务器端的数据库引擎。可内嵌于桌面应用程序,甚至能够成为你主要的数据库服务器。 Nexus DB 代表了新一代的数据库系统 ). 然而我们如何同时使用它们 ? 本文回答这个问题 . 首先我们考虑如何安装 NexusDB 驱动并传入到 Data Abstract, 然后我们将基于一个 NexusDB 服务器创建一个应用程序 .
安装 NexusDB 驱动并传入 :
首先我们将安装 NexusDB 驱动并传入 . 这里有两种情形 : 或者你直接从 Nexus 获取 NexusDB 或者从 RemObjects 购买 NexusDB 驱动 . 因为稍后将为 NexusDB 驱动包提供文档 , 本文将集中于在 RemObjects Data Abstract 下安装完全商业化的 NexusDB. 安装 NexusDB 驱动的步骤如下 :
- 从NexusDB bonus目录C:/Program Files/NexusDB1/Bonus/RemObjects/拷贝DANexusDBDrv.dad文件到RemObjects Data Abstract BIN 目录:C:/Program Files/RemObjects Software/Data Abstract/Bin/
- 打开组件报:
C:/Program Files/NexusDB1/Bonus/RemObjects/BuildPackagesAndDriver_D6.bpg
并安装其中的两个包:
DataAbstract_NexusDBDriver_D6.dpk (drivers)
RemObjects_NexusDB_D6.dpk (transports)
提示 : The DataAbstract_NexusDBDriver_D6.dpk 包使用 NexusDB 包 . 在包的源文件中你将看到如下代码 :
requires
RemObjects_Core_D6,
DataAbstract_Core_D6,
NexusDB105st60,
NexusDB105pt60,
NexusDB105tw60,
NexusDB105tn60,
NexusDB105re60,
NexusDB1051x60,
NexusDB105sq60,
NexusDB105db60;
这些行正是为当前的 NexusDB 1.05.1 包所写 . 如你已经为其他的 NexusDB 包创建不同的 DataAbstract_NexusDBDriver_D6.dpk 版本 , 例如这个包含在 requires 中的 NexusDB103* 单元 , 那么你需要修改 required 子句引用到新版本 .
同样对于传入包 RemObjects_NexusDB_D6.dpk:
requires designide, RemObjects_Core_D6, NexusDB105ll60;
提示 2: 如果提示一个错误说你需要重新编译 DataAbstract_Core_D6.dpk 包你需要照做 .
requires
RemObjects_Core_D6,
DataAbstract_Core_D6,
NexusDB105st60,
NexusDB105pt60,
NexusDB105tw60,
NexusDB105tn60,
NexusDB105re60,
NexusDB1051x60,
NexusDB105sq60,
NexusDB105db60;
这些行正是为当前的 NexusDB 1.05.1 包所写 . 如你已经为其他的 NexusDB 包创建不同的 DataAbstract_NexusDBDriver_D6.dpk 版本 , 例如这个包含在 requires 中的 NexusDB103* 单元 , 那么你需要修改 required 子句引用到新版本 .
同样对于传入包 RemObjects_NexusDB_D6.dpk:
requires designide, RemObjects_Core_D6, NexusDB105ll60;
提示 2: 如果提示一个错误说你需要重新编译 DataAbstract_Core_D6.dpk 包你需要照做 .
作为选择 , 如果你不希望安装这个驱动 , 你可以通过在项目的 uses 子句中包含 uDANexusDBDriver.pas 将 NexusDB 驱动包含到项目中 . 这等同于向窗体中拖放一个 NexusDB 驱动组件 . 这时 ,NexusDB 驱动需要安装在 Data Abstract , 而 NexusDB 传入需要安装在 RemObjects.
使用 NexusDB 的项目
现在我们已经将 NexusDB 驱动安装在了 DA 中 , 现在使用它 ! 首先 , 点击 File | New | Other 并选择 RemObjects Data Abstract VCL Server 项目 :
项目配置如下 ,
向导生成在数据模块中使用不同驱动的服务端项目 :
在这里我们使用 NexusDB 数据库服务 , 所以我们将这个驱动控件从 Delphi 的 Data Abstract 控件面板加入到数据模块 , 并删除掉其他驱动 :
在这个项目中我们使用运行在我们系统中的 NexusDB 服务 .
首先双击 Schema 组件进入到 Schema Modeler 创建一个数据库连接 . 在连接面板中点击 '+' 按钮 :
现在你可以配置 NexusDB 连接 :
NexusDB 提供了配置连接的语法 , 登陆服务必须使用如下格式 :
- ipv4://[servername@]ip-or-dns
- np://servername[@computername]
- embedded://name
- registered://name
提示 1: 如果 servername 为空则默认为 : embedded://default
提示 2: "registered://" 允许你设置 ( 嵌入的或远程的 ) 服务引擎及数据模块中相关的组件 , 并将之注册为这个驱动 . 如果你查看驱动单元会发现 nexusdb 特殊接口允许你注册或反注册外部服务引擎 .
使用如下代码注册你的 NexusDBServer 为 "myDBServer":
(uDANexusDBDriver.GetDriverObject as
INexusDBDriver).RegisterServerEngine(NexusDataModule.ServerEngine,'myDBServer');
使用如下代码注册你的 NexusDBServer 为 "myDBServer":
(uDANexusDBDriver.GetDriverObject as
INexusDBDriver).RegisterServerEngine(NexusDataModule.ServerEngine,'myDBServer');
数据库 database 登陆 必须使用如下格式
- alias://myAlias
- path://myAliasPath
如果这个数据库设置了保护也可使用 username 和 password 登陆 . 一些连接字符串的范例 :
NexusDB?Server=ipv4://NexusDB@127.0.0.1;Database=alias://myAlias;
NexusDB?Server=embedded://nxServerEngine_embedded;Database=path://myPath;
这时 , 我们希望连接到从 SQL Server 中导入到 NenuxDB 的 Northwind 数据库 , 使用 NexusDB 服务及 "Northwind" 别名 . 如下截图 :
点击 OK, 查看 Schema Modeler 中的连接字符串 :
将连接重命名为 NexusDBConnection.
还是在 Schema Modeler, 在右下部的 Data Explorer 中浏览 Northwind 数据库的表 :
拖动 Customers 表到左上部 DataSet 面板创建一个 Customers 数据集 :
关闭 Schema Modeler, 保存变动 , 运行 Data Abstract 服务端 :
关闭服务端并从 RemObjects 菜单中启动以便于让其在后面执行 .
测试客户端
现在在项目管理器中打开客户端项目 . 在客户端的数据模块中 ,
右击数据模块并选择 ClientDataModule Wizard 菜单 :
选择 'Create Data Tables':
下面的步骤让向导生成 Customers 的 DataTable:
在客户端窗体中 , 增加一个表格和 navigation 控件 , 并将其连接到 ClientDataModule 中的 datasource 激活 DataTable 并运行客户端 :
为了在客户端更新数据变更你当然要在服务端增加 Business Processor.