MS Access Report Подключение к Recordset - PullRequest
0 голосов
/ 25 января 2020

Я понимаю, что свойство набора записей отчета также не может быть подключено.

Однако я хочу / нужно сделать что-то вроде:

Private Sub testLoad()
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command

      cmd.ActiveConnection = gcn
      cmd.CommandType = adCmdStoredProc
      cmd.CommandText = "mysp_ProofofJobScott"

      'Your parameters
      cmd.Parameters("@StartJob").value = 1234
      cmd.Parameters("@Cmonth").value = "February 2020"

      Set Me.Recordset = cmd.Execute
End Sub

Что бы работало нормально ... если бы я мог связать отчет в набор записей.

Я уже использую этот вариант для всех моих форм и хотел бы быть последовательным в моем подходе.

Я подумал, есть ли способ использовать cmd.execute для заполнения временной таблицы, стать источником для источника записей или какой-то другой работы?

1 Ответ

0 голосов
/ 31 января 2020

Легким и быстрым является запрос Passthrough, но вы должны позаботиться о том, чтобы передаваемые аргументы были действительными, поскольку вы просто сопоставляете имя sp с ними.

Рассмотрите возможность изменения cMonth на дату, затем оцените месяц в sp .

Код для создания запроса PT:

Private Sub CreatePTProofofJobScott(StartJob As Long, cMonth As String)
Const QueryDefName As String = "PTProofofJobScott"
With CurrentDb
    Dim QdfExists as Boolean
    Dim qdf As DAO.QueryDef
    For Each qdf In .QueryDefs
        If qdf.Name = QueryDefName Then
             QdfExists = True
             Exit For
        End If
    Next
    If Not QdfExists Then
        .CreateQueryDef(QueryDefName)
    End If
    With .QueryDefs(QueryDefName)
        .Connect = "ODBC;DSN=yourDsnToSqlServer" 'or Conn-String https://www.connectionstrings.com/microsoft-odbc-driver-17-for-sql-server/
        .SQL = "EXEC mysp_ProofofJobScott " & StartJob & ", '" & cMonth & "'"
    End With
End With
End Sub

Использование в событии Report_Open с требуемыми аргументами:

Private Sub Report_Open(Cancel As Integer)
CreatePTProofofJobScott Split(Me.OpenArgs,";")(0), Split(Me.OpenArgs,";")(1)
Me.RecordSource = "PTProofofJobScott"
End Sub

Передача аргументов в OpenArgs при открытом cmd

DoCmd.OpenReport "yourReport",acViewPreview,,,,"1234;February 2020"

Для дальнейшего развития вы должны взглянуть на SSRS , как отметил FoggyDay

...