javawebsoa

         今天被这个函数搞晕了,按以前开发设备的经验,应该是先找到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;



 


分类:

技术点:

相关文章:

  • 2021-09-25
  • 2021-11-22
  • 2021-10-10
  • 2021-12-31
  • 2021-12-31
  • 2022-01-05
猜你喜欢
  • 2021-10-05
  • 2021-12-31
  • 2021-09-02
  • 2021-09-02
  • 2021-09-02
相关资源
相似解决方案