📄 card_inicard.pas
字号:
Trim(CardNo);
DBEdit3.ReadOnly := True;
OldCardFlag := True;
end
else
//ChangeKh(CardType,CardValue);{新卡}
begin
ShowMessage('这是一张新卡,请输入卡号!');
DBEdit3.ReadOnly := False;
DBEdit3.DataSource.DataSet.FieldByName('IC卡号').EditMask := '00000000';
DBEdit3.SetFocus;
end;
//DBEdit1.SetFocus;
ToolButton4.Enabled := True;
ti.Free;
end;
{通过卡号获得卡片类型和卡片面值的相关信息}
procedure TFrmCard_IniCard.GetPreCardXx(CardNo: string);
var
Fir, Sec, CardLx, CardValue: string;
ti: TInifile;
begin
CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString := Trim(CardNo);
ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
Fir := Copy(Trim(CardNo), 1, 1);
Sec := Copy(Trim(CardNo), 2, 1);
CardLx := ti.ReadString('卡类型对照表', Fir, '');
CardValue := ti.ReadString('卡面值对照表', Sec, '');
if CardLx <> '' then
CardSell_DataModule.ADOQuery2.FieldByName('卡片类型').AsString :=
Trim(CardLx);
if CardValue <> '' then
CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString :=
Trim(CardValue);
CardSell_DataModule.ADOQuery2.FieldByName('存款金额').AsFloat :=
StrToFloat(CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString) -
CardSell_DataModule.ADOQuery2.FieldByName('押金').AsFloat;
DBComboBox1.ReadOnly := True;
DBComboBox2.ReadOnly := True;
end;
{设置默认值}
procedure TFrmCard_IniCard.SetValue;
var
ti: TInifile;
MachineNo, CardType, CardValue: string;
Yj: Double;
begin
ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
MachineNo :=
Trim(CardSell_DataModule.ADOQuery2.FieldByName('售卡机编码').AsString);
Yj := CardSell_DataModule.ADOQuery2.FieldByName('押金').AsFloat;
CardType := CardSell_DataModule.ADOQuery2.FieldByName('卡片类型').AsString;
CardValue := CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString;
ti.WriteString('默认选项', 'MachineNo', MachineNo);
ti.WriteString('默认选项', 'CardType', CardType);
ti.WriteString('默认选项', 'CardValue', CardValue);
ti.WriteFloat('默认选项', 'CardYj', Yj);
ti.Free;
end;
procedure TFrmCard_IniCard.GetCardNo;
var
CardType, CardValue, Kh: string;
begin
CardType :=
Trim(CardSell_DataModule.ADOQuery2.FieldByName('卡片类型').AsString);
CardValue :=
Trim(CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString);
if (CardType = '') or (CardValue = '') then
begin
ShowMessage('请输入卡号和卡片类型!');
Exit;
end;
PZ_DmDic.SetWork('IC卡号', Kh, 10, CardType, CardValue);
CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString := Trim(Kh);
end;
//初始化多张卡片(所有卡片的卡片类型,面值,押金,存款金额,日期等信息默认为与第一张卡片完全一样)
procedure TFrmCard_IniCard.IniMulCard;
var
CardLx, CardValue, IcKh, KhName, CardStatus, CzyName, MachineNo,
ValDate, Ss, CardNo: string;
i, Sl, ValDayNum: integer;
CkJe, TkJe, Yj, Ye: Double;
Rq: TDate;
KpList: TStrings;
begin
if not OldCardFlag then
begin
ShowMessage('新卡无法批量初始化!');
PublicUnit.IsErrorFlag := True;
Exit;
end;
Sl := StrToInt(Trim(SpinEdit1.Text));
KpList := TStringList.Create;
KpList.Clear;
with CardSell_DataModule.ADOQuery2 do
begin
FieldByName('有效天数').AsInteger := 0;
Rq := StrToDate(DateTimeToStr(Fields[0].AsDateTime));
//CardNo:=Trim(FieldByName('IC卡号').AsString);
CkJe := Fields[2].AsFloat;
TkJe := 0;
Yj := Fields[4].AsFloat;
KhName := '';
ValDayNum := FieldByName('有效天数').AsInteger;
CardStatus := '未使用';
CardLx := Trim(Fields[8].AsString);
CzyName := Trim(Fields[9].AsString);
MachineNo := Trim(Fields[10].AsString);
CardValue := Trim(Fields[11].AsString);
Ye := CKJe;
ValDate := '0';
end;
//FirCardh:=StrToInt(CardNo);
for i := 1 to Sl do
begin
if i = 1 then
ShowMessage('请插入IC卡!')
else
begin
ShowMessage('请取出上一张IC卡!');
ShowMessage('请插入下一张IC卡!');
end;
if MessageBox(handle, '想继续此张卡片吗?', '提示', MB_YesNo) = ID_No then
Continue;
//FirCardh := FirCardh + 1;
//IcKh := IntToStr(FirCardh);
if not ReadKh(CardNo, Comhm, Pchar(PassWord1)) then
Continue;
if CardNo = '' then
Continue;
IcKh := Trim(CardNo);
if not GetCardStatus(Rq, IcKh) then
Continue;
CardStatus := '未使用';
if not SaveToDb1(Rq, IcKh, KhName, CardStatus,
CardLx, CzyName, MachineNo, CardValue, ValDate,
CkJe, TkJe, Yj, Ye, ValDayNum) then
begin
PublicUnit.IsErrorFlag := True;
Continue;
end;
KpList.Add(IntToStr(i));
end;
for i := 0 to KpList.Count - 1 do
begin
if KpList[i] = '' then
Continue;
if i <> KpList.Count - 1 then
Ss := Ss + KpList[i] + ','
else
Ss := Ss + KpList[i] + '张';
end;
ShowMessage('第' + Ss + '卡片初始化成功!');
ScanData;
KpList.Free;
end;
{在数据库中寻找指定类型和面值的最大卡号}
function TFrmCard_IniCard.GetMaxKh(CardLx, CardValue: string; var MaxKh:
string): Boolean;
var
IntMaxKh, IntMaxKh1: integer;
begin
Result := False;
with CardSell_DataModule.ADOQuery1 do
begin
Close;
Sql.Clear;
Sql.Add('Select Distinct IC卡号 From SCSJ_TKPXX');
Sql.Add('Where 卡片类型=''' + Trim(CardLx) + '''' + 'And 卡片面值=''' +
Trim(CardValue) + '''');
try
Open;
except
ShowMessage('无法打开卡号信息表!');
Exit;
end;
if RecordCount = 0 then
begin
Result := True;
MaxKh := '';
Exit;
end;
First;
IntMaxKh := StrToInt(Fields[0].AsString);
while not eof do
begin
IntMaxKh1 := StrToInt(Fields[0].AsString);
if IntMaxKh1 > IntMaxKh then
IntMaxKh := IntMaxKh1;
Next;
end;
MaxKh := IntToStr(IntMaxKh);
end;
Result := True;
end;
{初始化卡片类型和卡片面值列表}
procedure TFrmCard_IniCard.IniComboBox;
var
ti: TInifile;
TypeCount, i: integer;
CardType: string;
begin
DBComboBox1.Clear;
DBComboBox2.Clear;
ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\System.ini');
TypeCount := ti.ReadInteger('CardTypeList', 'CardTypeCount', 0);
for i := 1 to TypeCount do
begin
CardType := ti.ReadString('CardTypeList', 'CardType' + IntToStr(i), '');
if CardType = '' then
Continue;
DBComboBox1.Items.Add(CardType);
if DBComboBox1.Items.Count > 0 then
DBComboBox1.ItemIndex := 0;
end;
TypeCount := ti.ReadInteger('CardValueList', 'CardValueCount', 0);
for i := 1 to TypeCount do
begin
CardType := ti.ReadString('CardValueList', 'CardValue' + IntToStr(i), '');
if CardType = '' then
Continue;
DBComboBox2.Items.Add(CardType);
if DBComboBox2.Items.Count > 0 then
DBComboBox2.ItemIndex := 0;
end;
ti.Free;
end;
{根据卡片类型和面值自动生成卡号}
function TFrmCard_IniCard.ChangeKh(CardLx, CardValue: string): Boolean;
var
MaxKh, First, Second: string;
ti: TInifile;
ADataSet: TDataSet;
begin
ADataSet := DBComboBox1.DataSource.DataSet;
if not (ADataSet.State in [dsEdit, dsInsert]) then
Exit;
ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\System.ini');
First := ti.ReadString('卡类型首位对照表', Trim(CardLx), '0');
if First = '0' then
begin
ShowMessage('读取卡片类型信息错误!');
Exit;
end;
ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\System.ini');
Second := ti.ReadString('卡面值首位对照表', Trim(CardValue), '0');
if Second = '0' then
begin
ShowMessage('读取卡片面值信息错误!');
Exit;
end;
if not GetMaxKh(CardLx, CardValue, MaxKh) then
Exit;
if MaxKh = '' then
MaxKh := Trim(First + Second + '000000')
else
MaxKh := Trim(IntToStr(StrToInt(Trim(MaxKh)) + 1));
with CardSell_DataModule.ADOQuery2 do
begin
FieldByName('存款金额').AsFloat :=
StrToFloat(FieldByName('卡片面值').AsString) -
FieldByName('押金').AsFloat;
FieldByName('IC卡号').AsString := Trim(MaxKh);
end;
ti.Free;
end;
{获得数据库中与读写器中卡片卡号相同,状态为使用的最近的一条记录的序号}
function TFrmCard_IniCard.FindNeareastRecord(CardNo:String;var MaxXh:integer):Boolean;
begin
Result:=False;
MaxXh:=-100;
with CardSell_DataModule.ADOQuery3 do
begin
Close;
Sql.Clear;
Sql.Add('Select top 1 序号');
Sql.Add('From SCSJ_TSKXX Where');
//Sql.Add('Convert(char(10),日期,20)<=''' + DateToStr(Rq) + '''');
Sql.Add('IC卡号=''' + Trim(CardNo) + '''');
Sql.Add('And 卡片状态=''' +'未使用'+ '''');
Sql.Add('Order by 序号 DESC');
try
Open;
except
Screen.Cursor := crDefault;
ShowMessage('无法浏览卡片初始化信息!');
Exit;
end;
if RecordCount = 0 then
begin
ShowMessage('卡片信息表中没有此卡号的初始化信息!');
Exit;
end;
MaxXh:=FieldByName('序号').AsInteger;
end;
Result:=True;
end;
{---------------------------------------}
{开始初始化卡片}
procedure TFrmCard_IniCard.BitBtn1Click(Sender: TObject);
var
Rq: TDateTime;
Kh, CardStatus: string;
begin
//if IfEditNull then Exit;
WriteToHistroy('前台', Now, Time, '用户《' + FrmMain.UserName +
'进行了退卡操作', FrmMain.UserName);
PublicUnit.IfSaveClick := True;
if StrToInt(Trim(SpinEdit1.Text)) > 1 then
begin
//IniMulCard;
Exit;
end;
CardStatus := '未使用';
with CardSell_DataModule.ADOQuery2 do
begin
Kh := Trim(FieldByName('IC卡号').AsString);
//Rq := StrToDate(DateTimeToStr(FieldByName('日期').AsDateTime));
Rq:=FieldByName('日期').AsDateTime;
end;
{判断老卡是否已经退还}
if OldCardFlag then
begin
if not GetCardStatus(Rq, Kh) then
begin
PublicUnit.IsErrorFlag := True;
DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast,
nbInsert,nbCancel];
DBNavigator1.DataSource.DataSet.Cancel;
ToolButton4.Enabled := False;
SetReadOnlyTrue;
Exit;
end;
end
else {若是新卡,要保证此卡号没有在数据库中出现过}
begin
CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString :=
Trim(DBEdit3.Text);
Kh := Trim(CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString);
if not GetNewCardStatus(Rq, Kh) then
begin
PublicUnit.IsErrorFlag := True;
DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast,
nbInsert, nbCancel];
DBNavigator1.DataSource.DataSet.Cancel;
ToolButton4.Enabled := False;
DBEdit3.ReadOnly:=True;
SetReadOnlyTrue;
Exit;
end;
end;
if SaveToDb then
//ShowMessage('卡片初始化成功!')
else
begin
PublicUnit.IsErrorFlag := True;
ShowMessage('卡片初始化失败!');
end;
DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbInsert,
nbCancel];
ToolButton4.Enabled := False;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -