Adodb.Stream 使用錯誤記錄: 錯誤 '800a0bb9' 引數型別不正確,或不在可以接受的範圍之內,或與其他引數衝突。
阿新 • • 發佈:2018-12-31
為測試用Adodb.Stream中文轉碼,寫了個函式
結果:ADODB.Stream錯誤 '800a0bb9' 引數型別不正確,或不在可以接受的範圍之內,或與其他引數衝突。Function Encode() dim ax,stm ax=chrb(233)&chrb(152)&chrb(191) Set stm = server.CreateObject("Adodb.Stream") stm.mode = 3 stm.Type = 1 stm.Open stm.Write ax stm.Position = 0 stm.Type = 2 stm.charset = "utf-8" Encode = stm.readtext stm.close Set stm=nothing End Function
原來是變數型別錯誤,輸入的變數必須是單位元組陣列,上面的 AX成了字串了,故出錯。
excel裡面簡單更改後正確:
Sub Encode() Dim ax() As Byte, stm, Encodex ReDim ax(2) ax(0) = 233 ax(1) = 152 ax(2) = 191 Set stm = CreateObject("Adodb.Stream") stm.Mode = 3 stm.Type = 1 stm.Open '//stm.LoadFromFile filePath stm.Write ax stm.Position = 0 stm.Type = 2 stm.Charset = "utf-8" Encodex = stm.ReadText stm.Close Set stm = Nothing End Sub
另外一段會造成這個錯誤的程式碼如下:
FormSize=Request.TotalBytes FormData=Request.BinaryRead(FormSize) CLStr=ChrB(13)&ChrB(10) DataStart=InStrB(FormData,CLStr&CLStr)+4 '4是兩對回車換行符的長度 DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1) DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2 FormData=MidB(FormData,DataStart,DataSize) 'midb這個處理出來的二進位制流串根本不能用於ADODB.Stream .Write提交 set str=server.CreateObject("ADODB.Stream") 'str為源資料流 str.Mode=3 '設定開啟模式,3為可讀可寫 str.Type=1 '設定資料型別,1為二進位制資料 str.Open str.Write FormData '這裡必然報錯
上面的這個程式碼想當然的使用MIDB來處理二進位制流,殊不知,MIDB返回的已經不再是二進位制流,而是變成了單個長字串,所以根本不能這樣用,被這段程式碼害了一個晚上。。。。。
ADODB.Stream .Write '的輸入引數在ASP裡面正確的做法是 .copyto write_stream,second_enter-first_enter-3, 利用 .copyto直接擷取位元組流