2011-06-05 53 views
2

我已经“幸运”,足以继承,需要极大清理Access数据库。实际上,我们将移出Access并将其转换为.NET/SQL Server。但现在,我们保留了Access数据库的用户界面并将所有查询移入SQL Server。充分利用存储过程在SQL Server一个结果在Access

不幸的是我从来没有真正有直接接入,所以我跌跌撞撞,我去工作。

我期待找出一种方式来写一个函数,存储的过程和一些参数值和执行SQL Server上的存储过程并返回结果作为一个结果。

所以签名可能看起来像......

Public Function ExecuteStoredProcedure(storedProcName As String, parameterValues As String) As RecordSet 

传入的参数值将被逗号分隔。

所以样本调用该函数可能看起来像......

Set returnValues = ExecuteStoredProcedure("SP_GetTableXYZContents","'01/01/2011','ABCD',2345") 

这看起来很琐碎,但我似乎无法得到它正常工作。任何人都可以将我指向正确的方向吗?

我让他们通过以下简单地执行(但无法得到的返回值)

Dim conn As ADODB.Connection 
Set conn = New ADODB.Connection 
conn.Open "...connectionstring..." 
conn.Execute storedProcCall, dbSQLPassThrough 

注意的是,在功能上面的代码只需要一个字符串变量(一个SP的名称和参数值,其中SP名称和值空间分隔和值以逗号分隔。

在此先感谢您的帮助!

回答

5

有做到这一点的几种方式。这有两种可能性。

首先是最简单的:

' String specifying SQL. 
    SQL = "My_StorProc parm1, parm2, parm3" 
    ... 
    ' For a stored procedure that doesn't return records. 
    MyDb.Execute SQL, dbSQLPassThrough 
    i = MyDb.RowsAffected 
    ... 
    'For a stored procedure that returns records. 
    set Rs = MyDB.OpenRecordset(SQL, dbOpenSnapshot, dbSQLPassThrough) 

价:How To Call Stored Procedures Using Data Access Objects

第二步使用ADODB对象:

Dim Conn As ADODB.Connection 
    Dim Cmd As ADODB.Command 
    Dim Rs As ADODB.Recordset 
    Dim Connect As String 

    sConnect= "driver={sql server};" & _ 
      "server=server_name;" & _ 
      "Database=pubs;UID=uder_id;PWD=password;" 

    ' Establish connection. 
    Set Conn = New ADODB.Connection 
    Conn.ConnectionString = sConnect 
    Conn.Open 

    ' Open recordset. 
    Set Cmd = New ADODB.Command 
    Cmd.ActiveConnection = Conn1 
    Cmd.CommandText = "sp_AdoTest" 
    Cmd.CommandType = adCmdStoredProc 
    Cmd.Parameters.Refresh 
    Cmd.Parameters(1).Value = 10 
    Set Rs = Cmd1.Execute() 

    ' Process results from recordset, then close it. 
    Rs.Close 
    Conn.Close 
    Set Rs = Nothing 
    Set Cmd = Nothing 
    Set Conn = Nothing 

价:How To Invoke a Stored Procedure with ADO Query Using VBA/C++/Java

1

你想看看在ADODB.Command对象。它的工作原理类似的方式给SqlCommand OBJ ECT在.net中(即设置了CommandText,设置CommandType,并使用CreateParameter方法,我相信添加参数)。自从我使用它以来,这已经有一段时间了。

编辑: 忘了提及命令对象上的Execute方法也会返回Recordset

相关问题