使用SQL存储过程函数记录集返回访问2013

时间:2017-05-08 17:43:33

标签: vba ms-access stored-procedures access-vba ms-access-2013

嘿所有我想创建一个调用我的MS SQL数据库的模块'存储过程。

问题是,它似乎不会将它作为记录集找到的内容传回给调用它的主函数。

主要表单代码:

Dim rst As ADODB.Recordset

Set rst = New ADODB.Recordset
Set rst = dbcon.dbConnection("StoredProcNameHere")
Debug.Print rst(0) '<-- has the number needed here
if (rst.RecordCount > 0) then...

我的模块代码:

Public Function dbConnection(proc As String, Optional parm As String)
   Dim con As ADODB.Connection
   Dim rst As ADODB.Recordset

   Set con = New ADODB.Connection
   Set rst = New ADODB.Recordset

   con.ConnectionString = "Provider=SQLOLEDB; Data Source=.....etc etc"
   con.Open

   If parm <> null then
      cmd.Parameters(0).Value = parm
   End If 

   Set rst = con.Execute("EXEC " & proc)
   Debug.Print rst(0) '<-- has the number needed here
   Set dbConnection = rst
End Function

执行此操作时,在 dbConnection 中有一个断点,我有 Debug.Print rst(0)的值,并且在悬停时仍然有值主表单代码中的 Debug.Print rst(0)。但是,当它到达If语句时( if(rst.RecordCount&gt; 0)),它的值为-1 ???

我不想仅仅将 rst(0)作为字符串返回,因为一些商店的操作会有多个行而不是一个。

1 个答案:

答案 0 :(得分:1)

正如doc(https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/recordcount-property-ado)中所述,RecordCount属性不可靠用于此目的:

  

属性返回-1时   ADO无法确定记录的数量   或者如果提供者或游标类型不支持   总记录。

相反,使用BOF和EOF属性与MoveFirst / MoveNext完成此操作,如下所述:https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/bof-eof-properties-ado

在这里:https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/bof-eof-and-bookmark-properties-example-vb

Set rs = CurrentDb.OpenRecordset(strSQL)

With rs
    If Not .BOF And Not .EOF Then

        .MoveFirst

        While (Not .EOF)
            Debug.Print rs.Fields("...")
            .MoveNext
        Wend

    End If

    .close
End With
相关问题