本帖最后由 WQ771211 于 2010-03-28 23:50:21 编辑

解决方案 »

  1.   

    现在全是ADO了,没有DAO了,改吧,这个不用了
      

  2.   

    没解决问题呀,引用Excel组件也有类似问题,以前的COM组件是很有用的
      

  3.   

    你要非用DAO你最好还用VC6.0开发吧
      

  4.   

    唉,偏题了
    不用DAO,如何在access中创建和删除表,就连SQLDMO也是COM组件吧
      

  5.   

    从 DAO/jet 迁移到 ADO/jet 的问题DAO 和 ADO 旨在解决两个不同的问题。按如下方式它们公开两个不同的对象模型和处理基础数据引擎的不同方法。这些差异可能意味着您必须将您的应用程序从 DAO 迁移到 ADO 时做了一些很大的更改。DAO 对象模型是专门为 Microsoft Jet 数据库引擎而设计的。jet 本身合并 ISAM 并 ODBC 连接和 $ 使后端尽可能多的提供程序外观像本机 Jet 引擎尽可能,但这是以性能为代价。DAO 还具有非常高效的方式将它允许主机 RDO 对象以及访问 ODBC 数据源的适用于 ODBCDirect 模式。ADO 对象模型设计为 OLE DB 提供程序,是更简单、 更灵活的对象模型比 DAO。但是,使用 Microsoft Jet OLE DB 提供程序时,其体系结构的设计会带来一些问题并且更受限制比它支持的 Jet 功能中的 DAO。本文概述了几个问题需要考虑时作出此决定是否要将您的应用程序从 DAO 迁移到 ADO。
    ADO 和 Jet 的 OLE DB 提供程序的有限的功能
    Jet 3.51 的 OLE DB 提供程序是一个有限的提供程序。这被为了提供线程安全的方法与 Microsoft 的 Internet 信息服务器使用 Microsoft Jet。有关本主题的详细信息,请参阅 Microsoft 知识库中下面的文章: 
    222135  (http://support.microsoft.com/kb/222135/EN-US/ ) 信息: 用 IIS 使用 Microsoft Jet 
    它不公开 Microsoft Jet 数据库引擎的完整功能。它提供了能够打开表、 非参数化的查询和参数化或非参数化的 SELECT 语句对记录集。它还允许 SQL 命令,但不是存储的 Microsoft Jet 操作查询的执行。它不允许对 ISAM 数据源的访问。Jet 4.0 的 OLE DB 提供程序公开的大多数 Microsoft Jet 功能,但它不是所有。除了在 ADO 类库必须 ADOX 和 Jet 和同步复制对象的类型库,以利用外部核心功能 ADO 对象到项目中包含的引用。这主要是落在处理特定于访问的对象和任意位置的一些其他问题所述的类别。 DAO 的有限的功能
    DAO 3.51 不能使用 Microsoft Jet 4.0 数据库引擎中,但它确实有 Microsoft Jet 3.51 数据库引擎进行完全的控制。
    DAO 3.6 提供控制 Microsoft Jet 4.0,DAO 3.51 级别,但不公开提供 Microsoft Jet 4.0 的任何新功能。性能
    DAO 可以更有效地使用到 Microsoft Jet 数据库引擎比 ADO 和 DAO 有时达 5 个或更快 10 倍地,如使用批更新下的速度更快很多操作。另一个问题是检索架构信息进行该调用是对 Jet 应用时,效率很低。这会导致查询,并使用大量正在比等效使用 DAO 的查询慢 30%到 80%的列对表更新。效率低下的 Jet 通过 ADO 的使用情况的一个示例所示连接问题在下一节。 连接问题
    Microsoft Jet 可以驻留在同一进程内的多个独立会话。每个会话具有开销,而且在单独的读缓存。在 DAO 中的会话由 DBEngine 对象表示。默认状态下,所有您创建的 DAO 对象,并在 Visual Basic 中的所有 DAO 数据控件使用相同的 Jet 会话。OLE DB 中 Jet 会话由数据源对象表示。多个连接可以对单个数据源对象将其打开。在 ADO 中,某种程度上简化 OLE DB 对象模型是: 一个 ADO 连接对象的 OLE DB 数据源对象和 OLE DB 连接对象组成。这意味着,在 ADO 中、 每个连接对象和 ADO 数据控件使用单独的 Jet 会话。ado 从 DAO 迁移您的应用程序时,这有重要的后果。第一次,Microsoft Jet 可以只处理有限的数量的会话。如果您的应用程序使用大量的 ADO 数据控件,Jet 可能会耗尽资源。此外,Jet 的读取缓冲区都有一个五秒钟超时,因此在一个连接上所做的更改将不会显示在另一台五秒钟。在 DAO 中,这不是问题,因为所有对象都使用相同的缓冲区。下面的知识库文章提供了有关此主题和如何共享以消除由多个 Jet 会话引起该问题的数据控件之间的连接的详细信息:
    216925  (http://support.microsoft.com/kb/216925/EN-US/ ) ADO 和 Jet PRB: 单用户并发问题 
    提高并发性的第二种方法是使用 RefreshCache JetEngine 对象的方法。此对象通过 Microsoft Jet 和复制对象 2.1 库公开,可用开头 ADO 2.1 Sp1 GA.ADO 是从:http://msdn.microsoft.com/en-us/data/aa937729.aspx (http://msdn.microsoft.com/en-us/data/aa937729.aspx) 重新分发
    在使用 DAO 时您将有很多较少的文件,您必须安装在客户端计算机上。Visual Basic 设置向导 (Visual Basic 5.0 及更早版本) 或打包和部署向导 (Visual Basic 6.0 中) 为您处理此。使用 ADO,您可以重新发布的所有 ADO 和 OLE DB,包括 ODBC,和 Microsoft Jet 以外的其他某些默认驱动程序。 access 2000 和旧应用程序兼容性
    有三个主要的兼容性问题:
    第一个是使用 Access 95 和 Access 97 和 Visual Basic 4.0 等的旧版应用程序的 Jet 4.0 数据库格式表示 5.0,6.0 使用 DAO 的数据控件的应用程序的和所有硬编码到使用 Jet 3.x 数据库格式将不能读取 Jet 4.0 数据。
    第二个问题是由 ADO 创建的存储的查询是不可见为 Access 2000。其原因是 Jet 4.0 查询处理器,以使其更多的 ANSI 兼容,包括添加新的 SQL 命令中的更改。access 2000 不会甚至显示这些查询以避免令人困惑的用户。但是,他们可以看到和执行通过 DAO 和 ADO。它们还能通过引用在窗体和报表记录源属性和 SQL 语句中,您将不得不手动键入该名称中的,在该生成器将不会显示名称。Microsoft OLE DB 提供程序的 Jet 4.0 始终设置为非 NULL 值的 ANSI 标志。DAO 始终将此标志设置为 NULL。
    第三个问题是 Jet 4.0 除去对 FoxPro IISAM 的支持。必须通过 FoxPro ODBC 驱动程序访问任何 FoxPro 表。如果 Jet 数据库使用链接的 FoxPro 表,并且您将转换为 Jet 4.0 必须重新链接它们而是使用 FoxPro ODBC 驱动程序。
      

  6.   

    你的程序估计写的比较早了。主要是组件升级,相应代码还在用老的组件系统下。其实完全不必理会它就行。如果非要消除这个错误信息,可能要重新加载新的com组件,并且部分程序代码要重写。