2014-03-24 42 views
0

我有vbs文件。它將從sql server 2000數據庫中獲取記錄。 使用do while循環, 然後提取數據列從記錄中設置 使用蒸汽對象,創建文件&寫的zip文件 的內容,但我得到無限循環。VB腳本ADODB.Stream創建無限while循環

請找到樣本數據庫記錄

FILE_ID FILE_NAME FILE_CONTENT(BLOB數據類型)

23127376 File_1 afdfasdf253asdf6asdf52asd45fasf

23127377 File_2 afdfasdf253asdf6asdf52asd45fasf

23127378 File_3 afdfasdf253asdf6asdf52asd45fasf

23127379 File_4 afdfasdf253asdf 6asdf52asd45fasf

23127380 File_5 afdfasdf253asdf6asdf52asd45fasf

23127381 File_6 afdfasdf253asdf6asdf52asd45fasf

23127382 File_7 afdfasdf253asdf6asdf52asd45fasf

23127383 File_8 afdfasdf253asdf6asdf52asd45fasf

23127384 File_9 afdfasdf253asdf6asdf52asd45fasf

2 3127385 File_10 afdfasdf253asdf6asdf52asd45fasf

23127386 File_11 afdfasdf253asdf6asdf52asd45fasf

23127387 File_12 afdfasdf253asdf6asdf52asd45fasf

23127388 File_13 afdfasdf253asdf6asdf52asd45fasf

23127389 File_14 afdfasdf253asdf6asdf52asd45fasf

23127390 File_15 afdfasdf253asdf6asdf52asd45fasf

23127391 File_16 afdfasdf253asdf6asdf52asd45fasf

請查看下面

DO 
    Set lobjStream = CreateObject("ADODB.Stream") 
    lobjStream.Mode = 3 ' adModeReadWrite 3  Read/write. 
    lobjStream.Type = 1 ' adTypeBinary  1  Binary data 
    lobjStream.Open 
    SDFMB02_FILE_ID_K = ObjRS("SDFMB02_FILE_ID_K") 
    logMessage = "[Record] File ID (SDFMB02_FILE_ID_K) :: " & SDFMB02_FILE_ID_K 
    logFilte.WriteLine (logMessage) 
    lobjStream.Write ObjRS("DFMB02_FILE_BLOB_I").Value 
    lobjStream.SaveToFile ZipPath & ObjRS("DFMB02_FILE_N").Value, 2  
    ZipFile = ZipPath & ObjRS("DFMB02_FILE_N").Value  
    ZIPFldPath = Left(ObjRS("DFMB02_FILE_N").Value, Len(ObjRS("DFMB02_FILE_N").Value) - 4) 

    ObjRS.movenext 
    set lobjStream = Nothing 
Loop While ObjRS.EOF = False 

代碼一段時間後,我會得到無限循環。請查找此代碼的日誌。

[Record] File ID (SDFMB02_FILE_ID_K) :: 23127376 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127377 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127378 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127379 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127380 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127381 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127382 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127383 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127384 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127385 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127385 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127385 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127385 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127385 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127385 
[Record] File ID (SDFMB02_FILE_ID_K) :: 23127385 

能否請您協助在這個問題上

回答

1

你應該妥善處理檢查EOF在您這樣的語句,而不是while語句。您可以通過檢查上次保存的值來打破循環。

Dim lastsaved : lastsaved = "" 
Do While Not ObjRS.EOF 

    Set lobjStream = CreateObject("ADODB.Stream") 
    lobjStream.Mode = 3 ' adModeReadWrite 3  Read/write. 
    lobjStream.Type = 1 ' adTypeBinary  1  Binary data 
    lobjStream.Open 
    Dim check : check = ObjRS("SDFMB02_FILE_ID_K") 
    If lastsaved = check Then 
     Exit Do 
    Else 
     lastsaved = check 
     SDFMB02_FILE_ID_K = check 
    End If 
    logMessage = "[Record] File ID (SDFMB02_FILE_ID_K) :: " & SDFMB02_FILE_ID_K 
    logFilte.WriteLine (logMessage) 
    lobjStream.Write ObjRS("DFMB02_FILE_BLOB_I").Value 
    lobjStream.SaveToFile ZipPath & ObjRS("DFMB02_FILE_N").Value, 2  
    ZipFile = ZipPath & ObjRS("DFMB02_FILE_N").Value  
    ZIPFldPath = Left(ObjRS("DFMB02_FILE_N").Value, Len(ObjRS("DFMB02_FILE_N").Value) - 4) 

    ObjRS.movenext 
    Set lobjStream = Nothing 
Loop 
+0

+1。我通常也會檢查'BOF'。所以像'做雖然不ObjRS.BOF和不ObjRS.EOF'這可能是多餘的,但我不記得什麼.BOF和。EOF屬性值是記錄集返回零行時的值。 – DMason

+0

嗨Rich 1)這個循環對於10000條記錄可以正常工作,但是當超過80000條記錄時會出現懸掛問題。 2)總理看到你和我的動態循環在邏輯上是正確的。你能否詳細說明你和我的同時循環之間有什麼區別? – user3455793

+0

當然沒問題。我的循環檢查其最後一個值並查找更改。如果沒有更改,則退出do循環 – Rich