Call InitComm
    m_Quit = False
    Call DbConnect
    Dim Rs As New ADODB.Recordset
    Rs.Open "select * from User_Ctl", Cn, 3, 3
    ReDim m_Users(Rs.RecordCount)
    Dim i As Integer
    i = 0
    While Not (Rs.EOF)
        m_Users(i).userID = Rs("ID")
        m_Users(i).userName = Rs("用户名")
        If Rs("用户等级").Value <> "" Then
            m_Users(i).userGrade = Rs("用户等级")
        Else
            m_Users(i).userGrade = "1"
        End If
        If Rs("密码").Value <> "" Then
            m_Users(i).userPass = Rs("密码")
        Else
            m_Users(i).userPass = ""
        End If
        m_Users(i).userFingers = Rs("Address")
        CmbUser.AddItem m_Users(i).userName
        Rs.MoveNext
        i = i + 1
    Wend
    
    Rs.Close
    DbClose
    
    If CmbUser.ListCount > 0 Then
        CmbUser.ListIndex = 0
        iStep = 1
        Timer1.Interval = 200
        Timer1.Enabled = True
    Else
        Timer1.Enabled = False
        CmbUser.AddItem "whfj"
        CmbUser.ListIndex = 0
        MsgBox "系统还没设置用户,请用超级用户登陆!", vbExclamation + vbYes, "提示"
    End If
“m_Users(i).userFingers = Rs("Address")”---默认从ACCESS里面字段名Address的第一列数据,问题是在于,根据不同的FINGER其Address不同的。如何判断呢?

解决方案 »

  1.   

    “根据不同的FINGER其Address不同的”怎么个不同法?把你的规则清楚地写出来。
      

  2.   

    默认从ACCESS里面字段名Address的第一列数据
    ****************************************
    应该是第一行吧?循环也不应该只有第一行区分应该m_Users(i).userID 可以区分
      

  3.   

    看了你的说法,是说一个用户对应多个finger和address?类似如下:
    fuser_id fentry_id finger   faddress
    user1    1         finger1  address1
    user1    2         finger2  address2
      

  4.   

    Type Type_User
        userID As Integer
        userName As String
        userGrade As String
        userPass As String
        userFingers As String
        userFinger() As Byte
    End Type
    Public m_Users() As Type_User
    Public m_UsersId() As Type_User
    在登陆窗体,有个登录名为combobox,tabindex为3.
    现在的问题就是无论哪个手指登录(大拇指为1,其他手指就是2、3、4等等),其操作员均为1,不知道如何解决。
      

  5.   

    对,就是这个意思。
    问题是,多个finger和address均以address字段第一行的身份登录到系统。
      

  6.   

    Public Declare Function CmdLevelSearch Lib "MX_OTAPIDLL_V16.dll" (ByVal BufferID As Long, ByRef Address As Long, ByVal userInfo As String) As Integermatchs = CmdLevelSearch(CHAR_BUFFER_A, Address, userInfo)
    问题,是否可从CmdLevelSearch函数里面的Address参数取到Address的值呢,如果可以,那应该怎么写
      

  7.   

    那你的combo列表项就不要用userName来加。CmbUser.AddItem m_Users(i).userName & m_Users(i).userFingers 
      

  8.   

    你这个数据定义不合理。
    用类和集合来解决,一个人定义几个手指就建立几个对象。
    这样每个手指都有自己的 Address 了。PS:你的程序是不是还有外接设备?
      

  9.   

    如果用类和集合的话,
    先定义一个userFinger的类,
    再定义一个userFingers的集合,
    把你的用户Type_User类型改成class_user 类,
    里面定义一个userFingers集合的对象。
    这样你就可以每个用户多个userFinger了,想用几个就用几个,add 对象就是了。
    试试吧。呵呵,因为用类嘛,所以比较累。但定义完成后,比较好用。
      

  10.   

    呵呵,时间不够。
    现在的想法是
    matchs = CmdLevelSearch(CHAR_BUFFER_A, Address, userInfo)
    有没有什么办法可以得到Address的值在VB里面。
      

  11.   

    For j = 0 To UBound(m_Users) - 1
             matchs = CmdLevelSearch(CHAR_BUFFER_A, m_Users(j).userFingers, userInfo)
             If (matchs = 0) Then
             Picture1.AutoRedraw = True
             Set Picture1.Picture = LoadPicture(App.path & "\img\succ.bmp")
             PaintPicture Picture1, 0, 0
             lblMess.Caption = "找到相同!"
             m_CurrUser = m_Users(j)在Form_Load事件里面:
     While Not (Rs.EOF)
            m_Users(i).userID = Rs("ID")
            m_Users(i).userAddress = Rs("Address")
            m_Users(i).userName = Rs("用户名")
            If Rs("用户等级").Value <> "" Then
                m_Users(i).userGrade = Rs("用户等级")
            Else
                m_Users(i).userGrade = "1"
            End If
            If Rs("密码").Value <> "" Then
                m_Users(i).userPass = Rs("密码")
            Else
                m_Users(i).userPass = ""
            End If
            m_Users(i).userFingers = Rs("Address")
            CmbUser.AddItem m_Users(i).userName
            Rs.MoveNext
            i = i + 1
            Wend
    m_CurrUser = m_Users(j)怎么才能找到跟Form_Load取得联系?