zoukankan      html  css  js  c++  java
  • 中控 X638考勤机编程 SetStrCardNumber 用法

             今天被这个函数搞晕了,按以前开发设备的经验,应该是先找到ID项,再为此ID设置CardNumber;但中控这个有点搞笑是先设置,再用SetUserInfo写入的;

             经反复测试,得到的结论是SetStrCardNumber 函数只是起到给用户信息添加了个CardNumber属性并给了值(完全是个人理解)。即使设备上不存在该ID都是可以的。


    实际例子如下:


    procedure TfrmMain.btnRestoreClick(Sender: TObject);
    var i,Max,Value:integer;
      tmp: array[0..2047]of byte;
      MS: TmemoryStream;
      CZKEM:TCZKEM;
      Qry:TADOQuery;
      _EmpName,_PassWord,_CardNo:WideString;
      _EmpNo,_EmpRight:integer;
      _Enabled:WordBool;
    begin
      if not IsConn then
      begin
        MessageBox(self.Handle,'出错!数据库没有连接!','提示',MB_OK or MB_ICONWARNING);
        Exit;
      end;
      if LView1.Items.Count<1 then exit;
      if LView1.Selected=nil then
      begin
        MessageBox(self.Handle,'请选择一个设备!!','提示',MB_OK or MB_ICONWARNING);
        Exit;
      end;
      if LView1.Selected.ImageIndex=0 then
      begin
        MessageBox(self.Handle,PChar('连接设备 '+trim(LView1.Selected.Caption)+
        ' 后再重试!'),'提示',MB_OK or MB_ICONWARNING);
        Exit;
      end;
      CZKEM:=GetCZKEM(trim(LView1.Selected.Caption),i);
      if CZKEM=nil then exit;
      MS:=TmemoryStream.Create;
      Qry:=TADOQuery.Create(nil);
      Qry.Connection:=ADOConn;
      try
        Qry.SQL.Add('select * from ZK_Userinfo order by fEmpNo');
        Qry.Active:=True;
        if not Qry.Eof  then
        begin
          ShowWinWait(Self,'正在上传用户资料,请等待.....',true);
          Max:=Qry.RecordCount;
          Value:=0;
          WinWaitProgressBar(Max,Value);
          Application.ProcessMessages;
          while not Qry.Eof do
          begin
            Inc(Value);
            WinWaitProgressBar(Max,Value);
            Application.ProcessMessages;
              //设置卡号信息
              if  length(Qry.fieldbyName('fCardNo').AsString)>0 then begin
                _CardNo:=Qry.fieldbyName('fCardNo').AsString;
                if CZKEM.SetStrCardNumber(_CardNo) then begin
                   AddLogInfo('设置卡号 '+Qry.FieldbyName('fEmpNo').AsString+'-'+_CardNo+' 成功!');
                end
                else begin
                   AddLogInfo('设置卡号 '+Qry.FieldbyName('fEmpNo').AsString+' error!');
                end;
              end;
            //--------先设置用户-------------
            if CZKEM.SetUserInfo(1,Qry.FieldbyName('fEmpNo').AsInteger,
                    Qry.FieldbyName('fEmpName').AsString,
                    Qry.FieldbyName('fPassWord').AsString,
                    Qry.FieldbyName('fEmpRight').AsInteger,
                    true) then
            begin
              //设置指纹信息
              if not Qry.FieldByName('fTEMPLate').IsNull then begin
                 MS.Clear;//
                 TBlobField(Qry.FieldbyName('fTEMPLate')).SaveToStream(MS);
                 MS.Position:=0;//
                 ZeroMemory(@tmp[0],MS.Size);
                 MS.ReadBuffer(tmp[0],MS.Size);
                 if CZKEM.SetUserTmpEx(1,Qry.FieldbyName('fEmpNo').AsString
                     ,Qry.FieldbyName('fFindID').AsInteger
                     ,Qry.FieldbyName('fFlag').AsInteger
                     ,pbyte(@tmp[0])^) then begin
                   AddLogInfo('设置指纹 '+Qry.FieldbyName('fEmpNo').AsString+' 成功!');
                 end
                 else begin
                   AddLogInfo('设置指纹 '+Qry.FieldbyName('fEmpNo').AsString+' error!');
                 end;
              end;
              AddLogInfo('设置人员 '+Qry.FieldbyName('fEmpNo').AsString+' 成功!');
            end
            else begin
               AddLogInfo('设置人员 '+Qry.FieldbyName('fEmpNo').AsString+' 失败!');
            end;
            Qry.Next;
          end;
        end;
      finally
        Ms.Free;
        Qry.Free;
        HideWinWait;
      end;
    end;
    




  • 相关阅读:
    js 进度条效果
    js切换背景颜色
    div定时放大缩小
    html图片拖放
    网站滑到指定的位置给div添加动画效果
    播放视频
    git (Linux(Centos)安装及使用教程)
    PHP 预定义常量(魔术常量)
    【POJ3254】Corn Fields
    树形DP初探•总结
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3047759.html
Copyright © 2011-2022 走看看