Je suis l'exécution d'une requête comme ceciMS Access: comment contourner/supprimer une erreur?
select field from table;
Dans cette requête, il y a une boucle en cours d'exécution sur plusieurs tables. Donc, si le champ est présent dans une table, je reçois un
Erreur d'exécution 3061
Comment puis-je passer par cette erreur comme celle sur ce flux d'erreur devrait aller à un autre point?
Ceci est le code que j'ai récemment après avoir parcouru ce forum.
Option Explicit
Private Sub UpdateNulls()
Dim rs2 As DAO.Recordset
Dim tdf As DAO.TableDef
Dim db As Database
Dim varii As Variant, strField As String
Dim strsql As String, strsql2 As String, strsql3 As String
Dim astrFields As Variant
Dim intIx As Integer
Dim field As Variant
Dim astrvalidcodes As Variant
Dim found As Boolean
Dim v As Variant
Open "C:\Documents and Settings\Desktop\testfile.txt" For Input As #1
varii = ""
Do While Not EOF(1)
Line Input #1, strField
varii = varii & "," & strField
Loop
Close #1
astrFields = Split(varii, ",") 'Element 0 empty
For intIx = 1 To UBound(astrFields)
'Function ListFieldDescriptions()
Dim cn As New ADODB.Connection, cn2 As New ADODB.Connection
Dim rs As ADODB.Recordset, rs3 As ADODB.Recordset
Dim connString As String
Dim SelectFieldName
Set cn = CurrentProject.Connection
SelectFieldName = astrFields(intIx)
Set rs = cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, Empty, SelectFieldName))
'Show the tables that have been selected '
While Not rs.EOF
'Exclude MS system tables '
If Left(rs!Table_Name, 4) <> "MSys" Then
strsql = "Select t.* From [" & rs!Table_Name & "] t Inner Join 01UMWELT On t.fall = [01UMWELT].fall Where [01UMWELT].Status = 4"
End If
Set rs3 = CurrentDb.OpenRecordset(strsql)
'End Function
strsql2 = "SELECT label.validcode FROM variablen s INNER JOIN label ON s.id=label.variablenid WHERE varname='" & astrFields(intIx) & "'"
Set db = OpenDatabase("C:\Documents and Settings\Desktop\Codebook.mdb")
Set rs2 = db.OpenRecordset(strsql2)
With rs2
.MoveLast
.MoveFirst
astrvalidcodes = rs2.GetRows(.RecordCount)
.Close '
End With
With rs3
.MoveFirst
While Not rs3.EOF
found = False
For Each v In astrvalidcodes
If v = .Fields(0) Then
found = True
Debug.Print .Fields(0)
Debug.Print .Fields(1)
Exit For
End If
Next
If Not found Then
msgbox "xxxxxxxxxxxxxxxx"
End If
End If
.MoveNext
Wend
End With
On Error GoTo 0 'End of special handling
Wend
Next intIx
End Sub
Je reçois
Incohérence de type Erreur d'exécution
dans Set rs3 = CurrentDb.OpenRecordset(strsql)
Je suppose que je suis mélanger ado
et dao
mais je ne suis pas sûr sûr où c'est.
Tout d'abord: arrêtez d'utiliser GoTo. Immédiatement. C'est mauvais. Je veux dire vraiment * mal *, comme dans "Pandora's Box". Le seul endroit où GoTo est valide dans le code VB est dans les instructions "On Error Goto". – Tomalak
Deuxièmement: Changez-le pour utiliser le style "On Error Resume Next", il est beaucoup plus approprié ici. Avez-vous vérifié que 3061 est le numéro réel de l'erreur? Utilisez le débogueur pour parcourir votre code. – Tomalak
je ai codé à contrecoeur goto mais je l'ai enlevé j'ai essayé le débogage mais toujours la même erreur 3061 – tksy