📄 card_secsell.~pas
字号:
end;
procedure TFrmCard_SecSell.BitBtn2Click(Sender: TObject);
var
rq: TDate;
IcKh, MachineNo, CardStatus, CzyName,CardNo: string;
MaxNum:integer;
begin
if MessageDlg('此操作将会清除卡片信息表中的数据,是否继续?',
mtconfirmation, mbokcancel, 0) = mrcancel then
Exit;
{删除记录时确保卡片在读写器中}
if not ReadKh(CardNo, Comhm, Pchar(PassWord1)) then
begin
ShowMessage('请插入卡片!');
Exit;
end;
CardNo:=Trim(CardNo);
if not FindNeareastRecord(CardNo,MaxNum) then Exit;
if MaxNum=-100 then Exit;
if ((CardSell_DataModule.ADOQuery2.FieldByName('序号').AsInteger<>MaxNum) or
(CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString <>Trim(CardNo))) then
begin
ShowMessage('此条记录不是最新插入的,系统无法删除该记录!');
Exit;
end;
with CardSell_DataModule.ADOQuery2 do
begin
rq := StrToDate(DateTimeToStr(Fields[0].AsDateTime));
IcKh := (Fields[1].AsString);
MachineNo := (Fields[10].AsString);
CardStatus := Trim(Fields[7].AsString);
CzyName := Trim(Fields[9].AsString);
end;
if not DeleteFromDB(rq, IcKh, MachineNo, CardStatus, CzyName) then
begin
ShowMessage('删除售卡信息表失败!');
Exit;
end;
if not DeleteFromSubDB(rq, IcKh, MachineNo, Cardstatus, CzyName) then
begin
ShowMessage('删除售卡信息子表失败');
Exit;
end;
//加入将卡恢复到操作前的状态
//returnvalue:=ReadFromDll('intialize',comh,pass);
//清除有效期和余额
//returnvalue:=ReadFromDll('clear',comh,pass);
ToolButton2.Enabled:=False;
ScanData;
end;
//从文件中读取卡号信息
function TFrmCard_SecSell.ReadKh(var CardNo: string; comh: smallint; pass:
Pchar): Boolean;
var
returnvalue: smallint;
AFileName, s: string;
ATextFile: Textfile;
begin
Result := False;
returnvalue := ReadFromDll('readcardno', comh, pass);
if returnvalue <> 0 then
begin
Screen.Cursor := crDefault;
ShowMessage('读取卡号错误!');
Exit;
end;
AFileName := Trim('c:\windows\cardno.txt');
if not FileExists(AFileName) then
begin
Screen.Cursor := crDefault;
ShowMessage('卡号信息文件' + AFileName + '不存在,系统无法继续工作!');
Exit;
end;
AssignFile(ATextFile, AFileName);
try
ReSet(ATextFile);
except
Screen.Cursor := crDefault;
ShowMessage('卡号信息文件' + AFileName + '受到破坏,系统无法继续工作!');
CloseFile(ATextFile);
Exit;
end;
while not Eof(ATextFile) do
Readln(ATextFile, s);
CloseFile(ATextFile);
s := Trim(s);
if s='FFFFFFFF' then
begin
ShowMessage('卡片插反了,请正确插入卡片!');
Exit;
end;
{while Copy(s, 1, 1) = '0' do
s := Trim(Copy(s, 2, 10000000));}
CardNo := Trim(s);
Result := True;
end;
function TFrmCard_SecSell.ReadXx(CardNo: string; Rq: TDate): Boolean;
var
CardStatus: string;
begin
CardStatus := '未使用';
Result := False;
with CardSell_DataModule.ADOQuery3 do
begin
Close;
Sql.Clear;
Sql.Add('Select top 1 卡片类型,卡片面值,押金,存款金额');
Sql.Add('From SCSJ_TSKXX Where 卡片状态=''' + Trim(CardStatus) + '''');
Sql.Add('And Convert(char(10),日期,20)<=''' + DateToStr(Rq) + '''');
Sql.Add('And IC卡号=''' + Trim(CardNo) + '''');
Sql.Add('Order by 序号 DESC');
try
Open;
except
Screen.Cursor := crDefault;
ShowMessage('无法浏览卡片初始化信息!');
Exit;
end;
if RecordCount = 0 then
begin
Screen.Cursor := crDefault;
ShowMessage('此卡未初始化!');
Exit;
end;
CardSell_DataModule.ADOQuery2.FieldByName('卡片类型').AsString :=
Trim(Fields[0].AsString);
CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString :=
Trim(Fields[1].AsString);
CardSell_DataModule.ADOQuery2.FieldByName('押金').AsFloat :=
Fields[2].AsFloat;
CardSell_DataModule.ADOQuery2.FieldByName('存款金额').AsFloat :=
Fields[3].AsFloat;
end;
Result := True;
end;
procedure TFrmCard_SecSell.DBEdit1DblClick(Sender: TObject);
var
Rq: TDate;
begin
if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
Exit;
{DI_DfmDBCalendar := TDI_DfmDBCalendar.Create(Application, nil,
TDBEdit(Sender),
'DBEdit');
with DI_DfmDBCalendar do
begin
Width := 400;
ShowModal;
Free;
end;}
PZ_RqXz.SetWork(Rq);
DBEdit1.Field.Value := Rq;
end;
procedure TFrmCard_SecSell.DBEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((Sender is TDBEdit) and (Key = VK_RETURN)) then
begin
if TDBEdit(Sender).TabOrder = 12 then
begin
if TDBEdit(Sender).DataSource.DataSet <> nil then
with TDBEdit(Sender).DataSource.DataSet do
begin
Next;
DBEdit1.SetFocus;
if EOF and CanModify then
Append;
end;
end
else
perform(WM_NEXTDLGCTL, 0, 0);
end;
end;
procedure TFrmCard_SecSell.BitBtn3Click(Sender: TObject);
begin
Close;
end;
procedure TFrmCard_SecSell.DBEdit1Exit(Sender: TObject);
begin
if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
Exit;
CardSell_DataModule.ADOQuery2.FieldByName('操作员姓名').AsString :=
Trim(FrmMain.UserName);
CardSell_DataModule.ADOQuery2.FieldByName('卡片状态').AsString := '使用';
end;
procedure TFrmCard_SecSell.DBEdit2Exit(Sender: TObject);
var
CardNo: string;
Rq: TDate;
pass: PChar;
begin
if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
Exit;
if TEdit(Sender).Text = '' then
begin
ShowMessage(TEdit(Sender).Hint + '字段不能为空!');
TEdit(Sender).SetFocus;
Exit;
end;
if TEdit(Sender).Tag = 2 then
begin
Screen.Cursor := crHourGlass;
pass := Pchar(PassWord1);
if not ReadKh(CardNo, Comhm, pass) then
Exit;
CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString :=
Trim(CardNo);
Rq :=
StrToDate(DateTimeToStr(CardSell_DataModule.ADOQuery2.FieldByName('日期').AsDateTime));
if not ReadXx(CardNo, Rq) then
Exit;
DBEdit4.SetFocus;
Screen.Cursor := crDefault;
end;
end;
procedure TFrmCard_SecSell.GetIniValue;
var
ti: TInifile;
MachineNo, CardNo: string;
Rq: TDate;
ValDayNum: integer;
begin
Screen.Cursor := crHourGlass;
OldCardFlag := False;
PublicUnit.IsErrorFlag := False;
CardSell_DataModule.ADOQuery2.FieldByName('日期').AsDateTime := Date;
CardSell_DataModule.ADOQuery2.FieldByName('操作员姓名').AsString :=
Trim(FrmMain.UserName);
CardSell_DataModule.ADOQuery2.FieldByName('卡片状态').AsString := '使用';
ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
MachineNo := ti.ReadString('默认选项', 'MachineNo', '2');
ValDayNum := ti.ReadInteger('默认选项', 'ValDayNum', 5);
CardSell_DataModule.ADOQuery2.FieldByName('售卡机编码').AsString :=
Trim(MachineNo);
CardSell_DataModule.ADOQuery2.FieldByName('有效天数').AsInteger := ValDayNum;
Comhm := ti.ReadInteger('默认选项', 'Port', 0);
PassWord1 := ti.ReadString('默认选项', 'Mima', '555555');
PassWord1 := UnEncryFunc(Trim(PassWord1));
if not ReadKh(CardNo, Comhm, Pchar(PassWord1)) then
begin
PublicUnit.IsErrorFlag := True;
DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbInsert,
nbEdit, nbCancel];
DBNavigator1.DataSource.DataSet.Cancel;
Exit;
end;
if CardNo <> '00000000' then
OldCardFlag := True;
CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString := Trim(CardNo);
Rq :=
StrToDate(DateTimeToStr(CardSell_DataModule.ADOQuery2.FieldByName('日期').AsDateTime));
if not ReadXx(CardNo, Rq) then
begin
PublicUnit.IsErrorFlag := True;
DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbInsert,
nbEdit, nbCancel];
DBNavigator1.DataSource.DataSet.Cancel;
Exit;
end;
DBEdit4.SetFocus;
Screen.Cursor := crDefault;
ToolButton1.Enabled := True;
ti.Free;
end;
procedure TFrmCard_SecSell.SetValue;
var
ti: TInifile;
MachineNo: string;
ValDayNum: integer;
begin
ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
MachineNo :=
Trim(CardSell_DataModule.ADOQuery2.FieldByName('售卡机编码').AsString);
ti.WriteString('默认选项', 'MachineNo', MachineNo);
ValDayNum := CardSell_DataModule.ADOQuery2.FieldByName('有效天数').AsInteger;
ti.WriteString('默认选项', 'MachineNo', MachineNo);
ti.WriteInteger('默认选项', 'ValDayNum', ValDayNum);
ti.Free;
end;
procedure TFrmCard_SecSell.DBNavigator1Click(Sender: TObject;
Button: TNavigateBtn);
begin
if Button = nbInsert then
begin
DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbEdit,
nbCancel];
ToolButton1.Enabled := False;
ToolButton2.Enabled := False;
GetIniValue;
end;
if Button = nbCancel then
begin
ToolButton1.Enabled := False;
ToolButton2.Enabled := False;
end;
end;
procedure TFrmCard_SecSell.BitBtn4Click(Sender: TObject);
begin
SetValue;
end;
procedure TFrmCard_SecSell.DBEdit4DblClick(Sender: TObject);
var
ADataSet: TDataSet;
DicName: string;
TemporaryTableNames: TStrings;
DI_DfmDBDictionery: TDI_DfmDBDictionery;
begin
ADataSet := TDBEdit(Sender).DataSource.DataSet;
if not (ADataSet.State in [dsEdit, dsInsert]) then
Exit;
DicName := 'Dic_' + Trim(TDbEdit(Sender).Field.FieldName);
DI_DfmDataModule1.AnotherDBADOConnection.Close;
DI_DfmDataModule1.AnotherDBADOConnection.ConnectionString :=
'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=' + FrmMain.Dbuser
+
';Password=' + FrmMain.DBPass + ';Initial Catalog=' + FrmMain.DbName +
';Data Source=' + FrmMain.ServerName;
TemporaryTableNames := TStringList.Create;
DI_DfmDataModule1.AnotherDBADOConnection.GetTableNames(TemporaryTableNames,
False);
if TemporaryTableNames.IndexOf(DicName) = -1 then
begin
if MessageDlg('没有字典,是否创建?', mtConfirmation, mbOKCancel, 0) =
mrCancel then
Exit;
with DI_DfmDataModule1.DictioneryADOQuery do
begin
Close;
Sql.Clear;
Sql.Add('Create Table ' + DicName);
Sql.Add('(ID varChar (10),DICTIONARY varChar(50))');
try
ExecSql;
except
ShowMessage('error');
Exit;
end;
end;
end;
DI_DfmDBDictionery := TDI_DfmDBDictionery.Create(Self, DicName, DBGrid1,
TDBEdit(Sender), 'DBEdit');
DI_DfmDBDictionery.ShowModal;
DI_DfmDBDictionery.Free;
TemporaryTableNames.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -