【发布时间】:2008-11-10 08:12:01
【问题描述】:
我正在执行这样的查询
select field from table;
在该查询中,有一个循环在许多表上运行。因此,如果表中不存在该字段,我会得到一个
运行时错误 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”语句。
-
第二:改成“On Error Resume Next”样式,这里更合适。您是否仔细检查过 3061 是错误的实际编号?使用调试器单步调试您的代码。
-
我不情愿地编码了 goto 但我已将其删除 我尝试调试但仍然出现相同的错误 3061
-
我将更改我的答案以包含应该有效的内容。
-
我在您的代码中看不到一个“On Error Resume Next”。这就是为什么它不起作用。除此之外 - 没有冒犯,但你的代码是一个混乱。你可能想先把它清理干净。我猜你也缺乏关于一般 VB 和特别是 Access VBA 的阅读。
标签: ms-access vba error-handling