Я выполнение запроса, как этотMS Access: Как обходить/подавлять ошибку?
select field from table;
В этом запросе, имеется петля работает на многих столах. Таким образом, если поле не присутствует в таблице я получаю
Runtime Ошибка 3061
Как я могу передать на эту ошибку как, например, на этот поток ошибок должен идти в другую точку?
Это код, который я недавно получил после прохождения этого форума.
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
Я получаю ошибку
Тип Несовпадение времени выполнения
в Set rs3 = CurrentDb.OpenRecordset(strsql)
Я предполагаю, что я перепутать ado
и dao
, но я, безусловно, не конечно, где это.
Прежде всего: прекратите использование GoTo. Немедленно. Это плохо. Я имею в виду действительно * зло *, как в «Ящике Пандоры». Единственное место GoTo, действительное в коде VB, находится в операциях «On Error Goto». – Tomalak 2008-11-10 12:58:43
Второе: измените его, чтобы использовать стиль «Принудительное возобновление следующего», здесь это гораздо более уместно. Вы дважды отметили, что 3061 - это фактическое число ошибок? Используйте отладчик для выполнения кода. – Tomalak 2008-11-10 13:16:31
Я неохотно закодировал goto, но я удалил его Я попробовал отладку, но все та же ошибка 3061 – tksy 2008-11-10 13:25:02