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 + -
显示快捷键?