📄 cust_unit.pas
字号:
unit CUST_Unit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ImgList, StdCtrls, DBCtrls, DBCtrlsEh, Mask, Buttons, Tabenter,
Grids, DBGridEh, ComCtrls, ToolWin, ExtCtrls,DB, ADODB,IniFiles;
type
TarrChar=array of char;
TCUST_Form = class(TForm)
Splitter1: TSplitter;
ToolBar1: TToolBar;
tbbtnPrint: TToolButton;
ToolButton3: TToolButton;
tbbtnNewBill: TToolButton;
tbbtnDeleteBill: TToolButton;
tbbtnCommit: TToolButton;
tbbtnRollback: TToolButton;
ToolButton11: TToolButton;
tbbtnPrior: TToolButton;
ToolButton4: TToolButton;
tbbtnNext: TToolButton;
tbbtnLast: TToolButton;
ToolButton5: TToolButton;
tbbtnFirst: TToolButton;
ToolButton23: TToolButton;
tbbtnSearch: TToolButton;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
DBGridEh1: TDBGridEh;
PageControl2: TPageControl;
TabSheet2: TTabSheet;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
kEnterAsTab1: TkEnterAsTab;
DBEditEh1: TDBEditEh;
DBEditEh2: TDBEditEh;
DBEditEh3: TDBEditEh;
DBMemo1: TDBMemo;
DBEditEh5: TDBEditEh;
ilSmall: TImageList;
ToolButton2: TToolButton;
ToolButton6: TToolButton;
DBDateTimeEditEh1: TDBDateTimeEditEh;
Label4: TLabel;
DBEditEh6: TDBEditEh;
DBNumberEditEh2: TDBNumberEditEh;
Label10: TLabel;
DBNumberEditEh3: TDBNumberEditEh;
Label9: TLabel;
DBEdit1: TDBEdit;
CustQry: TADOQuery;
NUMQry: TADOQuery;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label18: TLabel;
Label19: TLabel;
Panel1: TPanel;
Edit1: TEdit;
Label17: TLabel;
Button1: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure tbbtnNewBillClick(Sender: TObject);
procedure tbbtnDeleteBillClick(Sender: TObject);
procedure tbbtnCommitClick(Sender: TObject);
procedure tbbtnRollbackClick(Sender: TObject);
procedure tbbtnPriorClick(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
procedure tbbtnNextClick(Sender: TObject);
procedure tbbtnLastClick(Sender: TObject);
procedure ToolButton5Click(Sender: TObject);
procedure tbbtnSearchClick(Sender: TObject);
procedure ToolButton6Click(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure tbbtnFirstClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
function BS(M:integer):integer;
function HexToStr(AHex: String): String;
function MyIntToHex(aNum, aLength: Integer): TarrChar;
{ Public declarations }
end;
var
CUST_Form: TCUST_Form;
implementation
uses MainUnit, DMUnit;
{$R *.dfm}
procedure TCUST_Form.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=cafree;
end;
procedure TCUST_Form.FormDestroy(Sender: TObject);
begin
//CUST_FORM:=nil;
end;
procedure TCUST_Form.FormCreate(Sender: TObject);
begin
with DM.CUST_ADOQ do
begin
Close;
SQl.Clear;
SQl.Add('SELECT * FROM CUST_ITEM');
Open;
end;
end;
procedure TCUST_Form.tbbtnNewBillClick(Sender: TObject);
begin
DM.CUST_ADOQ.First;
end;
procedure TCUST_Form.tbbtnDeleteBillClick(Sender: TObject);
begin
DM.CUST_ADOQ.Prior;
end;
procedure TCUST_Form.tbbtnCommitClick(Sender: TObject);
begin
DM.CUST_ADOQ.Next;
end;
procedure TCUST_Form.tbbtnRollbackClick(Sender: TObject);
begin
DM.CUST_ADOQ.Last;
end;
function TCUST_Form.BS(M: integer): integer;
begin
if M=0 then
begin
DBEditEh1.Enabled:=True;
DBEditEh2.Enabled:=True;
DBEditEh3.Enabled:=True;
DBEdit1.Enabled:=True;
DBEditEh5.Enabled:=True;
DBEditEh6.Enabled:=True;
DBDateTimeEditEh1.Enabled:=True;
DBNumberEditEh2.Enabled:=True;
DBNumberEditEh3.Enabled:=True;
DBMemo1.Enabled:=True;
end;
if M=1 then
begin
DBEditEh1.Enabled:=false;
DBEditEh2.Enabled:=false;
DBEditEh3.Enabled:=false;
DBEdit1.Enabled:=false;
DBEditEh5.Enabled:=false;
DBEditEh6.Enabled:=false;
DBDateTimeEditEh1.Enabled:=false;
DBNumberEditEh2.Enabled:=false;
DBNumberEditEh3.Enabled:=false;
DBMemo1.Enabled:=false;
end;
end;
procedure TCUST_Form.tbbtnPriorClick(Sender: TObject);
begin
if DM.CUST_ADOQ.State in [DSBROWSE] then
DM.CUST_ADOQ.Append;
BS(0);
DBEditEh1.SetFocus;
end;
procedure TCUST_Form.ToolButton4Click(Sender: TObject);
begin
if DM.CUST_ADOQ.FieldByName('CUST_NO').AsString='0001' then Exit;
if DM.CUST_ADOQ.State in [DSBROWSE] then
DM.CUST_ADOQ.Edit;
BS(0);
DBEditEh1.SetFocus;
end;
procedure TCUST_Form.tbbtnNextClick(Sender: TObject);
begin
if DM.CUST_ADOQ.FieldByName('CUST_NO').AsString='000000' then Exit;
if Application.MessageBox('是否确认删除该员工信息?', '提示',
MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = IDYES then
DM.CUST_ADOQ.Delete;
end;
procedure TCUST_Form.tbbtnLastClick(Sender: TObject);
begin
if (Trim(DBEditEh1.Text)='') then Exit;
if DM.CUST_ADOQ.State in [DSINSERT,DSEDIT] then
DM.CUST_ADOQ.Post;
BS(1);
end;
procedure TCUST_Form.ToolButton5Click(Sender: TObject);
begin
DM.CUST_ADOQ.Cancel;
BS(1);
end;
procedure TCUST_Form.tbbtnSearchClick(Sender: TObject);
begin
Close;
end;
procedure TCUST_Form.ToolButton6Click(Sender: TObject);
var
BSNO,BSNAME,BSDATE,BSMEMO1,BSMEMO2,PASS:String;
i:integer;
begin
{ BSNO:=DBEditEh1.Text; //编号
BSNAME:=DBEditEh2.Text;//姓名
BSDATE:=DBDateTimeEditEh1.Text;//发卡日期
BSMEMO2:=DBMemo1.Text;//备注2
PASS:=DBEditEh6.Text;//口令
//串口初始化
Mifare_DLL_Handle:= OpenCardReader(1,9600);
//初始化读写信息数组检测卡片
for i:=0 to 15 do
begin
pszData[i]:=Char(0);
end;
//开始检测卡片
nResult:=QueryRFCard(Mifare_DLL_Handle,$52,pszData);
if (nResult=255) or (nResult=256)then
begin
showMessage('检测卡片时通讯失败!');
Exit;
end
else if(pszData[1]= char(8)) then
showMessage('Mifare Standard ATQ卡')
else ShowMessage('没有卡片!');
//验证密匙
for i:=0 to 5 do
begin
pszKey[i]:=$ff;
end;
//Byte型转为Char型
for i:=0 to 5 do
begin
pszData[i]:=chr(pszKey[i]);
end;
//验证提交的密钥 验证第2扇区 A密钥
nResult:=AuthenRFCard(Mifare_DLL_Handle,$60,2,@pszData[0]);
//读写延时
Sleep(100);
if (nResult=0) then
begin
showMessage('验证密钥成功!');
end
else
begin
showMessage('验证密钥失败!');
end; }
//设定写卡信息内容
{for i:=0 to 15 do
begin
pTempBuff[i]:=$AA;
end;
//Byte型转为Char型 }
{ for i:=0 to 20 do
begin
//pWriteBuff[i]:=Char(pTempBuff[i]);
pWriteBuff[i]:=BSNAME[i];
end;
//写卡内容 写第2扇区第0块
nResult:=WriteRFCard(Mifare_DLL_Handle,2,0,pWriteBuff);
//读写延时
Sleep(100);
//写卡信息结果提示
if (nResult=0) then
begin
showMessage('写卡信息成功!');
Exit;
end
else if (nResult=255) or (nResult=256)then
begin
showMessage('写卡信息时通讯失败!');
Exit;
end
else
ShowMessage('写卡信息失败!'); }
end;
procedure TCUST_Form.ToolButton2Click(Sender: TObject);
var
BSNO,BSNAME,BSDATE,BSMEMO1,BSMEMO2,PASS:String;
i:integer;
begin
{ BSNO:=DBEditEh1.Text; //编号
BSNAME:=DBEditEh2.Text;//姓名
BSDATE:=DBDateTimeEditEh1.Text;//发卡日期
BSMEMO2:=DBMemo1.Text;//备注2
PASS:=DBEditEh6.Text;//口令
//串口初始化
Mifare_DLL_Handle:= OpenCardReader(1,9600);
//初始化读写信息数组检测卡片
for i:=0 to 20 do
begin
pszData[i]:=Char(0);
end;
//开始检测卡片
nResult:=QueryRFCard(Mifare_DLL_Handle,$52,pszData);
if (nResult=255) or (nResult=256)then
begin
showMessage('检测卡片时通讯失败!');
Exit;
end
else if(pszData[1]= char(8)) then
showMessage('Mifare Standard ATQ卡')
else ShowMessage('没有卡片!');
//验证密匙
for i:=0 to 5 do
begin
pszKey[i]:=$ff;
end;
//Byte型转为Char型
for i:=0 to 5 do
begin
pszData[i]:=chr(pszKey[i]);
end;
//验证提交的密钥 验证第2扇区 A密钥
nResult:=AuthenRFCard(Mifare_DLL_Handle,$60,2,@pszData[0]);
//读写延时
Sleep(100);
if (nResult=0) then
begin
showMessage('验证密钥成功!');
end
else
begin
showMessage('验证密钥失败!');
end;
//读卡
//初始化读卡信息数组
// for i:=0 to 15 do
// pReadBuff[i]:=Char(0);
//读卡信息到数组 读第2扇区第0块
nResult:=ReadRFCard(Mifare_DLL_Handle,2,0,pReadBuff);
//读写延时
Sleep(100);
// MessageBox(Handle, pReadBuff, '串口初始化',MB_ICONASTERISK or MB_OKCANCEL or MB_DEFBUTTON2);
//读卡信息结果提示
if (pReadBuff[0]=Char(0)) then
begin
showMessage('读卡信息成功!');
end
else if (nResult=255) or (nResult=256) then
begin
showMessage('读卡信息时通讯失败!');
Exit;
end
else
ShowMessage('读卡信息失败!'); }
end;
function TCUST_Form.HexToStr(AHex: String): String;
var
I: Integer;
J: Byte;
R: String;
begin
J:= 0;
R:= '';
for I:=1 to (Length(AHex) div 2) do
begin
if (AHex[2 * I - 1] >= 'A') and (AHex[2 * I - 1] <= 'F') then
J:= J * 16 + (Byte(Char(AHex[2 * I - 1]))-55)
else
J:= J * 16 + StrToInt(AHex[2 * I - 1]);
if (AHex[2 * I] >= 'A') and (AHex[2 * I] <= 'F') then
J:= J * 16 + (Byte(Char(AHex[2 * I]))-55)
else
J:= J * 16 + StrToInt(AHex[2 * I]);
R:= R + Char(J);
end;
Result:= TrimRight(R);
end;
procedure TCUST_Form.tbbtnFirstClick(Sender: TObject);
var
p:array[0..5] of char;
i,j:integer;
S:string;
//定义变量
CUST_NO,CUST_AGE,CUST_PASS,CUST_CZZS,CUST_CZQX:string;
Cust:array [0..9999] of char;
NUM:TarrChar;
index:integer;
begin
if Trim(Edit1.Text)='' then
begin
ShowMessage('请先查询再下传数据!');
Exit;
end;
for i:=0 to 9999 do
Cust[i]:=char(0);
Index:=0;
with NUMQry do
begin
Close;
SQl.Clear;
SQL.Add('SELECT COUNT(*) FROM Cust_Item WHERE CUST_PASS='''+Edit1.Text+'''');
Open;
end;
Num:=MYINTTOHEX(NUMQry.Fields[0].AsInteger,2);
S:='';
Result:=POS_Comm_Start(1);
if Result=0 then
ShowMessage('通讯成功')
else
begin
ShowMessage(' 通讯失败'+inttostr(Result));
Exit;
end;
CUST_AGE:='A001';
S:=S+CUST_AGE;
CUST[0]:=#0;
index:=1;
for j:=index to Length(S) do
Cust[j]:=Char(S[j]);
index:=j;
S:='';
for j:=index to index+length(NUM)-1 do
Cust[j]:=char(NUM[j-Index]);
index:=j;
with CustQry do
begin
Close;
SQL.clear;
SQL.add('SELECT CUST_NO,CUST_PASS,CUST_CZQX FROM CUST_ITEM WHERE CUST_PASS='''+Edit1.text+'''');
Open;
end;
CustQry.first;
while not CustQry.Eof do
begin
CUST_NO:=CustQry.Fields[0].Asstring; //编号
CUST_PASS:=CustQry.Fields[1].Asstring;//口令
CUST_CZQX:=CustQry.Fields[2].Asstring;//打印权限
S:=CUST_NO+CUST_PASS+CUST_CZQX;
for j:=index to index+length(S)-1 do
Cust[j]:=char(S[j-Index+1]);
index:=j;
S:='';
CustQry.Next;
end;
Result:=1;
Result:=POS_DownLoad_Data(1,@Cust[1],index-1);
if Result=0 then
begin
ShowMessage('操作员数据下传成功!');
POS_Comm_End();
end
else
begin
ShowMessage('操作员数据下传失败!');
Exit;
end;
end;
function TCUST_Form.MyIntToHex(aNum, aLength: Integer): TarrChar;
var
s:string;
i:Integer;
begin
setLength(Result,aLength);
s:= inttoHex(aNum,aLength*2);
for i:=0 to aLength-1 do
begin
Result[i]:=chr(strToInt('$'+copy(s,i*2+1,2)));
end;
end;
procedure TCUST_Form.Button1Click(Sender: TObject);
var
T:string;
begin
T:='SELECT * FROM CUST_ITEM WHERE 2>1';
if Trim(Edit1.Text)<>'' then
T:=T+' and CUST_pass ='''+Edit1.text+'''';
with DM.CUST_ADOQ do
begin
Close;
Sql.clear;
SQl.add(T);
Open;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -