📄 formdorset.pas
字号:
unit formdorset;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ToolWin, DBActns, ActnList, StdCtrls, Mask,
Grids, DBGrids, ExtCtrls,EastRiver,PrjConst, CheckLst,Functions, GB2Big5,inifiles,
DBCtrls, Db, ADODB, ImgList,shellapi, Buttons ;
const
xorch=$555555;
MYTRAY_MESSAGE=WM_USER+100;
UniqueAppStr='EastRiver 980';
arICID: array[0..2] of string=('D', 'C', ' ');
arBoolean: array[Boolean]of char=('0', '1');
arWeek: array[Boolean]of string=('', '*');
// arDoorStates: array[0..5]of string=(SAEOI, SAUAeEuG, SEuG, SAEuG, SAAE, SAAA);
type
Tformdoorset = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Bevel1: TBevel;
GroupBox1: TGroupBox;
edClockID: TEdit;
cbRate: TComboBox;
Label2: TLabel;
Label3: TLabel;
Label16: TLabel;
cbPort: TComboBox;
Button1: TButton;
Button2: TButton;
Timer1: TTimer;
DataSource1: TDataSource;
ADODataSet1: TADODataSet;
ADODataSet1workno: TStringField;
ADODataSet1cardno: TStringField;
ADODataSet1name: TStringField;
ADODataSet1dept: TStringField;
ADODataSet1times: TDateTimeField;
ADODataSet1reReader: TStringField;
ADODataSet1mark: TStringField;
ADODataSet1noid: TStringField;
ADODataSet1photo: TStringField;
Panel1: TPanel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label17: TLabel;
Image2: TImage;
DBText1: TDBText;
DBText2: TDBText;
DBText4: TDBText;
DBText5: TDBText;
DBText6: TDBText;
DBText7: TDBText;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
Panel2: TPanel;
Label1: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Image1: TImage;
DBText3: TDBText;
DBText8: TDBText;
DBText9: TDBText;
DBText10: TDBText;
DBText11: TDBText;
DBText12: TDBText;
Label9: TLabel;
DBText13: TDBText;
DBText14: TDBText;
Label15: TLabel;
ADODataSet2: TADODataSet;
DataSource2: TDataSource;
ADODataSet2workno: TStringField;
ADODataSet2cardno: TStringField;
ADODataSet2name: TStringField;
ADODataSet2dept: TStringField;
ADODataSet2times: TDateTimeField;
ADODataSet2reReader: TStringField;
ADODataSet2mark: TStringField;
ADODataSet2noid: TStringField;
ADODataSet2photo: TStringField;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton6: TToolButton;
ToolButton5: TToolButton;
tbnfind: TToolButton;
tbnprint: TToolButton;
ToolButton4: TToolButton;
ImageList1: TImageList;
DBGrid5: TDBGrid;
DBGrid4: TDBGrid;
TabSheet5: TTabSheet;
DBGrid2: TDBGrid;
DBGrid3: TDBGrid;
Splitter1: TSplitter;
Label18: TLabel;
DDorInit: TDataSource;
ADorInit: TADODataSet;
ADorInitworkno: TStringField;
ADorInitcardno: TStringField;
ADorInitname: TStringField;
ADorInitreReader: TStringField;
ADorInitmark: TStringField;
ADorInitnoid: TStringField;
ADorInitphoto: TStringField;
Splitter2: TSplitter;
Label19: TLabel;
Label20: TLabel;
Shape1: TShape;
Shape2: TShape;
ADorInitdept: TStringField;
Panel3: TPanel;
Msg: TLabel;
DDorday: TDataSource;
ADorInittimes: TDateTimeField;
ADorday: TADODataSet;
ADordayworkno: TStringField;
ADordaycardno: TStringField;
ADordayname: TStringField;
ADordaydept: TStringField;
ADordaydaytimes: TIntegerField;
ADordayrq: TStringField;
ADorday1: TADODataSet;
DDorday1: TDataSource;
ADorday1workno: TStringField;
ADorday1cardno: TStringField;
ADorday1name: TStringField;
ADorday1dept: TStringField;
ADorday1times: TDateTimeField;
ADorday1reReader: TStringField;
ADorday1mark: TStringField;
ADorday1noid: TStringField;
ADorday1photo: TStringField;
Panel4: TPanel;
Panel5: TPanel;
Label21: TLabel;
MaskEdit3: TMaskEdit;
Label22: TLabel;
Edit2: TEdit;
Label29: TLabel;
ComboBox5: TComboBox;
ComboBox6: TComboBox;
Label30: TLabel;
Edit3: TEdit;
Label27: TLabel;
MaskEdit5: TMaskEdit;
DateTimePicker2: TDateTimePicker;
Label25: TLabel;
Label26: TLabel;
DateTimePicker1: TDateTimePicker;
MaskEdit4: TMaskEdit;
Label24: TLabel;
Label23: TLabel;
Label28: TLabel;
ADormonthy: TADODataSet;
ADormonthy1: TADODataSet;
DDormonthy1: TDataSource;
DDormonthy: TDataSource;
ADormonthyworkno: TStringField;
ADormonthycardno: TStringField;
ADormonthydept: TStringField;
ADormonthyname: TStringField;
ADormonthymonthycount: TIntegerField;
ADormonthymonthy: TStringField;
ADormonthy1workno: TStringField;
ADormonthy1cardno: TStringField;
ADormonthy1name: TStringField;
ADormonthy1dept: TStringField;
ADormonthy1daytimes: TIntegerField;
ADormonthy1rq: TStringField;
DBNavigator1: TDBNavigator;
Panel6: TPanel;
Image3: TImage;
Label31: TLabel;
Label32: TLabel;
Label33: TLabel;
Label34: TLabel;
Label35: TLabel;
Label36: TLabel;
Label37: TLabel;
DBEdit1: TDBEdit;
Shape3: TShape;
Label38: TLabel;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
ToolButton2: TToolButton;
DBGrid1: TDBGrid;
Panel10: TPanel;
Label39: TLabel;
Label40: TLabel;
Label41: TLabel;
Animate2: TAnimate;
DateTimePicker5: TDateTimePicker;
BitBtn1: TBitBtn;
DateTimePicker6: TDateTimePicker;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
ADOQuery1: TADOQuery;
procedure toolbutton(sender:tobject);
function OpenPort(pclk: PClockInfo): Boolean;
procedure ClosePort(pclk: PClockInfo);
procedure ToolButton12Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure PageControl1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure ToolButton11Click(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
procedure ToolButton5Click(Sender: TObject);
procedure tbnfindClick(Sender: TObject);
procedure DBGrid4TitleClick(Column: TColumn);
procedure ComboBox6Change(Sender: TObject);
procedure Edit3Exit(Sender: TObject);
procedure ToolButton6Click(Sender: TObject);
procedure DateTimePicker1Exit(Sender: TObject);
procedure DateTimePicker2Exit(Sender: TObject);
procedure Label28Click(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure ADorInitBeforeScroll(DataSet: TDataSet);
procedure ToolButton2Click(Sender: TObject);
procedure DBGrid1TitleClick(Column: TColumn);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure tbnprintClick(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
pclk: PClockInfo;
clk:TClockInfo;
CardInfo: TRealCardInfo;
s:string;
{ Private declarations }
public
{ Public declarations }
end;
var
formdoorset: Tformdoorset;
MessageId: Integer;
WProc: TFNWndProc;
MIError: Integer;
fIni: TIniFile;
implementation
uses main, datamol, canfind, publicfunction, pub, door_print;
{$R *.DFM}
procedure Tformdoorset.ToolButton12Click(Sender: TObject);
begin
close;
end;
procedure Tformdoorset.FormClose(Sender: TObject;
var Action: TCloseAction);
var i:integer;
begin
timer1.Enabled:=false;
closehandle(clk.hport);
action:=cafree;
formdoorset:=nil;
end;
procedure Tformdoorset.FormCreate(Sender: TObject);
var i: Integer;
begin
PageControl1.ActivePageIndex:=0;
cbPort.Items.Clear;
for i:=1 to 16 do
cbPort.Items.Add(format('COM%d', [i]));
cbPort.ItemIndex:=0;
cbRate.ItemIndex:=0;
PageControl1.ActivePageIndex:=0;
clk.Port:=cbPort.ItemIndex+1;
clk.baudrate:=StrToInt(cbRate.Text);
clk.clock_id:=StrToInt('$'+edClockID.Text);
with datamod do
begin
Adoquery1.Close;
Adoquery1.SQL.Clear;
Adoquery1.SQL.Add('select distinct dept from per24010 ');
Adoquery1.Open;
Combobox6.Items.Clear;
while not Adoquery1.eof do
begin
combobox6.Items.Add(Adoquery1.fieldbyname('dept').asstring);
Adoquery1.Next;
end;
end;
end;
procedure Tformdoorset.PageControl1Change(Sender: TObject);
var
i, y: Integer;
Mark: Char;
S: string;
R: Boolean;
begin
case pagecontrol1.ActivePageIndex of
0:
begin
Toolbutton(sender);
end;
1:
begin
toolbutton(sender);
DBNavigator1.Enabled:=false;
timer1.Enabled:=true;
end;
2:
begin
toolbutton(sender);
Toolbutton2.Enabled:=true;
ToolButton5.enabled:=true;
tbnprint.enabled:=true;
tbnfind.Enabled:=true;
DBNavigator1.Enabled:=true;
DBNavigator1.DataSource:=DDorInit;
ADorInit.Close;
ADorInit.Filtered:=false;
ADorInit.CommandText:='select * from dor01 order by reReader,times,dept '; //刷新打卡资料
ADorInit.Open;
if Adorinitphoto.asstring<>'' then
begin
image3.Picture.LoadFromFile(Adorinitphoto.asstring);
label38.Visible:=false;
end
else
label38.Visible:=false
end;
3:begin
toolbutton(sender);
DBNavigator1.Enabled:=true;
toolbutton5.Enabled:=true;
tbnprint.Enabled:=true;
tbnfind.Enabled:=true;
ToolButton6.Enabled:=true;
DBNavigator1.DataSource:=DDorday;
ADorday.Close;
ADorday1.Close;
ADorday.Filtered:=false;
ADorday1.Filtered:=false;
ADorday.CommandText:='select * from dor02 order by dept,rq';
ADorday1.CommandText:='select * from dor01 where workno=:workno and cardno=:cardno and convert(varchar,times,111)=:rq '; //显示日明细
ADorday.Open;
ADorday1.Open;
end;
4:begin
toolbutton(sender);
DBNavigator1.Enabled:=true;
toolbutton5.Enabled:=true;
tbnprint.Enabled:=true;
tbnfind.Enabled:=true;
Toolbutton6.Enabled:=true;
DBNavigator1.DataSource:=DDormonthy;
ADormonthy.close;
ADormonthy.commandtext:='select * from dor03 order by dept,monthy'; //显示月汇总
ADormonthy.open;
ADormonthy1.close;
ADormonthy1.commandtext:='select * from dor02 where workno=:workno and cardno=:cardno and left(rq,7)=:monthy ';
ADormonthy1.open;
end;
end;
end;
procedure Tformdoorset.Button1Click(Sender: TObject);
var
R: Boolean;
begin
clk.Port:=cbPort.ItemIndex+1;
clk.baudrate:=StrToInt(cbRate.Text);
clk.clock_id:=StrToInt('$'+edClockID.Text);
R:=OpenPort(@clk);
button1.Enabled:=not R;
button2.Enabled:=R;
end;
procedure Tformdoorset.Button2Click(Sender: TObject);
begin
ClosePort(@clk);
button1.Enabled:=True;
button2.Enabled:=False;
end;
procedure Tformdoorset.Timer1Timer(Sender: TObject);
begin
if RealReadCard(clk.hPort,clk.clock_id,@CardInfo) then
begin
if (not cardInfo.NoCard ) then
begin
with datamod do
begin
Adoquery1.close;
Adoquery1.sql.clear;
Adoquery1.sql.add('insert into dor01(cardno,times,reReader,mark,noid) ');
Adoquery1.sql.add('select '''+cardinfo.CardNo+''','''+formatdatetime('yyyy/mm/dd hh:nn:ss ',now)+''','''+inttostr(cardinfo.Reader)+''','''+inttostr(cardinfo.mark)+''','''+IntToHex(StrToInt('$'+edClockID.Text), 2)+''' ');
Adoquery1.sql.add('update dor01 set workno=a.workno,name=a.name,dept=a.dept,photo=a.photo,readok=1 from per24010 a where a.cardno='''+cardinfo.CardNo+''' and ( readok=0 or readok is null)');
Adoquery1.sql.savetofile('c:\aaa.sql');
msg.Caption:='正在读取数据'+ cardinfo.Cardno ;
Adoquery1.execsql; //保存数据
if cardinfo.Reader=1 then
begin
Adoquery1.close;
Adodataset1.Close;
Adodataset1.CommandText:='select * from dor01 where cardno='''+cardinfo.CardNo+''' and times=''' +formatdatetime('yyyy/mm/dd hh:nn:ss ',now)+''' and reReader=1 '; //读头一
Adodataset1.Open;
if not Adodataset1.Eof then
begin
label19.Visible:=false;
image1.Picture.LoadFromFile(Adodataset1photo.asstring);
image1.Update;
end;
end
else
begin
Adodataset2.Close;
Adodataset2.CommandText:='select * from dor01 where cardno='''+cardinfo.CardNo+''' and times=''' +formatdatetime('yyyy/mm/dd hh:nn:ss ',now)+''' and reReader=2 '; //读头二
Adodataset2.Open;
if not Adodataset2.Eof then
begin
label20.Visible:=false;
image2.Picture.LoadFromFile(Adodataset2photo.asstring);
image2.Update;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -