VB6 - DAO - 存储过程

Posted

技术标签:

【中文标题】VB6 - DAO - 存储过程【英文标题】:VB6 - DAO - Stored procedures 【发布时间】:2011-06-18 10:39:39 【问题描述】:

我知道现在不是 1998 年,但由于各种原因,我需要将 VB6 应用程序的数据库接口从 ADO 更改为 DAO。我以前没有使用过 DAO,我们所有的数据库事务都使用存储过程在 SQL Server 2008 上进行。如何在 VB6 中使用 DAO 执行带有输入和输出参数的存储过程?

【问题讨论】:

哎哟!我认为您应该首先看的是数据类型映射,因为 DAO 没有很多数据类型 :( 不,我认为他应该做的第一件事就是另谋高就。 【参考方案1】:

你可以执行一个QueryDef,例如:

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim scn As String

Set db = CurrentDb

''http://connectionstrings.com
scn = "ODBC;Description=test;DRIVER=SQL Server;SERVER=server;" _
    & "Trusted_Connection=Yes;DATABASE=test"

''For this example
SiteID = 3
MachineID = "abc"

Set qdf = db.CreateQueryDef("")
qdf.Connect = scn
''This is important, if you wish to execute the query
qdf.ReturnsRecords = False
qdf.SQL = "dbo.sproc_auditlog @siteid=" & SiteID & ", @machine='" & MachineID & "'"
qdf.Execute dbFailOnError

【讨论】:

【参考方案2】:

显然这是微软的方式:

http://support.microsoft.com/kb/168210

我使用的代码模板大致如下:

Dim rs As Recordset
Dim ws As Workspace
Dim db As Database
Dim sproc As String

Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("", False, False, conString)

sproc = "EXEC sproc_AuditLog @site=" + siteID + ", @machine='" + MachineID + "'"
Set rs = db.OpenRecordset(sproc, dbOpenSnapshot, dbSQLPassThrough)
rs.Close

如您所见,我本质上是在字符串中构建 EXEC 语句,然后使用 dbSqlPassThrough 将其直接发送到 ODBC,因为 DAO 没有执行存储过程的固有方法(例如 ADO 的 Execute 函数)。

【讨论】:

以上是关于VB6 - DAO - 存储过程的主要内容,如果未能解决你的问题,请参考以下文章

vb6中如何调用sql的储存过程?

哪位大神告诉一下vb6.0怎么调用带2个参数的存储过程,有简单的例子最好。谢谢!

在通用 DAO 中使用 Hibernate 调用存储过程的最佳方法是啥?

SQL Server 存储过程向其调用者报告进度,一个 Access (VBA DAO) 传递查询

VB调用存储过程 - CreateParameter 方法

mybatis中存储过程的调用