Использование MS Access для завершения этого проекта.VBA - ADODB.Connection - использование параметров и восстановление записей, на которые ссылается счет
Я пытаюсь упростить код ADODB, удалив необходимость в объекте ADODB.Command. Существует два требования: необходимость использования параметров и необходимость восстановления затронутых записей (для проверки правильности выполнения SQL).
Синтаксис, который я пытаюсь использовать, упоминался в статье, зарегистрированной в блоке кода.
{подключение объекта}. [{Имя запроса}] {параметр 1, ..., п параметр [, набор записей объекта]}
сп. [TEST_ADODB_Connection] 204, Дата & "" & Время(), RS
Sub TEST_ADODB_Connection()
'https://technet.microsoft.com/en-us/library/aa496035(v=sql.80).aspx
'Using ADODB without the use of .Command
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim lngRecordsAffected As Long
Set cn = CurrentProject.Connection
'TEST_ADODB_Connection Query
'INSERT INTO tbl_Log (LogID_Orig, LogMessage)
'SELECT [NewLogID] AS _LogID, [NewLogMessage] AS _LogMessage;
Set rs = New ADODB.Recordset
cn.[TEST_ADODB_Connection] 204, Date & " " & Time(), rs
lngRecordsAffected = rs.RecordCount 'Error 3704 - no records returned
'so this is expected, but how do we
'get records affected by the update query?
Debug.Print lngRecordsAffected
End Sub
UPDATE
в том числе исходного кода, пытающегося быть упрощена.
Объект .Command предоставляет необходимую мне функциональность, но я ищу альтернативный метод, если это возможно.
В статье (https://technet.microsoft.com/en-us/library/aa496035(v=sql.80).aspx) приведен пример, где объект .Connection может быть выполнен с использованием параметров. Я пытаюсь распространить этот пример и получить затронутые записи.
Sub TEST_ADODB_Command()
Dim cm As ADODB.Command
Dim rs As ADODB.Recordset
Dim iLogID_Auto As Integer
Dim strLogMessage As String
Dim lngRecordsAffected As Long
Set cm = New ADODB.Command
iLogID_Auto = 204
strLogMessage = Date & " " & Time
With cm
Set .ActiveConnection = CurrentProject.Connection
.CommandText = "TEST_ADODB_Connection"
.CommandType = adCmdStoredProc
.NamedParameters = True ' does not work in access
.Parameters.Append .CreateParameter("[NewLogID]", adInteger, adParamInput, , iLogID_Auto)
.Parameters.Append .CreateParameter("[NewLogMessage]", adVarChar, adParamInput, 2147483647, strLogMessage)
Set rs = .Execute(lngRecordsAffected)
Debug.Print lngRecordsAffected
End With
Set rs = Nothing
Set cm = Nothing
End Sub
Э, вы * хотите * использовать 'ADODB.Command'. * Особенно, если у вас будут параметры. –
[ADODB.Command.Execute] (https://msdn.microsoft.com/en-us/library/ms681559 (v = vs.85).aspx) имеет параметр «RecordsAffected» –
Возможно, вы захотите взять и настроить [этот код] (http://codereview.stackexchange.com/q/46312/23788) (и связанные сообщения), чтобы упростить код ADODB, не жертвуя надежность «ADODB.Command». –