2015-03-13 1 views
0

Я использую Access 2010 VBA, который возвращает набор записей из IBM iSeries. У меня есть следующий цикл для добавления записей в локальную таблицу:Ошибка времени выполнения 91: переменная объекта или с переменной блока не установлена ​​

'Loop through recordset and place values 
    Do While rsti401.EOF = False 
Set rst401 = CurrentDb.OpenRecordset("tblLocal_SL401WK", dbOpenDynaset, dbSeeChanges) 
With rst401 
    .AddNew 
    .Fields("PC") = rsti401.Fields("PC") 
    .Fields("TIME") = rsti401.Fields("TIME") 
    .Fields("CONO") = rsti401.Fields("CONO") 
    .Fields("STYCOL") = rsti401.Fields("STYCOL") 
    .Fields("WHSE") = rsti401.Fields("WHSE") 
    .Fields("CUNO") = rsti401.Fields("CUNO") 
    .Fields("SIZE01") = rsti401.Fields("SIZE01") 
    .Fields("SIZE02") = rsti401.Fields("SIZE02") 
    .Fields("SIZE03") = rsti401.Fields("SIZE03") 
    .Fields("SIZE04") = rsti401.Fields("SIZE04") 
    .Fields("SIZE05") = rsti401.Fields("SIZE05") 
    .Fields("SIZE06") = rsti401.Fields("SIZE06") 
    .Fields("SIZE07") = rsti401.Fields("SIZE07") 
    .Fields("SIZE08") = rsti401.Fields("SIZE08") 
    .Fields("SIZE09") = rsti401.Fields("SIZE09") 
    .Fields("SIZE10") = rsti401.Fields("SIZE10") 
    .Fields("SIZE11") = rsti401.Fields("SIZE11") 
    .Fields("SIZE12") = rsti401.Fields("SIZE12") 
    .Fields("SIZE13") = rsti401.Fields("SIZE13") 
    .Fields("SIZE14") = rsti401.Fields("SIZE14") 
    .Fields("SIZE15") = rsti401.Fields("SIZE15") 
    .Fields("BQTY01") = rsti401.Fields("BQTY01") 
    .Fields("BQTY02") = rsti401.Fields("BQTY02") 
    .Fields("BQTY03") = rsti401.Fields("BQTY03") 
    .Fields("BQTY04") = rsti401.Fields("BQTY04") 
    .Fields("BQTY05") = rsti401.Fields("BQTY05") 
    .Fields("BQTY06") = rsti401.Fields("BQTY06") 
    .Fields("BQTY07") = rsti401.Fields("BQTY07") 
    .Fields("BQTY08") = rsti401.Fields("BQTY08") 
    .Fields("BQTY09") = rsti401.Fields("BQTY09") 
    .Fields("BQTY10") = rsti401.Fields("BQTY10") 
    .Fields("BQTY11") = rsti401.Fields("BQTY11") 
    .Fields("BQTY12") = rsti401.Fields("BQTY12") 
    .Fields("BQTY13") = rsti401.Fields("BQTY13") 
    .Fields("BQTY14") = rsti401.Fields("BQTY14") 
    .Fields("BQTY15") = rsti401.Fields("BQTY15") 
.Update 
End With 
rsti401.MoveNext 
Loop 


'close connections 
rsti401.Close 
rst401.Close 
IBM.Close 

Set IBM = Nothing 
Set rst401 = Nothing 
Set rsti401 = Nothing 
Set CMD = Nothing 

Однако, каждый раз, когда я запускаю его я останавливается на следующей строке:

rst401.Close 

с ошибкой «Ошибка времени выполнения 91' . Я не могу это решить. Я установил rst401 в начале, так почему я все еще получаю ошибку.

Любые указатели будут полезны.

Спасибо,

Майкл

+0

Вы указали «Dim Rst1401 As New RecordSet» перед установкой? –

+0

Попробуйте выполнить свой код в режиме отладки и посмотреть, как изменяется ваша переменная 'rst401' ([инструкции] (http://www.cpearson.com/excel/DebuggingVBA.aspx)). Если это не поможет, я предлагаю вам ознакомиться с этим для руководства: [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). –

+0

Я бы попытался использовать переменную базы данных вместо того, чтобы использовать CurrentDb: Dim dB as Recordset Set dB = CurrentDb. Или переместите линию нарушения в блок С. – AVG

ответ

1

Проблема у вас есть, потому что rst401 установлен внутри Do While Loop, и вы пытаетесь закрыть объект, который потерял свою сферу вне цикла. Предложите внести следующие изменения.

'Loop through recordset and place values 
Set rst401 = CurrentDb.OpenRecordset("tblLocal_SL401WK", dbOpenDynaset, dbSeeChanges) 

Do While rsti401.EOF = False   
    With rst401 
     .AddNew 
     .Fields("PC") = rsti401.Fields("PC") 
     .Fields("TIME") = rsti401.Fields("TIME") 
     .Fields("CONO") = rsti401.Fields("CONO") 
     .Fields("STYCOL") = rsti401.Fields("STYCOL") 
     .Fields("WHSE") = rsti401.Fields("WHSE") 
     .Fields("CUNO") = rsti401.Fields("CUNO") 
     .Fields("SIZE01") = rsti401.Fields("SIZE01") 
     .Fields("SIZE02") = rsti401.Fields("SIZE02") 
     .Fields("SIZE03") = rsti401.Fields("SIZE03") 
     .Fields("SIZE04") = rsti401.Fields("SIZE04") 
     .Fields("SIZE05") = rsti401.Fields("SIZE05") 
     .Fields("SIZE06") = rsti401.Fields("SIZE06") 
     .Fields("SIZE07") = rsti401.Fields("SIZE07") 
     .Fields("SIZE08") = rsti401.Fields("SIZE08") 
     .Fields("SIZE09") = rsti401.Fields("SIZE09") 
     .Fields("SIZE10") = rsti401.Fields("SIZE10") 
     .Fields("SIZE11") = rsti401.Fields("SIZE11") 
     .Fields("SIZE12") = rsti401.Fields("SIZE12") 
     .Fields("SIZE13") = rsti401.Fields("SIZE13") 
     .Fields("SIZE14") = rsti401.Fields("SIZE14") 
     .Fields("SIZE15") = rsti401.Fields("SIZE15") 
     .Fields("BQTY01") = rsti401.Fields("BQTY01") 
     .Fields("BQTY02") = rsti401.Fields("BQTY02") 
     .Fields("BQTY03") = rsti401.Fields("BQTY03") 
     .Fields("BQTY04") = rsti401.Fields("BQTY04") 
     .Fields("BQTY05") = rsti401.Fields("BQTY05") 
     .Fields("BQTY06") = rsti401.Fields("BQTY06") 
     .Fields("BQTY07") = rsti401.Fields("BQTY07") 
     .Fields("BQTY08") = rsti401.Fields("BQTY08") 
     .Fields("BQTY09") = rsti401.Fields("BQTY09") 
     .Fields("BQTY10") = rsti401.Fields("BQTY10") 
     .Fields("BQTY11") = rsti401.Fields("BQTY11") 
     .Fields("BQTY12") = rsti401.Fields("BQTY12") 
     .Fields("BQTY13") = rsti401.Fields("BQTY13") 
     .Fields("BQTY14") = rsti401.Fields("BQTY14") 
     .Fields("BQTY15") = rsti401.Fields("BQTY15") 
     .Update 
    End With 
    rsti401.MoveNext 
Loop 

'close connections 
rsti401.Close 
rst401.Close 
IBM.Close 

Set IBM = Nothing 
Set rst401 = Nothing 
Set rsti401 = Nothing 
Set CMD = Nothing 
+0

Да, вы правы! Теперь он работает. Спасибо. – Michael

+0

Без проблем, пожалуйста! :) – PaulFrancis

Смежные вопросы

 Смежные вопросы