关于考勤机的控制代码,如何控制(com1接口)。使他的考勤数据插入到sql server 数据库。能否提供相关方面的源代码。

解决方案 »

  1.   

    unit myUnit;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls, Db, ADODB;function link_com(port :integer):integer;stdcall;
             external'sfj.dll';
    function rd_cmw(w_sno:integer;cmwout:pchar):integer; stdcall;
             external'sfj.dll';
    function rd_mdeb(w_sno:integer;mdebout:pchar):integer; stdcall;
             external'sfj.dll';
    function set_key(w_sno,batch_no,keystat:integer;key:string):integer; stdcall;
             external'sfj.dll';
    function set_cmw(w_sno:integer;cmw:string):integer; stdcall;
             external'sfj.dll';
    function set_time(w_sno:integer;timestr:string):integer; stdcall;
             external'sfj.dll';
    function set_mdeb(w_sno:integer;mdeb:string):integer; stdcall;
             external'sfj.dll';
    function clr_ram(w_sno:integer):integer; stdcall;
             external'sfj.dll';
    function chk_key(w_sno,batch_no,keystat:integer;key:string):integer; stdcall;
             external'sfj.dll';
    function get_jyzm(w_sno,choice:integer;jydata:pchar):integer; stdcall;
             external'sfj.dll';
    function add_hmd(w_sno,hlen:integer;hmd:string):integer; stdcall;
             external'sfj.dll';
    function redu_hmd(w_sno,hlen:integer;hmd:string):integer; stdcall;
             external'sfj.dll';
    function set_hmd(w_sno:integer):integer; stdcall;
             external'sfj.dll';
    function rd_hmd(w_sno:integer;code:pchar):integer; stdcall;
             external'sfj.dll';
    function clr_bt(w_sno:integer):integer; stdcall;
             external'sfj.dll';
    function set_bt(w_sno,hlen:integer;btString:string):integer; stdcall;
             external'sfj.dll'; //---btString长度  hlen*6
    function clr_menu(w_sno:integer):integer; stdcall;
             external'sfj.dll';
    function set_menu(w_sno,hlen:integer;DJString:string):integer; stdcall;
             external'sfj.dll';
    type
      TForm1 = class(TForm)
        Timer1: TTimer;
        adoConnection: TADOConnection;
        Label1: TLabel;
        Label2: TLabel;
        lblName: TLabel;
        lblClassName: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        lblCardNo: TLabel;
        lblTime: TLabel;
        Shape1: TShape;
        Label5: TLabel;
        adoquery: TADOQuery;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        function AddData(CardNo:string):Integer;
        function GetCardNo():string;
        procedure Timer1Timer(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if Messagedlg('确定要退出吗?',mtConfirmation,[mbYes, mbNo],0)=mrYes then
        begin
         timer1.Enabled :=False;
         adoConnection.Close ;
        end
      else
        Action:=caNone;
    end;function TForm1.AddData(CardNo:string):Integer;
    var
      sNo:integer;
      sFamilyName,sGivenName:string;
      sClassName:string;
    begin
      Result:=0;
      with adoquery do
      begin
        sql.Clear ;
        sql.Add ('select 编号,姓,名,当前班级 from student_base_info where 卡号='+CardNo);
        open;
        if not eof then
        begin
          sNo:=fields.Fields[0].AsInteger;
          sFamilyName:=fields.Fields[1].AsString;
          sGivenName:=fields.Fields[2].AsString;
          sClassName:=fields.Fields[3].AsString;
          close;
          sql.Clear ;
          sql.Add ('Execute InsertTimeInfo '+inttostr(sNo)+','''+sClassName+''','+CardNo);
          ExecSQL;
          lblName.Caption :=sFamilyName+sGivenName;
          lblClassName.Caption :=sClassName;
          lblCardNo.Caption :=CardNo;
          lblTime.Caption :=DateTimetostr(Now);
        end
        else
          Result:=2;
        close;
      end;
    end;function TForm1.GetCardNo():string;
    var
      pCardNo:pchar;
      sCardNo:string;
    begin
      GetMem(pCardNo,256);
      rd_cmw(1,pCardNo);
      sCardNo:=string(pCardNo);
      if (copy(sCardNo,1,2)='00') and (copy(sCardNo,5,1)='1') and (copy(sCardNo,7,10)='3344556677') then
        begin
          shape1.Pen.Color :=clGreen;
          shape1.Brush.Color :=clGreen;
        end
      else
        if length(sCardNo)<>16 then
          else
            Result:=sCardNo;
      FreeMem(pCardNo);
    end;
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      CardNo:string;
    begin
      CardNo :=GetCardNo;
      if trim(CardNo)<>'' then
        case AddData(copy(CardNo,12,5)) of
          1: set_cmw(1,'03');
          2: set_cmw(1,'03');
        else
          set_cmw(1,'06'+copy(CardNo,12,5)+'00000');
        end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      link_com(3);
      adoConnection.Open ;
      timer1.Enabled :=True;
    end;end.