📄 card_firini.pas
字号:
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_FirIni.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;
{---------------------------------------}
{开始初始化卡片}
procedure TFrmCard_FirIni.BitBtn1Click(Sender: TObject);
var
Rq: TDate;
Kh, CardStatus: string;
Thnum: integer;
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));
end;
{判断老卡是否已经退还}
if OldCardFlag then
begin
if not GetCardStatus(Rq, Kh) then
begin
PublicUnit.IsErrorFlag := True;
DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast,
nbInsert, nbEdit, nbCancel];
DBNavigator1.DataSource.DataSet.Cancel;
ToolButton4.Enabled := False;
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, nbEdit, nbCancel];
DBNavigator1.DataSource.DataSet.Cancel;
ToolButton4.Enabled := False;
Exit;
end;
end;
if SaveToDb then
//ShowMessage('卡片初始化成功!')
else
begin
PublicUnit.IsErrorFlag := True;
ShowMessage('卡片初始化失败!');
end;
DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbInsert,
nbEdit, nbCancel];
ToolButton4.Enabled := False;
ScanData;
end;
{取消初始化}
procedure TFrmCard_FirIni.BitBtn2Click(Sender: TObject);
var
rq: TDate;
IcKh, MachineNo, CardStatus, CzyName: string;
comh: smallint;
pass: PChar;
begin
PublicUnit.IfDeleteClick := True;
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);
ScanData;
end;
procedure TFrmCard_FirIni.DBEdit1DblClick(Sender: TObject);
var
DI_DfmDBCalendar: TDI_DfmDBCalendar;
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_FirIni.DBEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((Sender is TDBEdit) and (Key = VK_RETURN)) then
begin
if TDBEdit(Sender).Tag = 8 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_FirIni.BitBtn3Click(Sender: TObject);
begin
Close;
end;
procedure TFrmCard_FirIni.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_FirIni.DBEdit2Exit(Sender: TObject);
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 = 7 then
DBEdit7Enter(Self);
end;
procedure TFrmCard_FirIni.DBEdit7Enter(Sender: TObject);
var
CardValue, CardYj: Double;
begin
if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
Exit;
CardValue := StrToFloat(Trim(DBComboBox2.Text));
with CardSell_DataModule.ADOQuery2 do
begin
FieldByName('卡片面值').AsString := FloatToStr(CardValue);
if (CardValue -
FieldByName('押金').AsFloat) < 0 then
begin
ShowMessage('押金不能大于卡片面值!');
FieldByName('存款金额').AsFloat := 0;
Exit;
end
else
FieldByName('存款金额').AsFloat :=
CardValue -
FieldByName('押金').AsFloat;
end;
end;
procedure TFrmCard_FirIni.DBNavigator1Click(Sender: TObject;
Button: TNavigateBtn);
begin
if Button = nbInsert then
begin
DBNavigator1.VisibleButtons := [nbFirst, nbPrior, nbNext, nbLast, nbEdit,
nbCancel];
ToolButton4.Enabled := False;
GetIniValue;
end;
end;
//设置默认选项(售卡机编码,押金)
procedure TFrmCard_FirIni.BitBtn4Click(Sender: TObject);
begin
SetValue;
end;
procedure TFrmCard_FirIni.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if DBEdit1.DataSource.DataSet.State in [dsEdit, dsInsert] = False then
Exit;
if Key = 40 then
begin
CardSell_DataModule.ADOQuery2.Append;
GetIniValue;
end;
end;
procedure TFrmCard_FirIni.DBEdit3DblClick(Sender: TObject);
var
ADataSet: TDataSet;
DicName, CardValue, CardType: string;
TemporaryTableNames: TStrings;
DI_DfmDBDictionery: TDI_DfmDBDictionery;
begin
ADataSet := TDBEdit(Sender).DataSource.DataSet;
if not (ADataSet.State in [dsEdit, dsInsert]) then
Exit;
if TDBEdit(Sender).Tag = 7 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;
procedure TFrmCard_FirIni.DBEdit3Change(Sender: TObject);
begin
if (CardSell_DataModule.ADOQuery2.FieldByName('卡片类型').AsString = '') or
(CardSell_DataModule.ADOQuery2.FieldByName('卡片面值').AsString = '') then
Exit;
if (PublicUnit.IfSaveClick) or (PublicUnit.IfDeleteClick) then
Exit;
//GetCardNo;
DBEdit7Enter(Sender);
end;
procedure TFrmCard_FirIni.DBEdit5DblClick(Sender: TObject);
var
ADataSet: TDataSet;
DicName, CardValue, CardType: 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) not null Primary Key)');
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;
procedure TFrmCard_FirIni.Button1Click(Sender: TObject);
begin
Card_ChangePsw.SetWork;
end;
function TFrmCard_FirIni.GetIcKh(CardLx, CardValue: string; var First:
string; var Second: string): Boolean;
var
MaxKh: string;
ti: TInifile;
begin
Result := False;
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;
Result := True;
end;
procedure TFrmCard_FirIni.DBComboBox2Change(Sender: TObject);
var
CardNo: string;
begin
{if OldCardFlag then {老卡保留原卡号}
{begin
CardNo:=CardSell_DataModule.ADOQuery2.FieldByName('IC卡号').AsString;
GetPreCardXx(CardNo);
end
else{新卡,根据类型和面值自动生成卡号}
{ if not ChangeKh(Trim(DBComboBox1.Text),Trim(DBComboBox2.Text)) then Exit;}
DBEdit7Enter(Self);
end;
procedure TFrmCard_FirIni.Button2Click(Sender: TObject);
var
Pass2: string;
returnvalue, Comh: smallint;
pass: Pchar;
ti1: TIniFile;
begin
ti1 := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'System.ini');
Pass2 := ti1.ReadString('默认选项', 'Mima', '55555');
Pass2 := UnEncryFunc(Trim(Pass2));
Comh := ti1.ReadInteger('默认选项', 'Port', 0);
pass := Pchar(Trim(Pass2));
returnvalue := ReadFromDll('checkpass', Comh, pass);
if returnvalue <> 1 then
begin
ShowMessage('密码校验错误!');
Exit;
end;
//returnvalue := WriteToCard(pass, Comhm, Pchar('00000000'), Pchar('00000000'), '04',
// '0000', '00', '0');
returnvalue := ReadFromDll('intialize', Comh, pass);
if returnvalue <> 1 then
begin
ShowMessage('写卡错误!');
Exit;
end
else
ShowMessage('清空卡号成功!');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -