将存储过程分配给Microsoft Access中的report.recordset

问题描述 投票:0回答:2

我听说您只能通过adp来执行此操作,我直接连接到SQL Server,并想将存储过程分配给一条记录,但我得到只能在adp文件中执行的错误?

我没有链接到SQL Server,而是使用ODBC驱动程序直接连接到它。

有什么方法可以将此存储过程分配给报表?

谢谢..

ms-access report adp
2个回答
0
投票

应该在任何accdb / accde中使用正确的连接进行工作。尝试以下操作,看看是否可以使用fitstrconnADO连接。然后,您可以将本地rst分配给报告或表单等。

Public Function fctGetData(intReportNummer As Integer) As Boolean




Dim cnn As New adodb.Connection
Dim cmd As New adodb.Command
Dim rst As New adodb.Recordset   'PDO: Enthält die Empfaenger, die abzuarbeiten sind.






'PDO: Start
cnn.Open strconnADO
cmd.ActiveConnection = cnn
cmd.CommandTimeout = 180


cmd.CommandText = "dbo.q_YOUR_QUERY_sp"
cmd.CommandType = adCmdStoredProc
'cmd.CommandType = adCmdText   ' PDO: Version for PassThrough, use a SQL-Statement for CommandText


cmd.Parameters.Append cmd.CreateParameter("@Return_Value", adInteger, adParamReturnValue)
cmd.Parameters.Append cmd.CreateParameter("@Report_Nummer", adSmallInt, , , intReportNummer)


rst.CursorType = adOpenStatic
rst.CursorLocation = adUseClient
rst.LockType = adLockReadOnly



Set rst = cmd.Execute()

If Err.Number <> 0 Then

    ' Do something

        GoTo Err_Handler
End If

If cmd.Parameters("@Return_Value") <> 0 Then

    ' Do something

        GoTo Err_Handler
End If

DoEvents



'PDO: Work with your recordset

If rst.EOF Then


    ' Do something

    GoTo Err_Handler
End If




        Do While Not rst.EOF

                ' Do something

        Loop '






'Cleanup


Err_Handler:
On Error Resume Next


rst.Close

Set rst = Nothing


Set cmd = Nothing
cnn.Close
Set cnn = Nothing




End Function

0
投票

您所要做的就是在Access中创建一个查询,但是将其标记(更改)为通过查询。

因此,pt查询可以是

Exec MyStoreProc

保存查询。现在,仅使用此查询作为报告的来源。您实际上不需要在这里编写任何代码。当然,现在是否需要传递值或某种参数?

好,那么您可以使用此代码:

假设存储过程返回给定发票编号的数据。

因此,您的代码如下所示:

dim strInvoiceNumber   as string
strInvoiceNumber = InputBox("Enter invoice number")

currentdb.QueryDefs("MyPass").sql = "EXEC StorProc " & strInvoiceNumber

' code here follows to open report
 docmd.OpenReport "MyInoice",acViewPreview

因此,您可以创建通过查询,并在查询中键入将运行/调用存储过程的所有exec或命令。如前所述,如果没有参数,那么您根本不需要编写任何代码-只需创建传递查询,并将其用作报告的源即可。

© www.soinside.com 2019 - 2024. All rights reserved.