dim rsUser as Recoreset
Dim user   As String, psw As StringWith rsUser
        .Index = tbUser.Indexes("PrimaryIndex").Name
        .MoveFirst
        .Seek "=", user, psw
        If .NoMatch Then
            MsgBox "请输入正确的用户名及密码"
            PassWord.Text = ""
            UserName.Text = ""
            Exit Sub
        End If
    End With用Seek函数向数据库中查询所指定的数据是否存在,
在这里数据库中仅有一条记录(为了方便,我就放了一条记录)Username字段=“admin”,Password 字段=“ admin”
我用Seek来根据user和psw来查询数据库中是否有这条记录,但是奇怪的问题发生了,当user="admin",pws="admin"时函数查询成功(符合正常的),当user="Admin",pws="Admin"时函数查询仍然成功(不符合),
当user="Admin     ",pws="Admin       "时函数查询仍然成功(不符合正常的)
好像Seek函数不区分字符串中的大小写,这是怎么回事呢??困扰我了,呜呜呜,大家给看看一下 啊,小弟感激不尽,谢谢如果我说的不清楚请加我QQ646639655
谢谢啦,各位!!!!!!!!!!!!!

解决方案 »

  1.   

    Seek 估计是直接通过数据库的索引进行查找,应此与数据库的行为一致:
    如果数据库字段是不区分大小写的,查找 "Admin" 当然是匹配的。
    如果字段类型是定长文本(比如 SQL Server 的 Char),末尾的空格是不算差异的,所以查找 "Admin    " 也是匹配的。
      

  2.   

    谢谢您,数据库是Access,那么根据您说的这个情况,我怎么防止这种情况呢,
      

  3.   

    对了,Seek的  user ,psw是String类型,对应数据库中的字段类型是DAO.datatypenume.dbtext类型,是不是dbtext这个数据类型有什么特殊的地方吗??
      

  4.   

    Access 就是不区分大小写和末尾空格的。
    要区分必须在表中加冗余字段。
    1)比如:user 对应的冗余字段为 userHex,如果没有中文字段长度是 user 的 2 倍,如果有中文就是 4 倍。
    2)保证每次写入 user 字段时都要同时用下面的 StringHex() 函数结果写入 userHex 字段。
    比如: user 写入 "admin",userHex 写入 StringHex("admin") 的结果 "61646D696E"
    3)改用用 userHex 创建索引,并且用 userHex 进行 Seek
    因为分别用 {"amin","Admin","Admin    "} 调用 StringHex() 的结果不同 {"61646D696E", "41646D696E", "41646D696E20202020"},只能在完全相等时才匹配。Function StringHex(ByVal str As String) As String
        Dim a() As Byte
        Dim sHex As String
        Dim i As Long
        
        If LenB(str) = 0 Then Exit Function
        
        a = StrConv(str, vbFromUnicode)
        sHex = Space((UBound(a) + 1) * 2)
        For i = 0 To UBound(a)
            Mid$(sHex, i * 2 + 1, 2) = Right$("0" & Hex(a(i)), 2)
        Next
        
        StringHex = sHex
    End Function
      

  5.   

    DAO很久沒有有了。把兩欄位合並,使用Find方法更簡單。
    再幫你頂一下吧。