VB6 DAO 连接到 SQL Server 2008 数据库
VB6 DAO Connection to SQL Server 2008 Database
简介(tldr;下面的问题)
首先,是的,我知道 DAO:
- 已过时
- 不再支持
- SQL
效率低下
- 总体来说很烂
所以这些答案对解决问题没有帮助。
我早就将我的偏好转移到 nHibernate 和其他连接数据的方式。但是,我在一个遗留项目中,计划的第一阶段是将数据从许多 Access 数据库迁移到单个 SQL 服务器实例。很容易。 数据迁移已经完成,运行正常。
但是,该应用程序是使用 DAO 连接到 Access 的 VB6 代码,我需要在第一阶段尽可能少地更改它。下一阶段(很快)是将整个应用程序转换为 ASP.MVC 站点,正确命中 SQL。
当我搜索如何正确构造 DAO OpenDatabase() 函数以访问 SQL 服务器时,所有答案都是上述 "Why do you want to do that?" "You should learn ADODB!" "DAO is for suckers!" 胡说八道,从来没有解决所问的实际问题。可悲的是,原始问题仍然在搜索引擎中,即使它在特定论坛等上被标记为 "solved"...
所以...问题
鉴于所有这些,还有人记得如何使用 DAO OpenDatabase 连接到 Sql 服务器吗???
是的,这相当于用支架和钻头在一块木头上钻一个洞?当然,电钻更好、更智能、更快,还有所有这些好处……但有时需要使用旧方法。
我认为您可以这样做的一种方法是使用 ODBC 连接。
在管理工具表单控制面板上,您可以向您的 SQL 服务器添加一个 ODBC 源。
完成之后,你可以试试这个:
Dim worksp As Workspace
Dim conexString As String
Dim base As Variant
Set worksp = DBEngine.Workspaces(0)
Let conexString = "OBDC;DSN=SQLDNSNAME;UID=;PWD="
Set base = worksp.OpenDatabase("BDDNAME", False, False, conexString)
我最近不得不将带有 DAO 应用程序的 VB6 从 SQL7 迁移到 SQL 2016,这个过程几乎是直截了当的。我没有更改代码中的任何内容,除了现在已过时的旧 SQL 语法。
我用的是ODBC。所以,在这里我如何打开 SQL 与 DAO 的连接:
connect = "DSN=<odbcname>;UID=<username>;PWD=<password>;DATABASE=<database>"
Set datab = rdoEnvironments(0).OpenConnection("", rdDriverCompleteRequired, False, connect)
这是我们的解决方案,因为我们对旧应用程序的更改较少。请注意,这不是唯一的方法。
记住你必须使用 32 位 ODBC 驱动程序。如果您使用的是 64 位系统,请选择好的 (C:\Windows\SysWOW64\odbcad32.exe
)。而且我想我已经使用了 SQL Server
驱动程序。 SQL 本机客户端对于 DAO 来说太新了(我认为)。您可能需要尝试很多次。
简介(tldr;下面的问题)
首先,是的,我知道 DAO:
- 已过时
- 不再支持
- SQL 效率低下
- 总体来说很烂
所以这些答案对解决问题没有帮助。
我早就将我的偏好转移到 nHibernate 和其他连接数据的方式。但是,我在一个遗留项目中,计划的第一阶段是将数据从许多 Access 数据库迁移到单个 SQL 服务器实例。很容易。 数据迁移已经完成,运行正常。
但是,该应用程序是使用 DAO 连接到 Access 的 VB6 代码,我需要在第一阶段尽可能少地更改它。下一阶段(很快)是将整个应用程序转换为 ASP.MVC 站点,正确命中 SQL。
当我搜索如何正确构造 DAO OpenDatabase() 函数以访问 SQL 服务器时,所有答案都是上述 "Why do you want to do that?" "You should learn ADODB!" "DAO is for suckers!" 胡说八道,从来没有解决所问的实际问题。可悲的是,原始问题仍然在搜索引擎中,即使它在特定论坛等上被标记为 "solved"...
所以...问题
鉴于所有这些,还有人记得如何使用 DAO OpenDatabase 连接到 Sql 服务器吗???
是的,这相当于用支架和钻头在一块木头上钻一个洞?当然,电钻更好、更智能、更快,还有所有这些好处……但有时需要使用旧方法。
我认为您可以这样做的一种方法是使用 ODBC 连接。 在管理工具表单控制面板上,您可以向您的 SQL 服务器添加一个 ODBC 源。 完成之后,你可以试试这个:
Dim worksp As Workspace
Dim conexString As String
Dim base As Variant
Set worksp = DBEngine.Workspaces(0)
Let conexString = "OBDC;DSN=SQLDNSNAME;UID=;PWD="
Set base = worksp.OpenDatabase("BDDNAME", False, False, conexString)
我最近不得不将带有 DAO 应用程序的 VB6 从 SQL7 迁移到 SQL 2016,这个过程几乎是直截了当的。我没有更改代码中的任何内容,除了现在已过时的旧 SQL 语法。
我用的是ODBC。所以,在这里我如何打开 SQL 与 DAO 的连接:
connect = "DSN=<odbcname>;UID=<username>;PWD=<password>;DATABASE=<database>"
Set datab = rdoEnvironments(0).OpenConnection("", rdDriverCompleteRequired, False, connect)
这是我们的解决方案,因为我们对旧应用程序的更改较少。请注意,这不是唯一的方法。
记住你必须使用 32 位 ODBC 驱动程序。如果您使用的是 64 位系统,请选择好的 (C:\Windows\SysWOW64\odbcad32.exe
)。而且我想我已经使用了 SQL Server
驱动程序。 SQL 本机客户端对于 DAO 来说太新了(我认为)。您可能需要尝试很多次。