一套 ADOCE 类






4.78/5 (21投票s)
将 Carlos Antollini 的 ADO 类移植到 Pocket PC。
引言
我在 Pocket PC 开发小组中看到最常被问到的问题之一,是如何使用 ADOCE 和 Pocket Access 在 eVC 中进行开发。网上有一些关于这方面的信息,但很难找到一套可以完全封装 ADOCE 3.1 的免费 C++ 类。在 CP 中搜索后,我找到了一个非常好的候选方案。
本文介绍了将 Carlos Antollini 广受欢迎的 ADO 类移植到 Pocket PC 的过程。Carlos 的文章 (一组 ADO 类 - 版本 2.07) 相当详尽地介绍了桌面 ADO,之所以选择它进行移植,是因为它是免费提供的,而且非常受欢迎。
移植
Pocket PC 使用 ADOCE 3.1,这是在桌面计算机上找到的 ADO 实现的精简版。ADOCE 3.1 对象模型在对象和方法数量上都较小。尽管如此,它对于大多数数据库应用程序来说仍然非常有用,并且保留了其易用性。
源代码兼容性
这次移植的目标之一是保持源代码兼容性。因此,您将能够在两个平台(桌面和 Pocket PC)上编译源文件(ado.h 和 ado.cpp)。源代码兼容性是通过使用预编译指令实现的,这可能会使部分代码更难阅读。
缺少什么?
在 Carlos 的所有类中,Pocket PC 将只看到 CADODatabase
和 CADORecordset
。事实上,这些是唯一具有直接 ADOCE 支持的类。此外,并非所有类的方法都受支持,并且已被删除。以下是不支持的方法列表
void CADODatabase::dump_com_error(_com_error &e);
BOOL CADORecordset::AddNew(CADORecordBinding &pAdoRecordBinding);
BOOL CADORecordset::RecordBinding(CADORecordBinding &pAdoRecordBinding);
CString CADORecordset::GetString(LPCTSTR lpCols, LPCTSTR lpRows, LPCTSTR lpNull, long numRows = 0);
此外,在 CADORecordset::cadoDataType
枚举中缺少项目。
有什么新功能?
在移植过程中,我不得不添加一些缺失的功能,其中最重要的是 UNICODE 支持。
在第一次调试会话中,我还发现 CADORecordset::Open
需要一个新的模式 (openUpdate
),以允许正确使用 Update
方法(请参阅示例代码)。
移植警告
检查 ado.h 中的 #import
指令是否适合您的开发环境。
此移植尚未经过彻底测试。请帮助我完成这个持续进行的过程。
使用 Pocket Access
Pocket Access 是一个非常简单的数据库管理器。它非常简单,因此不支持以下(以及其他)桌面功能
- 唯一索引
- 引用完整性
- 高级 SQL 语句(几乎所有内容都缺失)
Autonum
字段
您还需要注意一些限制
- 每个表最多 4 个索引
- 每个
JOIN
最多 4 个表 - 您只能获得
INNER JOIN
那么为什么要使用它呢?它非常容易设置并与您的桌面环境同步,而且您无需支付许可费用。
使用 ADOCE 管理您的表可能比您想象的要复杂,因此我准备了一个简单的演示应用程序,用于管理(尚未删除)本节的作者列表。大部分工作都在 CChildView
中,一个 CListCtrl
派生类,用于创建和修改记录。请注意添加新记录和更新现有记录的特殊性。
示例应用程序
示例应用程序提供了完整的源代码和两个版本的数据库:桌面版 (.mdb) 和 Pocket PC 版 (.cdb)。您可以使用 ActiveSync 从第一个创建第二个。如果您只有一个模拟器可以玩,您可以将 .cdb 文件直接复制到 \My Documents 文件夹中。