Непрерывный цикл ADO VBA Access 2010

Я получаю непрерывный цикл (я считаю). Когда я запускаю код, я получаю приглашение MsgBox, нажимаю «ОК», и программа просто запускается, запускается и никогда не заканчивается? Сначала я предположил, что это ошибка подключения к файлу, но если это так, я должен получить сообщение об ошибке, когда ADO пытается подключиться к файлу, верно? Файл не такой большой, всего 70 строк. То, как я установил MsgBox, должно предлагать щелкнуть OK на каждой итерации цикла, но я никогда не получаю другой MsgBox. Предложения?

' The following section reads from the elec_copy field's hyperlink
' It scans the Excel file for items it needs to include into the table
' It enters those cells into the TABLE 'items_needed_table'
'
' Selects row by row, and if the item has been marked TRUE, inserts
' That row into the TABLE 'items_needed_table'

' Open a connection to Excel
On Error Resume Next

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001

Set objConnection = CreateObject("ADODB.Connection")

objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & elec_copy.Value & ";" & _
        "Extended Properties=""Excel 12.0 Macro;HDR=Yes;"";"

' Decalre a RecordSet Object
Set objRecordSet = CreateObject("ADODB.Recordset")

' Grab all Rows in the Plain_VDR Sheet where 'needed' column == TRUE
objRecordset.Open "SELECT line_no,desc,weeks FROM [Plain_VDR$] WHERE needed = TRUE", _
    objConnection, adOpenStatic, adLockOptimistic, adCmdText

' Write the information pulled, into the TABLE 'items_needed_table' in Access Database
Do Until objRecordset.EOF
    MsgBox("" & qd.Parameters("p2"))
    Set qd = data_base.CreateQueryDef("")
    qd.sql = "INSERT INTO items_needed_table(pr_no, line_no, desc, weeks) " & _
        "Values([p1],[p2],[p3],[p4])"
    qd.Parameters("p1").Value = pr_num.Value
    qd.Parameters("p2").Value = objRecorset.Fields.Item("line_no")
    qd.Parameters("p3").Value = objRecordset.Fields.Item("desc")
    qd.Parameters("p4").Value = objRecordset.Fields.Item("weeks")
    qd.Execute
    objRecordset.MoveNext
Loop

' Close Database connection
data_base.Close

Заранее благодарю за любую помощь! Натан


person nathansizemore    schedule 13.07.2012    source источник


Ответы (1)


Избавьтесь от строки On Error Resume Next. Его почти никогда не следует использовать. Из-за этой строки вы понятия не имеете, где возникает ошибка, вызывающая цикл.

Еще одна хорошая идея — всегда использовать Option Explicit в начале каждого модуля. Это гарантирует, что вы всегда объявляете свои переменные, и избавляет от большего количества проблем, чем кто-либо мог подумать.

person Fionnuala    schedule 13.07.2012
comment
Хотел бы я +2, потому что вы на высоте и с On Error Resume Next, и с Option Explicit. - person Chris Kent; 13.07.2012
comment
@Remou, в последнее время ты мой герой. Спасибо! - person nathansizemore; 13.07.2012