中控 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;

浙公网安备 33010602011771号