⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alterunit.~pas

📁 完整的ic卡管理软件
💻 ~PAS
字号:
unit alterUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, bsSkinCtrls, bsSkinBoxCtrls, bsdbctrls, StdCtrls, Mask,
  BusinessSkinForm, ComCtrls, bsMessages;

type
  TalterForm = class(TForm)
    bsBusinessSkinForm1: TbsBusinessSkinForm;
    bsSkinStdLabel1: TbsSkinStdLabel;
    bsSkinStdLabel2: TbsSkinStdLabel;
    bsSkinEdit1: TbsSkinEdit;
    bsSkinButton5: TbsSkinButton;
    bsSkinButton6: TbsSkinButton;
    bsSkinButton7: TbsSkinButton;
    bsSkinEdit2: TbsSkinEdit;
    bsSkinStdLabel3: TbsSkinStdLabel;
    bsSkinListView1: TbsSkinListView;
    bsSkinScrollBar1: TbsSkinScrollBar;
    bsSkinEdit3: TbsSkinEdit;
    bsSkinButton1: TbsSkinButton;
    bsSkinStatusBar1: TbsSkinStatusBar;
    bsSkinStatusPanel1: TbsSkinStatusPanel;
    bsSkinButton2: TbsSkinButton;
    bsSkinMessage1: TbsSkinMessage;
    procedure bsSkinButton7Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
   // procedure bsSkinButton2Click(Sender: TObject);
   // procedure bsSkinButton3Click(Sender: TObject);
  //  procedure bsSkinButton4Click(Sender: TObject);
   // procedure bsSkinDBLookupComboBox1Change(Sender: TObject);
    procedure bsSkinButton5Click(Sender: TObject);
    procedure bsSkinButton1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure bsSkinButton6Click(Sender: TObject);
    procedure bsSkinButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  alterForm: TalterForm;
  iswrite:boolean;   //标记是否写卡
  aListItem:TListItem;
  function mythreadIC(p:pointer):longint;stdcall;    //***检测读卡器连接线程
implementation
uses
 datamodel,NewCarUnit, mainUnit,appadress;

{$R *.dfm}

procedure TalterForm.bsSkinButton7Click(Sender: TObject);
begin
close;

end;

procedure TalterForm.FormShow(Sender: TObject);
var
 adress:string;
 hthread:thandle;//定义一个句柄
 threadid:dword;
begin
     ///******打开数据库连接************
      datamodule1.personTable.Open;
      datamodule1.Car_adressTable.Open;
      iswrite:=false;  //初始化布尔值

      bsSkinEdit1.Text:='';
      bsSkinEdit2.Text:='';
      bsSkinListView1.Items.Clear;
      hthread:=createthread(nil,0,@mythreadIC,nil,0,threadid);    //**调试串口******




end;

procedure TalterForm.bsSkinButton5Click(Sender: TObject);
var
i:integer;
begin

   if  length(bsSkinEdit3.Text)<>3 then
      begin
        alterform.bsSkinMessage1.MessageDlg('请输入三位IC卡编号!',mtError,[mbok],0);
         bsSKinEdit3.SetFocus;
          exit;
      end;
     if length(bsSkinEdit1.Text)<>3 then
      begin
         alterform.bsSkinMessage1.MessageDlg('请输入三位人员编号!',mtError,[mbok],0);
          bsSkinEdit1.SetFocus;
          exit;
      end;
   
 //*******更新人员编号,姓名**********
   with datamodule1.personQuery do
      begin
          close;
          sql.Clear;
          sql.Add('select * from personMIs where persionID=:a');
          parameters[0].Value:=bsskinedit1.Text;
          open;
   //***如果没找到添加记录,找到就更新记录*********
         if  eof then
           begin
               with datamodule1.personTable do
                begin
                   open;
                   append;
                   fieldByName('persionID').Value:=bsskinedit1.Text;
                   fieldByName('Pname').Value:=bsskinedit2.Text;
                end;
           end
           else
             begin
                 close;
                 sql.Clear;
                 sql.Add('update personMIs set Pname=:a where persionID=:b');
                 parameters[0].Value:=bsskinedit2.Text;
                 parameters[1].Value:=bsskinedit1.Text;
                 ExecSQL;
             end;
      end;
//*********更新人员编号,机器编号 ***************
      with datamodule1.update_carQuery  do
      begin
          close;
          sql.Clear;
          sql.Add('update carMIS set userid=:a , alterdate=:b  where carid=:d ');
          Parameters[0].Value:= bsSkinEdit1.Text;
          Parameters[1].Value:=date();
          parameters[2].Value:=bsskinedit3.Text;
          ExecSQL;
      end;  

//*****清除原有的地址信息**********************
      with datamodule1.car_adressQuery do
       begin
             close;
             sql.Clear;
             sql.Add('delete from Car_adress where carid=:a');
             parameters[0].Value:=bsSkinEdit3.Text;
             ExecSQL;


       end;
//*******重新保存地址信息***************************
        for  i:=0 to bsSkinListView1.Items.Count-1 do      //保存报警地址.
          begin
             if bsSkinListView1.Items[i].Checked    then
              begin
                with datamodule1.Car_adressTable do
                 begin
                 open;
                 append;
                 FieldByname('carid').AsString:=bsSkinEdit3.Text;
                 FieldByname('adressid').AsString:=bsSkinListView1.Items[i].Caption;
                 FieldByName('adress').AsString:=bsSkinListView1.Items[i].SubItems.CommaText;
                  post;
                
               end;
              end;
           end;
        
         alterform.bsSkinMessage1.MessageDlg('保存成功!',mtInformation,[mbok],0);
         iswrite:=true;

end;

procedure TalterForm.bsSkinButton1Click(Sender: TObject);
var
adress,id:string;
aListItem:TListItem;
begin
 //****查找显示人员,机器编号************
    with DataModule1.carQuery  do
    begin
       close;
       sql.Clear;
       sql.Add('select * from carMIS');
       sql.Add('where carid=:a');
       Parameters[0].Value:=bsSkinEdit3.Text;
       open;
       bsSkinEdit1.Text:=fieldByName('userid').AsString;
   
    end;
 //*****查找显示人员姓名*******************
     with DataModule1.personQuery  do
    begin
       close;
       sql.clear;
       sql.Add('select Pname from personMIs');
       sql.Add('where persionID=:a');
       Parameters[0].Value:=bsSkinEdit1.Text;
       open;
       bsSkinEdit2.Text:=fieldByName('Pname').AsString;
    end;
 //**********查找显示地址********
    bsskinlistView1.Items.Clear;
     with  datamodule1.car_adressQuery do
      begin
           close;
           sql.Clear;
           sql.Add('select adress,adressid from Car_adress');
           sql.Add('where carid=:a');
           Parameters[0].Value:=bsSkinEdit3.Text;
           open;
           first;
           while not eof do
             begin
                adress:=FieldByName('adress').AsString;
                id:=FieldByName('adressid').AsString;
                aListItem:=bsSkinListView1.Items.Add;
                aListItem.Caption:=id;
                aListItem.SubItems.Add(adress);
                aListItem.Checked:=true;
                next;
             end;
            

      end;

end;

procedure TalterForm.FormCreate(Sender: TObject);
begin
//  st:=ic_exit(icdev);          //退出串口
end;

procedure TalterForm.bsSkinButton6Click(Sender: TObject);
 var
 i,j,k,l,n,sdn:integer;
 sIC,sP,sd,strtext,s1,s2:string;
begin
////*********判断输入信息是否正确***************
        if not iswrite then
       begin
        alterform.bsSkinMessage1.MessageDlg('注意!先保存再写卡',mtError,[mbok],0);
         bsSkinButton6.SetFocus;
         exit;
       end;
         //*********检测是否24c64卡 ********
       st:=chk_24c64(icdev);           
         if st<>0 then
           begin
            newcarForm.bsSkinMessage1.MessageDlg('读卡器未插卡!',mtError,[mbok],0);
            exit;
         end;

         if  length(bsSkinEdit3.Text)<>3 then
      begin
        alterform.bsSkinMessage1.MessageDlg('请输入三位IC卡编号!',mtError,[mbok],0);
         bsSKinEdit3.SetFocus;
          exit;
      end;
     if length(bsSkinEdit1.Text)<>3 then
      begin
         alterform.bsSkinMessage1.MessageDlg('请输入三位人员编号!',mtError,[mbok],0);
          bsSkinEdit1.SetFocus;
          exit;
      end;
    { if length(bsskinedit4.Text)<>3 then
     begin
          alterform.bsSkinMessage1.MessageDlg('请输入三位机器编号!',mtError,[mbok],0);
          bsSkinEdit1.SetFocus;
          exit;
     end;   }

        st:=chk_24c64(icdev);           //检测是否24c64卡
         if st<>0 then
           begin
           bsSkinStatusPanel1.Caption:='读卡器未插入卡';
           alterform.bsSkinMessage1.MessageDlg('读卡器未插入卡!',mtInformation,[mbok],0);
           mainform.bsSkinStatusPanel3.Caption:='读卡器未插入卡';
           exit;
          end
        else
            bsSkinStatusPanel1.Caption:='读卡器已插卡成功';
            
            mainform.bsSkinStatusPanel3.Caption:='读卡器已插卡成功';
 //**********写卡*********************           
       offset:=0;       //IC卡偏移地址
       length1:=3;       //字符长度
       sIC:=bsSkinEdit3.Text;            //卡编号,
       sP:=bsSkinEdit1.Text;         // 人员编号
       for i:=0 to 2 do
          begin
           dataIC[i]:=sIC[i+1];
          end;
           for i:=0 to 2 do
         begin
           dataP[i]:=SP[i+1];
         end;

       st:=swr_24c64(icdev,offset,length1,dataIC); //写入IC卡编号,3位地址
       offset1:=3;
       st:=swr_24c64(icdev,3,length1,dataP); //写入人员编号  3位地址
      for j:=0 to  bsSkinListView1.Items.Count-1 do
       begin
          if bsSkinListView1.Items[j].Checked  then
           begin
                sdn:=strtoint( bsSkinListView1.Items[j].Caption); // 读机器编号
                sd:= bsSkinListView1.Items[j].SubItems.CommaText; // 读机器名称
                s2:=inttostr(length(sd)div 2);                    //S2机器名称汉字个数
                strtext:=writeIC(sd);                             //得到汉字的16进制编码
                l:=length(strtext);
                n:=l div 2;                                       //求出汉字存放地址的长度
                datamax[0]:=s2[1];
                offset1:=1000+sdn*400-400;                       //存汉字个数
                st:=swr_24c64(icdev,offset1,1,datamax);
                for i:=0 to  length(strtext)-1  do
                 begin
                    data3[i]:=strtext[i+1];
                 end;
                 offset1:=1001+sdn*400-400;                     //存储汉字16*16编码
                 st:=asc_hex(data3,hexdata3,n);
                 st:=swr_24c64(icdev,offset1,n,hexdata3);

           end;

        end;
//*****判断是否写卡成功**********
       if st<>0 then
        begin
          alterform.bsSkinMessage1. MessageDlg('写卡失败,请重新写卡!',mtInformation,[mbok],0);
            exit;
        end
        else
          alterform.bsSkinMessage1.MessageDlg('写卡成功!',mtInformation,[mbok],0);

         iswrite:=false;  
end;

procedure TalterForm.bsSkinButton2Click(Sender: TObject);
begin
 AppadressForm:=TAppadressForm.Create(nil);
 AppadressForm.Show;
end;
function mythreadIC(p:pointer):longint;stdcall;    //***检测读卡器连接线程
var
  dc:hdc;
begin
  dc:=getdc(alterform.handle);
  with alterform   do
  begin
  //******调试串口************
    icdev:=auto_init(0,9600);  //初始化串口一,并将读写器波特率设置为9600
      st:=chk_24c64(icdev);           //检测是否24c64卡
         if st<>0 then
           begin
           bsSkinStatusPanel1.Caption:='读卡器未插入卡';
           mainform.bsSkinStatusPanel3.Caption:='读卡器未插入卡';
          end
        else
            bsSkinStatusPanel1.Caption:='读卡器已插卡成功';
            mainform.bsSkinStatusPanel3.Caption:='读卡器已插卡成功';

   releasedc(alterform.handle,dc);
  end;
end;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -