有一個读卡器,是USB 接口的,不需要驅動(當然是win2000或xp系統下), 當用戶刷ID卡(非接觸式的)時, 電腦會接受一個10位的物理號碼(全是0-9的數字),就像鍵盤輸入的一樣.我想做一個身份驗證的程序,當用戶一刷卡時(只有一個刷卡的動作,不用點擊任何按鍵), 接受這個10位號碼, 與數據庫預存的數據比對,比對一致通過,否則報錯.我是這樣處理的: 在Form 上放一個Edit控件(不可見), 接受刷卡的數據,
問題的重點是:我不知道在Edit的什么時件中寫這個比對的代碼, 而且Edit的Text會一直累加刷卡的號碼請教各位,如何實現,或者是我這種方式不正確謝謝!

解决方案 »

  1.   

    这种读卡器和一些条码扫描器差不多
    以前做过2代身份证的一些应用,有的读卡器和你说的差不多有两种思路1.响应usb读卡器的“键盘”事件
    2.采用你的方法。(可以在edit的onChange事件中比对,比对完成后清空)
      另,这方法可能得要求你的edit有焦点
      

  2.   

    加个timer  1秒就读一次卡的序列号
      

  3.   

    为什么要加Edit呢?这种设计本来就有问题,你把数取到了,直接比对,不比写到Edit强?就算要加显示的东西也要用列表Grid呀,一次写一行,不用的就清掉,自己不是更好控制吗?
      

  4.   


    多謝runer 的回复
    你說的第1種方法, 我不知道“键盘”事件有哪几種,我試了keypress,keydown, 它們帶的參數key 都只是一個字符(當前輸的單個字符),我不知如何取刷卡的整個字符(有10個字符)
    第2種方法,我說了這個Edit是不可見的,也就是說它不能得到焦点!請教,有什么解決之道嗎!謝謝!
      

  5.   

    读取到序列号信息后用sql语句查询数据库啊,貌似这种东西用数据库最好实现,特别是数据库大的情况下
      

  6.   

    按我的理解你已经读到了数据,因为你说Edit的Text會一直累加刷卡的號碼
    那你就在edit的文本变更事件中写代码啊
    首先检查text有没有10位,
    有了10位再和数据库中的比较,正确/不正确应该怎么处理你自己想
    处理完之后清除text
      

  7.   


    第2種方法,我說了這個Edit是不可見的,也就是說它不能得到焦点!
      

  8.   


    我这种id读卡器沒有什么參數可調,usb接口,插上去就可用,沒有任何開關
      

  9.   

    你用的是通用的读卡器 在鼠标焦点处输入射频卡物理卡号
    不像我们用DLL或操作读卡器读出物理卡号
    放1个timer
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      sCardid:string;
    begin
      Timer1.Enabled:=False;
      Edit1.SetFocus; //edit1获取焦点
      if Trim(Edit1.Text)='' then
      begin
        Timer1.Enabled:=True
      end
      else
      begin
        sCardid:=Trim(Edit1.Text);
        //送入卡号 检索数据库
      end;
    end;试试看
      

  10.   

    你可以把edit放出来 当密码框使用 显示字符******
      

  11.   

    读卡器应该最后都加回车的,可以用keypress事件,逐个把字符合起来不就是一串了吗.收到#13后就比对
      

  12.   

    如果真的不能截到回车的话  那你只能在keypress中判断输入长度了,如果你的id是固定10位的话
      

  13.   

    多謝各位,最終我是在formkeypress中判断输入长度,再比對的