sendcardall.pas
来自「pasa人力资源考勤管理系统」· PAS 代码 · 共 443 行
PAS
443 行
unit sendcardall;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ToolWin, DBActns, ActnList, ExtCtrls, Grids, DBGrids, StdCtrls,
Buttons, Db, ADODB,EastRiver, Functions, PrjConst, Mask, DBCtrls;
type
Tformcardall = class(TForm)
PageControl1: TPageControl;
ActionList1: TActionList;
DataSetCancel1: TDataSetCancel;
DataSetDelete1: TDataSetDelete;
DataSetEdit1: TDataSetEdit;
DataSetFirst1: TDataSetFirst;
DataSetInsert1: TDataSetInsert;
DataSetLast1: TDataSetLast;
DataSetNext1: TDataSetNext;
DataSetPost1: TDataSetPost;
DataSetPrior1: TDataSetPrior;
TabSheet1: TTabSheet;
ToolBar1: TToolBar;
ToolButton13: TToolButton;
ToolButton3: TToolButton;
ToolButton10: TToolButton;
ToolButton2: TToolButton;
ToolButton11: TToolButton;
ToolButton12: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton1: TToolButton;
DBGrid1: TDBGrid;
Splitter1: TSplitter;
Panel1: TPanel;
Button1: TButton;
ListBox1: TListBox;
ListBox2: TListBox;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
Label4: TLabel;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Label3: TLabel;
ComboBox2: TComboBox;
Edit2: TEdit;
combobox1: TComboBox;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
Qry1: TADOQuery;
Qry2: TADODataSet;
Qry2workno: TStringField;
Qry2cardno: TStringField;
Qry2dept: TStringField;
Qry2prof: TStringField;
Qry2name: TStringField;
Qry2cardkind: TStringField;
Qry2readok: TBooleanField;
Qry2money: TBCDField;
Qry2times: TIntegerField;
Qry2edICCardPwd: TStringField;
Qry1workno: TStringField;
Qry1cardno: TStringField;
Qry1dept: TStringField;
Qry1prof: TStringField;
Qry1name: TStringField;
Qry1cardkind: TStringField;
Qry1readok: TBooleanField;
Qry1money: TBCDField;
Qry1times: TIntegerField;
Qry1edICCardPwd: TStringField;
TabSheet2: TTabSheet;
GroupBox5: TGroupBox;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
cbComPort: TComboBox;
cbComRate: TComboBox;
edClock_id: TMaskEdit;
btnConnect: TButton;
udClock_id: TUpDown;
btnDisConnect: TButton;
DataSource2: TDataSource;
Edit4: TEdit;
Edit5: TEdit;
Qry2money1: TBCDField;
Qry2money2: TBCDField;
Label9: TLabel;
Edit3: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ToolButton8Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure ToolButton10Click(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure combobox1Change(Sender: TObject);
procedure ListBox1DblClick(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ToolButton13Click(Sender: TObject);
procedure DBGrid1TitleClick(Column: TColumn);
procedure btnConnectClick(Sender: TObject);
procedure btnDisConnectClick(Sender: TObject);
procedure Qry2moneyChange(Sender: TField);
procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
procedure ComboBox2KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
clk: TClockInfo;
s:string;
public
{ Public declarations }
end;
var
formcardall: Tformcardall;
implementation
uses main, canfind, datamol, publicfunction ;
{$R *.DFM}
procedure Tformcardall.FormCreate(Sender: TObject);
var i:integer;
begin
combobox2.ItemIndex:=0;
Adodataset1.close ;
Adodataset1.CommandText:='select distinct dept from per24010 ';
Adodataset1.Open;
Combobox1.Items.clear;
while not Adodataset1.Eof do
begin
Combobox1.Items.Add(Adodataset1.fieldbyname('dept').asstring); //列入部门
Adodataset1.next;
end;
cbComPort.Items.Clear;
for i:=1 to 16 do
cbComPort.Items.Add(format('COM%d', [i]));
cbcomPort.itemindex:=0;
cbComRate.ItemIndex:=0;
end;
procedure Tformcardall.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
ClosePort(@clk);
action:=cafree;
formcardall:=nil;
end;
procedure Tformcardall.ToolButton8Click(Sender: TObject);
begin
close;
end;
procedure Tformcardall.ToolButton1Click(Sender: TObject);
begin
if panel1.Visible=false then
panel1.Visible:=true
else
panel1.Visible:=false;
end;
procedure Tformcardall.ToolButton10Click(Sender: TObject);
begin
if assigned(formcanfind) then formcanfind.close;
findrecorder(qry2,'Qry2','mealcard');
end;
procedure Tformcardall.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Activecontrol<>edit1 then
begin
if key=#13 then
begin
key:=#0;
selectnext(Activecontrol,true,true);
end;
end
else
if key=#13 then
begin
adodataset1.close;
adodataset1.CommandText:='select workno from per24010';
adodataset1.open;
listbox1.Items.clear;
if not adodataset1.Eof then
listbox1.Items.Add(Adodataset1.fieldbyname('workno').asstring)
end;
end;
procedure Tformcardall.combobox1Change(Sender: TObject);
begin
listbox1.Items.Clear;
Adodataset1.close; //选出该部门所有的员工
Adodataset1.commandtext:='select workno from per24010 where dept='''+combobox1.text+''' and leave=0 ';
adodataset1.Open;
while not adodataset1.Eof do
begin
listbox1.Items.Add(adodataset1.fieldbyname('workno').asstring);
Adodataset1.Next;
end;
end;
procedure Tformcardall.ListBox1DblClick(Sender: TObject);
var i:integer;
begin
for i:=0 to listbox1.items.count-1 do
begin
if listbox1.Selected[i] then
if listbox2.items.indexof(listbox1.items[i])<0 then
listbox2.Items.add(listbox1.items[i]);
end;
end;
procedure Tformcardall.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
ADODataSet1.Close;
adodataset1.commandtext:='select workno from per24010 where workno='''+edit1.text+''' ';
ADODataSet1.Open;
if not ADODataSet1.Eof then
if listbox2.Items.IndexOf(edit1.Text)=-1 then
begin
listbox2.Items.add(adodataset1.fieldbyname('workno').asstring);
edit1.Text:='';
end else edit1.Text:='';
end;
end;
procedure Tformcardall.SpeedButton2Click(Sender: TObject);
var i:integer;
begin
for i:=0 to listbox1.items.count-1 do
if listbox2.items.indexof(listbox1.items[i])<0 then
listbox2.items.add(listbox1.items[i]);
end;
procedure Tformcardall.SpeedButton3Click(Sender: TObject);
var i,j,k:integer;
list:TStringList;
begin
j:=0;
list:=TStringList.Create;
for i:=0 to listbox2.items.count-1 do
list.add(listbox2.items[i]);
k:=0;
for i:=0 to listbox2.items.count-1 do
if listbox2.Selected[i] then
begin
j:=i;
list.delete(j-k);
inc(k);
end;
listbox2.items.clear;
for i:=0 to list.Count-1 do
listbox2.Items.Add(list.Strings[i]);
for i:=0 to list.count-1 do
if j=list.count then
begin
listbox2.selected[j-1]:=true;
end else
begin
listbox2.selected[j]:=true;
break;
end ;
end;
procedure Tformcardall.SpeedButton4Click(Sender: TObject);
begin
listbox2.clear;
end;
procedure Tformcardall.SpeedButton1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to listbox1.items.count-1 do
begin
if listbox1.Selected[i] then
if listbox2.items.indexof(listbox1.items[i])<0 then
listbox2.Items.add(listbox1.items[i]);
end;
end;
procedure Tformcardall.Button1Click(Sender: TObject);
const
CtrlWord='FF078069';//IC卡控制字,请不要随便更改
var
i:integer;
Money, Times, CardStyle, GroupStation, GroupId: Integer;
day_consumed, day_times, c_month, c_day, c_flag: Integer;//ER-690卡扩展参数
pwd: array[0..32] of Char;
begin //1
for i:=0 to listbox2.Items.Count-1 do
begin //2
Qry1.close;
Qry1.SQL.Clear;
Qry1.sql.add('insert into mealcard(workno,money2,times,readok) select '''+listbox2.Items[i] +''','''+edit3.text+''','''+edit2.text+''',1 ');
qry1.sql.add('update mealcard set cardno=a.cardno,name=a.name,dept=a.dept,prof=a.prof from per24010 a where a.workno=mealcard.workno ');
qry1.SQL.Add('update mealcard set cardkind='''+combobox2.text+''' where workno='''+listbox2.items[i]+''' ');
Qry1.SQL.SaveToFile('c:\aaa.sql');
if messagedlg('工号='''+listbox2.items[i]+''',请放入卡片,进行写卡',mtinformation,[mbyes,mbno],0)=mryes then
begin //3
Qry1.ExecSQL;
// qry1.edit;
if OpenPort(@clk) then
begin //4
begin //5
if ComboBox2.Text='标准IC卡格式' then
CardStyle := CARDSTYLE_OLDCARD // 标准IC卡格式
else if ComboBox2.Text='长IC卡格式' then
CardStyle := CARDSTYLE_NEWCARD // 长IC卡格式
else if ComboBox2.Text='新消费机IC卡格式' then
CardStyle := CARDSTYLE_690CARD // ER-690新消费机卡格式
else
CardStyle:=CARDSTYLE_OLDCARD;
Money := Round(StrToFloat(edit3.Text)*10);
Times := StrToIntDef(edit2.text, 0);
day_consumed:=0;
day_times:=0;
c_month:=0;
c_day:=0;
c_flag:=0;
GroupStation := -1;
GroupId := 0;
qry1.Close;
Qry1.sql.text:='select * from mealcard where workno='''+listbox2.items[i]+''' ';
Qry1.Open;
if not qry1.eof then
begin //6
edit4.text:=qry1cardno.AsString;
edit5.text:=qry1name.asstring;
end; //6
if WriteICCardEx(clk.hPort, PChar(edit4.text), PChar(edit5.text), nil, Money, Times,
day_consumed, day_times, c_month, c_day, c_flag, GroupStation, GroupId, CardStyle, False) then
begin //7
//写卡成功操作
if Length(Qry1edICCardPwd.Text)=12 then // IC卡密码必须是12位十六进制字符串
begin //8
FillChar(Pwd, SizeOf(Pwd), 0);
Move(Qry1edICCardPwd.Text[1], Pwd[0], Length(Qry1edICCardPwd.Text)); // IC卡A密码
Move(CtrlWord, Pwd[12], Length(CtrlWord)); // IC卡控制字
Move(Qry1edICCardPwd.Text[1], Pwd[20], Length(Qry1edICCardPwd.Text)); // IC卡B密码
if not WriteICCardPassword(clk.hPort, PChar(@Pwd), -1) then
//注意只有最新的动态库支持Block=-1;
begin //9
MsgBox(msg_write_iccard_pwd_error, MB_ICONERROR);
exit;
end; //9
end; //8
end //7
else
begin //10
//写卡错误
MsgBox(msg_write_iccard_error, MB_ICONERROR);
exit;
end; //10
Windows.Beep(2500, 100);
ClosePort(@clk);
end;//5
end; // 4
end //3
else
continue;
end;//2
Qry2.Close;
Qry2.CommandText:='select * from mealcard order by workno ';
qry2.open;
if messagedlg('多人发卡成功,谢谢使用,是否继续,发卡操作??',mtinformation,[mbyes,mbno],0)=mryes then
FormCreate(sender)
else
exit;
end;//1
procedure Tformcardall.ToolButton13Click(Sender: TObject);
begin
Qry2.close;
Qry2.CommandText:='select * from mealcard order by workno ';
Qry2.Open;
end;
procedure Tformcardall.DBGrid1TitleClick(Column: TColumn);
begin
if s='ASC'then
s:='DESC'
else
s:='ASC';
Qry2.Sort:=column.FieldName+ ' '+s
end;
procedure Tformcardall.btnConnectClick(Sender: TObject);
var
R: Boolean;
begin
clk.Port:=cbComPort.ItemIndex+1;
clk.baudrate:=StrToInt(cbComRate.Text);
clk.clock_id:=StrToInt('$'+edClock_id.Text);
R:=OpenPort(@clk);
btnConnect.Enabled:=not R;
btnDisConnect.Enabled:=R;
end;
procedure Tformcardall.btnDisConnectClick(Sender: TObject);
begin
ClosePort(@clk);
btnConnect.Enabled:=True;
btnDisConnect.Enabled:=False;
end;
procedure Tformcardall.Qry2moneyChange(Sender: TField);
begin
Qry2.Edit;
Qry2money2.AsFloat:=Qry2money.AsFloat+qry2money1.AsFloat;
end;
procedure Tformcardall.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
dbgrid_keypress(sender,key);
end;
procedure Tformcardall.ComboBox2KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
key:=#0;
selectnext(activecontrol,true,true);
end;
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?