Keine Antwort als solche, aber die Objekte, die du verwendest, deine Verbindung und dein Recordset, haben Ereignisse, die während der Verbindung/Datenmanipulation etc. auftreten. Also persönlich, wenn ich neue Dinge wie diese lerne, schliesse ich sie in meine eigene Klasse ein Falle, wo Fehler happ sind ening. Zum Beispiel ist dies nicht getestet, aber für ADO, würde ich eine Klasse wie so, clsADOTest verwenden, mit dem Code
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
Das würde mir dann ein Objekt gibt in VBA zu verwenden, die ich bei verschiedenen sehen Stufen, was die Fehler verursacht und korrigiert.
So könnten Sie so etwas für Ihr Beispiel verwenden. Lesen Sie etwas über Ereignisse und schauen Sie sich die MSDN-Seite für die ADO-Verbindung usw. an, um zu sehen, was Sie von diesen Ereignissen erfahren können.
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
Es ist ein SQL-Problem, dann glaube ich, wie es aus dem Re-Cord-Set kommt, funktioniert die connection.open-Zeile? –
ja connection.open funktioniert absolut gut – Srijan