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直接截取字節流


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章