在 Microsoft Access 中将存储过程分配给 report.recordset
Assign stored procedure to a report.recordset in Microsoft Access
我听说你只能这样做是 adp,我直接连接到 SQL 服务器,想将存储过程分配给记录,但我得到了可以完成的错误仅在 adp 文件中?
我没有链接到 SQL 服务器,我使用 ODBC 驱动程序直接连接到它。
有什么办法可以将这个存储过程分配给报表吗?
谢谢..
应该在任何 accdb / accde 中使用正确的连接。使用 fittin strconnADO 尝试以下操作以查看是否可以连接。之后您可以将本地 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
您所要做的就是在 Access 中创建一个查询,但将其标记(更改)为一个 pass-thoughhh 查询。
所以,pt查询可以是
Exec MyStoredProcedure
保存查询。现在只需使用此查询作为报告的来源。你真的不需要在这里写任何代码。现在当然如果你需要传递一个值或某种参数?
好吧,那么你可以使用这个代码:
假设给定发票编号的存储过程 returns 数据。
因此,您的代码将如下所示:
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
因此,您可以创建一个完全传递查询,并在查询中键入任何 run/call 存储过程的执行程序或命令。如前所述,如果没有参数,则根本不需要编写任何代码 - 只需创建传递查询,并将其用作报告的来源。
我听说你只能这样做是 adp,我直接连接到 SQL 服务器,想将存储过程分配给记录,但我得到了可以完成的错误仅在 adp 文件中?
我没有链接到 SQL 服务器,我使用 ODBC 驱动程序直接连接到它。
有什么办法可以将这个存储过程分配给报表吗?
谢谢..
应该在任何 accdb / accde 中使用正确的连接。使用 fittin strconnADO 尝试以下操作以查看是否可以连接。之后您可以将本地 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
您所要做的就是在 Access 中创建一个查询,但将其标记(更改)为一个 pass-thoughhh 查询。
所以,pt查询可以是
Exec MyStoredProcedure
保存查询。现在只需使用此查询作为报告的来源。你真的不需要在这里写任何代码。现在当然如果你需要传递一个值或某种参数?
好吧,那么你可以使用这个代码:
假设给定发票编号的存储过程 returns 数据。
因此,您的代码将如下所示:
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
因此,您可以创建一个完全传递查询,并在查询中键入任何 run/call 存储过程的执行程序或命令。如前所述,如果没有参数,则根本不需要编写任何代码 - 只需创建传递查询,并将其用作报告的来源。