2012-07-16 116 views
0

我工作的這個代碼,但它給了我一個錯誤說thatError類型: ADODB.Recordset(0x800A0E79) 不允許操作時該對象是打開的。我從來沒有遇到過這個錯誤。我試圖做的是當一個新文件被摻雜在特定文件夾中時更新訪問文件。我用excel做了同樣的事情,這是完美的工作,當我添加訪問部分,它給了我錯誤。這裏是我的代碼,如果我能得到一些幫助,這很好。錯誤類型:ADODB.Recordset(0x800A0E79)操作時,不允許對象處於打開

<!--#include file="header.inc"--> 
<% 

file = Request.querystring("file") 

file = "C:\Reports\" & file 

log("UPDATE UTILITY RUN---------" & file) 

'Initialize Connection to report 

Const adOpenStatic = 3 

Const adLockOptimistic = 3 

Const adCmdText = &H0001 

Set objConnection = CreateObject("ADODB.Connection") 

Set rows = CreateObject("ADODB.Recordset") 

objConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 

    "Data Source=" & file & ";" & _ 

     "Extended Properties=" & Chr(34) & "Excel 12.0 Xml;HDR=No;IMEX=1" & Chr(34) & ";" 


'Initlialize Connection to Data 

Set objConnection2 = CreateObject("ADODB.Connection") 

Set rows2 = CreateObject("ADODB.Recordset") 

objConnection2.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 

    "Data Source=" & Server.MapPath("data.xlsx") & ";" & _ 

     "Extended Properties=" & Chr(34) & "Excel 12.0 Xml;HDR=Yes;IMEX=0" & Chr(34) & ";" 


'initialize Connection3 to Data 

Set objConnection3 = CreateObject("ADODB.Connection") 

Set rows3 = CreateObject("ADODB.Recordset") 

objConnection3.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & 
Server.MapPath("tracker_dev_nik.accdb") & ";Persist Security Info=False;"  


'Query the spreadsheet 

rows.Open "Select * FROM [WC-Stages$]", _ 

    objConnection, adOpenStatic, adLockOptimistic, adCmdText 



'Print off the row's data 

DIM JUR 

DIM WC 

DIM WC_NAME 

DIM PRIORITY 

DIM REP 

DIM DELIVER 

DIM ACCEPT 

DIM REJECT 

DIM REDELIVER 

DIM STATUS 

DIM SDATE 

DIM DATA_STATUS 

DIM DATA_STATUS_2 

DIM DATA_SDATE 

DIM DATA_SDATE_2 

Do Until rows.EOF 

    JUR = rows.Fields("F3").Value 

    WC = rows.Fields("F4").Value 

    WC_NAME = rows.Fields("F5").Value 

    PRIORITY = rows.Fields("F7").Value 

    REP = rows.Fields("F23").Value 

    DELIVER = rows.Fields("F22").Value 

    ACCEPT = rows.Fields("F24").Value 

    REJECT = rows.Fields("F25").Value 

    REDELIVER = rows.Fields("F26").Value 

    STATUS = "" 

    SDATE = "" 

    DATA_STATUS = "" 

    DATA_SDATE = "" 

    IF NOT (JUR = "" OR JUR = "Jur") THEN 'Ignore invalid rows (first two and 

last three) 

     If IsNull(DELIVER) THEN 

      STATUS = "undelivered" 

      SDATE = "1/1/2000" 

     ELSE 

      IF IsNull(ACCEPT) THEN 

       IF IsNull(REJECT) THEN 

        STATUS = "delivered" 

        SDATE = DELIVER 

       ELSE 

        IF IsNull(REDELIVER) THEN 

         STATUS = "rejected" 

         SDATE = REJECT 

        ELSE 

         STATUS = "redelivered" 

         SDATE = REDELIVER 

        END IF 

       END IF 

      ELSE 

       STATUS = "accepted" 

       SDATE = ACCEPT 

      END IF 

     END IF 



     query = "SELECT * FROM [Sheet1$] WHERE JUR = '" & JUR & "' AND WC = " & WC 

     rows2.Open query, _ 

      objConnection2, adOpenStatic, adLockOptimistic, adCmdText 



     'For access database connection 

     query = "SELECT * FROM [Sheet1] WHERE JUR = '" & JUR & "' AND WC = " & WC 

     rows3.Open query, _ 

      objConnection3, adOpenStatic, adLockOptimistic, adCmdText 



     ' DATA_STATUS = rows2.Fields("Status").Value 

     ' DATA_SDATE = rows2.Fields("SDate").Value 


     DATA_STATUS = rows3.Fields("Status").Value 

     DATA_SDATE= rows3.Fields("SDate").Value 









     if dateafter(SDATE, DATA_SDATE) AND STATUS <> DATA_STATUS then 

      'Need to update the data with the new value 

      log("UPDATE: " & jur & ":" & wc & "has been changed to " & STATUS) 

      query = "UPDATE [Sheet1] SET [STATUS] = '" & STATUS & "', [SDATE] = 

'" & SDATE & "' WHERE [JUR] = '" & JUR & "' AND [WC] = " & WC 


      response.write(query) 


      objConnection3.execute(query) 

     END IF 

     rows2.close 
    END IF 
    rows.MoveNext 
Loop 


log("UPDATE COMPLETE")  
     %> 

<!--#include file="footer.inc"--> 

感謝 聶

+1

我不能肯定地說,當你接近rows2,你離開開放rows3 – Steve 2012-07-16 14:19:56

+1

我會說你有沒有答案@Steve。 – Fionnuala 2012-07-16 14:33:06

回答

1

看你的代碼,我注意到,你的循環內您關閉Recordset rows2,但你忘了還關閉Recordset rows3。因此,在第一個循環之後的下一個循環中,當您嘗試重新打開rows3 Recordset時,會收到錯誤消息。
速戰速決是:

.... 
    rows2.close 
    rows3.Close 
END IF 
相關問題