65.9K
CodeProject 正在变化。 阅读更多。
Home

一套 ADOCE 类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.78/5 (21投票s)

2003年8月7日

CPOL

3分钟阅读

viewsIcon

623111

downloadIcon

1230

将 Carlos Antollini 的 ADO 类移植到 Pocket PC。

Sample Image - ado_ce_ca.jpg

引言

我在 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.hado.cpp)。源代码兼容性是通过使用预编译指令实现的,这可能会使部分代码更难阅读。

缺少什么?

在 Carlos 的所有类中,Pocket PC 将只看到 CADODatabaseCADORecordset。事实上,这些是唯一具有直接 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 文件夹中。

© . All rights reserved.