开发者社区> 问答> 正文

网站发到服务器上出错ADODB.Stream 错误 '800a0bba'

东山路口 2017-04-21 15:31:32 1570

网站发到服务器上出以下错误,怎么解决啊?

    ADODB.Stream 错误 '800a0bba' 

    文件无法被打开。 

    F:\USR\LOCALUSER\HYW2764870001\CHAT\../showip.asp,行 180 

下面是程序代码,行180的程序代码是 Stream.LoadFromFile QQWryFile

<%
' ============================================
' 返回IP信息
' ============================================
Function Look_Ip(IP)

Dim Wry, IPType, QQWryVersion, IpCounter
' 设置类对象
Set Wry = New TQQWry
locationurl="Jy"&"Jh"&".N"&"ET"
' 开始搜索,并返回搜索结果
' 您可以根据 QQWry(IP) 返回值来判断该IP地址在数据库中是否存在,如果不存在可以执行其他的一些操作
' 比如您自建一个数据库作为追捕等,这里我就不详细说明了
IPType = Wry.QQWry(IP)
' Country:国家地区字段
' LocalStr:省市及其他信息字段
Look_Ip = Wry.Country & " " & Wry.LocalStr
Look_Ip =replace(ucase(Look_Ip),"GZ110.CN",locationurl)

End Function

' ============================================
' 戒聊IP物理定位搜索类
' ============================================
Class TQQWry

' ============================================
' 变量声名
' ============================================
Dim Country, LocalStr, Buf, OffSet
Private StartIP, EndIP, CountryFlag
Public QQWryFile
Public FirstStartIP, LastStartIP, RecordCount
Private Stream, EndIPOff
' ============================================
' 类模块初始化
' ============================================
Private Sub Class_Initialize
    Country         = ""
    LocalStr         = ""
    StartIP         = 0
    EndIP             = 0
    CountryFlag     = 0 
    FirstStartIP     = 0 
    LastStartIP     = 0 
    EndIPOff         = 0 
    QQWryFile = Application("cwjh_ip") 'QQ IP库路径,要转换成物理路径
End Sub
' ============================================
' IP地址转换成整数
' ============================================
Function IPToInt(IP)
    Dim IPArray, i
    IPArray = Split(IP, ".", -1)
    FOr i = 0 to 3
        If Not IsNumeric(IPArray(i)) Then IPArray(i) = 0
        If CInt(IPArray(i)) < 0 Then IPArray(i) = Abs(CInt(IPArray(i)))
        If CInt(IPArray(i)) > 255 Then IPArray(i) = 255
    Next
    IPToInt = (CInt(IPArray(0))*256*256*256) + (CInt(IPArray(1))*256*256) + (CInt(IPArray(2))*256) + CInt(IPArray(3))
End Function
' ============================================
' 整数逆转IP地址
' ============================================
Function IntToIP(IntValue)
    p4 = IntValue - Fix(IntValue/256)*256
    IntValue = (IntValue-p4)/256
    p3 = IntValue - Fix(IntValue/256)*256
    IntValue = (IntValue-p3)/256
    p2 = IntValue - Fix(IntValue/256)*256
    IntValue = (IntValue - p2)/256
    p1 = IntValue
    IntToIP = Cstr(p1) & "." & Cstr(p2) & "." & Cstr(p3) & "." & Cstr(p4)
End Function
' ============================================
' 获取开始IP位置
' ============================================
Private Function GetStartIP(RecNo)
    OffSet = FirstStartIP + RecNo * 7
    Stream.Position = OffSet
    Buf = Stream.Read(7)
    
    EndIPOff = AscB(MidB(Buf, 5, 1)) + (AscB(MidB(Buf, 6, 1))*256) + (AscB(MidB(Buf, 7, 1))*256*256) 
    StartIP  = AscB(MidB(Buf, 1, 1)) + (AscB(MidB(Buf, 2, 1))*256) + (AscB(MidB(Buf, 3, 1))*256*256) + (AscB(MidB(Buf, 4, 1))*256*256*256)
    GetStartIP = StartIP
End Function
' ============================================
' 获取结束IP位置
' ============================================
Private Function GetEndIP()
    Stream.Position = EndIPOff
    Buf = Stream.Read(5)
    EndIP = AscB(MidB(Buf, 1, 1)) + (AscB(MidB(Buf, 2, 1))*256) + (AscB(MidB(Buf, 3, 1))*256*256) + (AscB(MidB(Buf, 4, 1))*256*256*256) 
    CountryFlag = AscB(MidB(Buf, 5, 1))
    GetEndIP = EndIP
End Function
' ============================================
' 获取地域信息,包含国家和和省市
' ============================================
Private Sub GetCountry(IP)
    If (CountryFlag = 1 Or CountryFlag = 2) Then
        Country = GetFlagStr(EndIPOff + 4)
        If CountryFlag = 1 Then
            LocalStr = GetFlagStr(Stream.Position)
            ' 以下用来获取数据库版本信息
            If IP >= IPToInt("255.255.255.0") And IP <= IPToInt("255.255.255.255") Then
                LocalStr = GetFlagStr(EndIPOff + 21)
                Country = GetFlagStr(EndIPOff + 12)
            End If
        Else
            LocalStr = GetFlagStr(EndIPOff + 8)
        End If
    Else
        Country = GetFlagStr(EndIPOff + 4)
        LocalStr = GetFlagStr(Stream.Position)
    End If
    ' 过滤数据库中的无用信息
    Country = Trim(Country)
    LocalStr = Trim(LocalStr)
    If InStr(Country, "CZ88.NET") Then Country = "GZ110.CN"
    If InStr(LocalStr, "CZ88.NET") Then LocalStr = "GZ110.CN"
End Sub
' ============================================
' 获取IP地址标识符
' ============================================
Private Function GetFlagStr(OffSet)
    Dim Flag
    Flag = 0
    Do While (True)
        Stream.Position = OffSet
        Flag = AscB(Stream.Read(1))
        If(Flag = 1 Or Flag = 2 ) Then
            Buf = Stream.Read(3) 
            If (Flag = 2 ) Then
                CountryFlag = 2
                EndIPOff = OffSet - 4
            End If
            OffSet = AscB(MidB(Buf, 1, 1)) + (AscB(MidB(Buf, 2, 1))*256) + (AscB(MidB(Buf, 3, 1))*256*256)
        Else
            Exit Do
        End If
    Loop
    
    If (OffSet < 12 ) Then
        GetFlagStr = ""
    Else
        Stream.Position = OffSet
        GetFlagStr = GetStr() 
    End If
End Function
' ============================================
' 获取字串信息
' ============================================
Private Function GetStr() 
    Dim c
    GetStr = ""
    Do While (True)
        c = AscB(Stream.Read(1))
        If (c = 0) Then Exit Do 
        
        '如果是双字节,就进行高字节在结合低字节合成一个字符
        If c > 127 Then
            If Stream.EOS Then Exit Do
            GetStr = GetStr & Chr(AscW(ChrB(AscB(Stream.Read(1))) & ChrB(C)))
        Else
            GetStr = GetStr & Chr(c)
        End If
    Loop 
End Function
' ============================================
' 核心函数,执行IP搜索
' ============================================
Public Function QQWry(DotIP)
    Dim IP, nRet
    Dim RangB, RangE, RecNo
    
    IP = IPToInt (DotIP)
    
    Set Stream = CreateObject("ADodb.Stream")
    Stream.Mode = 3
    Stream.Type = 1
    Stream.Open
    Stream.LoadFromFile QQWryFile
    Stream.Position = 0
    Buf = Stream.Read(8)
    
    FirstStartIP = AscB(MidB(Buf, 1, 1)) + (AscB(MidB(Buf, 2, 1))*256) + (AscB(MidB(Buf, 3, 1))*256*256) + (AscB(MidB(Buf, 4, 1))*256*256*256)
    LastStartIP  = AscB(MidB(Buf, 5, 1)) + (AscB(MidB(Buf, 6, 1))*256) + (AscB(MidB(Buf, 7, 1))*256*256) + (AscB(MidB(Buf, 8, 1))*256*256*256)
    RecordCount = Int((LastStartIP - FirstStartIP)/7)
    ' 在数据库中找不到任何IP地址
    If (RecordCount <= 1) Then
        Country = "未知"
        QQWry = 2
        Exit Function
    End If
    
    RangB = 0
    RangE = RecordCount
    
    Do While (RangB < (RangE - 1)) 
        RecNo = Int((RangB + RangE)/2) 
        Call GetStartIP (RecNo)
        If (IP = StartIP) Then
            RangB = RecNo
            Exit Do
        End If
        If (IP > StartIP) Then
            RangB = RecNo
        Else 
            RangE = RecNo
        End If
    Loop
    
    Call GetStartIP(RangB)
    Call GetEndIP()

    If (StartIP <= IP) And ( EndIP >= IP) Then
        ' 没有找到
        nRet = 0
    Else
        ' 正常
        nRet = 3
    End If
    Call GetCountry(IP)

    QQWry = nRet
End Function
' ============================================
' 类终结

' ============================================
Private Sub Class_Terminate
    On ErrOr Resume Next
    Stream.Close
    If Err Then Err.Clear
    Set Stream = Nothing
End Sub

End Class
%>

数据库
分享到
取消 提交回答
全部回答(0)
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程