【发布时间】:2011-02-20 22:43:50
【问题描述】:
如果我将数据从 Access MDB 传输到 SQL Server,VB 应用程序中的 DAO 代码是否适用于 SQL Server。
我知道需要对初始连接调用进行更改,但是否还有其他需要更改的地方?
【问题讨论】:
标签: sql-server ms-access migration dao
如果我将数据从 Access MDB 传输到 SQL Server,VB 应用程序中的 DAO 代码是否适用于 SQL Server。
我知道需要对初始连接调用进行更改,但是否还有其他需要更改的地方?
【问题讨论】:
标签: sql-server ms-access migration dao
这里有很多问题。
如果您将 ADP 用于 SQL Server 的前端,您将不会使用 DAO,因为您不能,因为 ADP 不使用 Jet/ACE。然后,您将拥有与 SQL Server 的直接 ADO 连接。
但是,在过去 5 年左右的时间里,MS 一直在弃用 ADP,转而支持使用 ODBC 的 MDB/ACCDB(某些报告方案除外)。 A2007 和 A2010 中的 ADP 没有任何变化,这可能表明 MS 计划完全放弃它们(就像他们在 A2002 和 A2003 没有变化后对 DAP 所做的那样)。但也可能是 MS 计划在下一版本的 Access 中恢复 ADP,因为 Access 团队一直在积极寻求那些使用 SQL Server 的人的意见。
使用推荐的技术 (MDB/ACCDB) 和 ODBC(可能还有链接表),您使用的是 Jet/ACE,逻辑数据接口是 DAO,Jet/ACE 的本机数据接口。
Jet/ACE 在处理服务器数据库方面实际上非常聪明,但它确实会出错,而且没有经验的 Access 开发人员可能会编写某些类型的查询,这将成为服务器数据库的性能猪(因为它们强制Jet/ACE 从服务器拉出整个表并在客户端工作站上完成所有工作——参见上面@Philippe Grondier 的回答。
通过 MDB/ACCDB 中的 ODBC 使用 SQL Server 的常用方法是尝试使用 Access 方式,绑定表单和整个九码(与您设计与 Jet/ 一起使用的应用程序没有什么不同) ACE 后端),然后使用 SQL Profiler 确定哪些部分是性能瓶颈并应进行重组,以便在服务器端进行适当的处理。
通常需要明智地使用 ADO,因为 ADO 在某些方面做得非常出色,而 DAO 做得很差或根本没有。
但基本思想是使用与 Jet/ACE 后端相同的方法,因为 Jet/ACE 正在管理您与服务器的接口。这意味着您不必担心 Jet/ACE 的 SQL 方言和服务器数据库的方言之间的差异,因为 Jet/ACE 和 ODBC 完全消除了这些差异。
一些随机问题:
对于 DAO 记录集,您需要添加 dbSeeChanges 选项。
您的所有表都必须有一个主键,否则您可能会有奇怪的屏幕更新。但是你们所有的桌子都有PK,对吧?
我发现最好在 SQL Server 上的所有表中放置一个时间戳字段,即使我从未明确使用它。这(结合 #2)确保刷新尽可能高效(ODBC 可以检查时间戳,而不需要将所有客户端字段与服务器端值一一进行比较)。
李> 1234563并且直接连接到服务器。Jet/ACE 没有与 bigint 对应的数据类型,因此如果您在 SQL Server 表中将其用作 PK,则需要以非标准方式处理它。 MS 知识库中有关于解决此问题的文章。
如果您使用 ADO,请记住 ADO 使用 Access 所谓的“SQL 92 兼容模式”,即 SQL Server 通配符和派生表语法。
【讨论】:
这完全取决于您如何与数据库进行交换:
【讨论】:
直接没有。但是您可以将当前访问表替换为与 sql server 的链接表。
更新:How to create a DSN-less connection to SQL Server for linked tables in Access
【讨论】:
不确定这是否适用于您的方案,但 Access 中的 SQL 语法(至少是旧版本)与 SQL Server 的语法略有不同,例如旧版本 Access 中的 LIKE 通配符使用 * 而不是SQL Server 使用的百分比。
如果您在 VB 应用程序中使用 SQL 查询,您可能需要确保所有 SQL 语句都符合 SQL Server 语法。
我提到这主要是因为您提到了 DAO 和 VB(我假设是 VB 5/6 而不是 VB.NET),它们是相当古老的技术,而 Access MDB 可能采用类似的旧格式。
【讨论】: