1. 程式人生 > >Adodb.Stream 使用錯誤記錄: 錯誤 '800a0bb9' 引數型別不正確,或不在可以接受的範圍之內,或與其他引數衝突。

Adodb.Stream 使用錯誤記錄: 錯誤 '800a0bb9' 引數型別不正確,或不在可以接受的範圍之內,或與其他引數衝突。

為測試用Adodb.Stream中文轉碼,寫了個函式

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 
結果:ADODB.Stream錯誤 '800a0bb9'  引數型別不正確,或不在可以接受的範圍之內,或與其他引數衝突。

原來是變數型別錯誤,輸入的變數必須是單位元組陣列,上面的 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直接擷取位元組流