Не ответ как таковой, но объекты, которые вы используете, ваше соединение и набор записей, имеют события, которые происходят во время манипуляции соединениями/данными и т. Д. Поэтому, когда я изучаю такие вещи, я завершаю их в своем классе, чтобы помочь ловушка, где происходят ошибки Ening. Например, это не тестировалось, но для ADO, я хотел бы использовать класс как так, clsADOTest, с кодом
Option Explicit
Private WithEvents CONN As ADODB.Connection ' Allow us to couple code we write to the events of an object
Private WithEvents rst As ADODB.Recordset
Private strUserID As String
Private strPwd As String
Public Property Let UserName(strUserName As String)
strUserID = strUserName
End Property
Public Property Let Password(strPassword As String)
strPwd = strPassword
End Property
Public Property Let ConnectionString(strConnectionString As String)
CONN.ConnectionString = strConnectionString
End Property
Public Sub class_initialize()
Set CONN = New ADODB.Connection
End Sub
Private Sub Class_Terminate()
If Not CONN Is Nothing Then
If CONN.State <> adStateClosed Then
CONN.Close
End If
Set CONN = Nothing
End If
End Sub
' Simulated ADO Methods
' Wrappers round existing ADO Methods used in SO question
Public Function OPEN_CONNECTION() As Boolean
On Error GoTo eHandle
If Not CONN Is Nothing Then
CONN.Open
End If
OPEN_CONNECTION = True
Exit Function
eHandle:
OPEN_CONNECTION = False
End Function
Public Function EXECUTE_SQL(strSQL As String) As ADODB.Recordset
Set EXECUTE_SQL = CONN.Execute(strSQL)
End Function
Public Function CLOSE_CONNECTION() As Boolean
If Not CONN Is Nothing And CONN.State <> adStateClosed Then
CONN.Close
End If
End Function
' ADO Events
Private Sub CONN_ConnectComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
If Not pError Is Nothing Then
MsgBox "Error in connection"
Else
Debug.Print "Connected to " & pConnection.ConnectionString
End If
End Sub
Private Sub CONN_ExecuteComplete(ByVal RecordsAffected As Long, ByVal pError As ADODB.Error, _
adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, _
ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)
If Not pError Is Nothing Then
MsgBox "Error in SQL"
Else
If Not pRecordset Is Nothing Then
Debug.Print pRecordset.RecordCount & " records returned from " & pCommand.CommandText
Else
Debug.Print "Execute complete"
End If
End If
End Sub
Это позволило бы дать мне объект для использования в VBA, что я могу видеть на различных что вызывает ошибки и исправляет.
Таким образом, вы можете использовать что-то вроде этого для своего примера. Прочитайте немного о событиях и посмотрите страницу MSDN для соединения ADO и т. Д., Чтобы узнать, что вы можете извлечь из этих событий.
Sub testing()
Dim ADOClass As New clsADOTest
Dim rst As ADODB.Recordset
With ADOClass
.UserName = InputBox("Please insert your USER ID for CSDG4 environment.", "Test")
.Password = InputBox("Please insert the PASSWORD related to " & .UserName & " user.", "Test")
.ConnectionString = ""
If .OPEN_CONNECTION Then
Set rst = ADOClass.EXECUTE_SQL("select seq_prenotazione, cod_rapporto,stato_pren from.....")
Else
End If
End With
Set ADOClass = Nothing
End Sub
Его проблема SQL, которую я считаю, поскольку ее выход из набора записей открыт, работает ли connection.open? –
есть подключение.open работает совершенно нормально – Srijan