📄 ca010.pas
字号:
unit CA010;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
BaseDialog, StdCtrls, Db, DBTables, Buttons;
type
TfmCA010 = class(TfmBaseDialog)
Label1: TLabel;
Label2: TLabel;
edFilePath: TEdit;
OpenDialog1: TOpenDialog;
BitBtn1: TBitBtn;
GroupBox1: TGroupBox;
RB1: TRadioButton;
RB2: TRadioButton;
Memo1: TMemo;
Label3: TLabel;
CB1: TComboBox;
procedure bnOKClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function InsertIntoCardStock(sCardType,sPublishCode,sSerialNumber,sCardNo,
sPassWord,sCardParValue,sEndDate:string):integer;
function InsertIntoCardStockNotCommit(sCardType,sPublishCode,sSerialNumber,sCardNo,
sPassWord,sCardParValue,sEndDate:string):integer;
function GetCardInfoByLineStr(sLineStr :string; var sPublishCode:string; var sSerialNumber:string; var sCardNo:string;
var sPassWord:string; var sCardParValue:string; var sEndDate:string; var sRet : string):integer;//01
function GetCheckCode(sCardCode,sCardType,sPublishCode,sSerialNumber,sCardNo,
sPassWord:string):string;
procedure InsertWithoutRollback();
procedure InsertWithRollbackAll();
procedure PrepareDlg; override;
end;
var
fmCA010: TfmCA010;
implementation
uses PublicFunction, Main, DataModule,GetData;
var
sPrevPassword : String;
{$R *.DFM}
procedure TfmCA010.PrepareDlg;
begin
//edLoginID.Text := sLoginID;
//edAdmName.Text := sAdmName;
end;
procedure TfmCA010.bnOKClick(Sender: TObject);
begin
inherited;
if RB1.Checked then
InsertWithRollbackAll()
else
InsertWithoutRollback();
end;
procedure TfmCA010.InsertWithRollbackAll();
var
strline :string;
iRet : integer;
sCardType,sPublishCode,sSerialNumber,sCardNo : string;
sPassWord,sCardParValue,sEndDate,sRet : string;
sMaxPublishCode,sMinSerialNumber,sMaxSerialNumber :string;
fCount,fSuccess : real;
bSuccess : boolean;
begin
inherited;
fCount := 0;
fSuccess := 0;
sCardType := CB1.Text;
bSuccess := true;
//读文件
AssignFile(Input, edFilePath.text);
Reset(Input);
Memo1.Lines.Add( '导入数据开始。。。');
DM.DB.StartTransaction;
try
while not Eof(Input) do
begin
Readln(Input, strline);
fCount := fCount + 1;
//分解字符串(返回发行编号、序号、卡号、密码、面值、截止日期,出错返回内容。)
iRet := GetCardInfoByLineStr(strline,sPublishCode,sSerialNumber,sCardNo,
sPassWord,sCardParValue,sEndDate,sRet);
if fCount = 1 then sMinSerialNumber := sSerialNumber;
if iRet = 0 then
begin
bSuccess := false;
break;
end
else
begin
//插入到数据库
iRet := InsertIntoCardStockNotCommit(sCardType,sPublishCode,sSerialNumber,sCardNo,
sPassWord,sCardParValue,sEndDate);
if iRet = 0 then
begin
bSuccess := false;
break;
end;
end;
end;
sMaxSerialNumber := sSerialNumber;
sMaxPublishCode := sPublishCode;
except
bSuccess := false;
end;
if bSuccess then
begin
DM.DB.Commit;
WriteOperatorLog('[卡数据导入][Pwpt_CardStock]['+'总共处理'+floattostr(fCount)+
'条。'+'发行编号['+sMaxPublishCode+']'+
'最小序号['+sMinSerialNumber+']'+
'最大序号'+sMaxSerialNumber+']');
Memo1.Lines.Add( '导入数据结束。。。');
Memo1.Lines.Add( '总共处理'+floattostr(fCount)+ '条。');
CloseFile(Input);
end
else
begin
DM.DB.Rollback ;
Memo1.Lines.Add( '导入数据结束。。。');
Memo1.Lines.Add( '在第'+floattostr(fCount)+ '条导入失败!');
end;
CloseFile(Input);
end;
procedure TfmCA010.InsertWithoutRollback();
var
strline :string;
iRet : integer;
sCardType,sPublishCode,sSerialNumber,sCardNo : string;
sPassWord,sCardParValue,sEndDate,sRet : string;
sMaxPublishCode,sMinSerialNumber,sMaxSerialNumber :string;
fCount,fSuccess : real;
begin
inherited;
fCount := 0;
fSuccess := 0;
sCardType := CB1.Text;
//读文件
if edFilePath.text ='' then
begin
MyWarning('文件不存在!');
exit;
end;
AssignFile(Input, edFilePath.text);
Reset(Input);
Memo1.Lines.Add( '导入数据开始。。。');
while not Eof(Input) do
begin
Readln(Input, strline);
fCount := fCount + 1;
//分解字符串(返回发行编号、序号、卡号、密码、面值、截止日期,出错返回内容。)
iRet := GetCardInfoByLineStr(strline,sPublishCode,sSerialNumber,sCardNo,
sPassWord,sCardParValue,sEndDate,sRet);
if iRet = 1 then
begin
// Memo1.Lines.Add( sPublishCode +' '+ sSerialNumber +' '+ sCardNo +' '+
// sPassWord +' '+ sCardParValue +' '+ sEndDate);
//插入到数据库(卡种、发行编号、序号、卡号、密码、面值、截止日期。)
iRet := InsertIntoCardStock(sCardType,sPublishCode,sSerialNumber,sCardNo,
sPassWord,sCardParValue,sEndDate);
if iRet = 0 then
Memo1.Lines.Add( '第'+floattostr(fCount)+'条插入数据库出错!')
else
begin
if fSuccess = 1 then sMinSerialNumber := sSerialNumber;
fSuccess := fSuccess + 1;
sMaxSerialNumber := sSerialNumber;
sMaxPublishCode := sPublishCode;
end;
end;
end;
CloseFile(Input);
WriteOperatorLog('[卡数据导入][Pwpt_CardStock]['+'总共处理'+floattostr(fCount)+
'条,其中成功'+floattostr(fSuccess)+
'条。'+'发行编号['+sMaxPublishCode+']'+
'最小序号['+sMinSerialNumber+']'+
'最大序号'+sMaxSerialNumber+']');
Memo1.Lines.Add( '导入数据结束。。。');
Memo1.Lines.Add( '总共处理'+floattostr(fCount)+
'条,其中成功'+floattostr(fSuccess)+
'条,出错'+floattostr(fCount - fSuccess)+'条。');
end;
procedure TfmCA010.BitBtn1Click(Sender: TObject);
begin
inherited;
OpenDialog1.Title := '选择导入文件';
if OpenDialog1.Execute then begin
edFilePath.text := OpenDialog1.FileName;
end;
end;
function TfmCA010.GetCardInfoByLineStr(sLineStr :string; var sPublishCode:string; var sSerialNumber:string; var sCardNo:string;
var sPassWord:string; var sCardParValue:string; var sEndDate:string; var sRet : string) : integer;
var
ioff : integer;
begin
GetCardInfoByLineStr := 0;
if trim(sLineStr) = '' then
begin
sRet := '本条记录为空!';
exit;
end;
ioff := 1;
sPublishCode := copy(sLineStr,ioff,18);
ioff := ioff + 18;
sSerialNumber := copy(sLineStr,ioff,6);
ioff := pos(' ',sLineStr);
sLineStr := trim(copy(sLineStr,ioff + 1,length(sLineStr)));
ioff := pos(' ',sLineStr);
sCardNo := trim(copy(sLineStr,1,ioff - 1));
sLineStr := trim(copy(sLineStr,ioff + 1,length(sLineStr)));
ioff := pos(' ',sLineStr);
sPassWord := trim(copy(sLineStr,1,ioff - 1));
sLineStr := trim(copy(sLineStr,ioff + 1,length(sLineStr)));
ioff := pos(' ',sLineStr);
sCardParValue := trim(copy(sLineStr,1,ioff - 1));
sLineStr := trim(copy(sLineStr,ioff + 1,length(sLineStr)));
ioff := pos(' ',sLineStr);
sEndDate := trim(copy(sLineStr,1,ioff - 1));
GetCardInfoByLineStr := 1;
end;
function TfmCA010.InsertIntoCardStock(sCardType,sPublishCode,sSerialNumber,sCardNo,
sPassWord,sCardParValue,sEndDate:string):integer;
var
sCardCode :string;
begin
result := 0;
DM.DB.StartTransaction;
try
with qyTemp do
begin
Close;
SQL.Clear;
SQL.Add('insert into Pwpt_CardStock (CardCode,CardType, ');
SQL.Add('CardParValue,PublishCode,SerialNumber,CardNo, ');
SQL.Add('PassWord,EndDate,CheckCode,CreateMan,CreateDate,bOut) ');
SQL.Add('values (:CardCode,:CardType, ');
SQL.Add(':CardParValue,:PublishCode,:SerialNumber,:CardNo, ');
SQL.Add(':PassWord,to_date(:EndDate,''yyyymmdd''),:CheckCode,:CreateMan,SysDate,''0'') ');
sCardCode := RightStr('0000000000' + floattostr(GetSerialID('PWPT_CARDSTOCK_ID')),10);
ParamByName('CardCode').AsString := sCardCode;
ParamByName('CardType').AsString := sCardType;
ParamByName('CardParValue').AsString := sCardParValue;
ParamByName('PublishCode').AsString := sPublishCode;
ParamByName('SerialNumber').AsString := sSerialNumber;
ParamByName('CardNo').AsString := sCardNo;
ParamByName('PassWord').AsString := sPassWord;
ParamByName('EndDate').AsString := sEndDate;
ParamByName('CheckCode').AsString :=
GetCheckCode(sCardCode,sCardType,sPublishCode,sSerialNumber,sCardNo,sPassWord) ;
ParamByName('CreateMan').AsString := sAdmCode;
ExecSQL;
end;
DM.DB.Commit;
result := 1;
except
DM.DB.Rollback;
end;
end;
function TfmCA010.InsertIntoCardStockNotCommit(sCardType,sPublishCode,sSerialNumber,sCardNo,
sPassWord,sCardParValue,sEndDate:string):integer;
var
sCardCode :string;
begin
try
with qyTemp do
begin
Close;
SQL.Clear;
SQL.Add('insert into Pwpt_CardStock (CardCode,CardType, ');
SQL.Add('CardParValue,PublishCode,SerialNumber,CardNo, ');
SQL.Add('PassWord,EndDate,CheckCode,CreateMan,CreateDate,bOut) ');
SQL.Add('values (:CardCode,:CardType, ');
SQL.Add(':CardParValue,:PublishCode,:SerialNumber,:CardNo, ');
SQL.Add(':PassWord,to_date(:EndDate,''yyyymmdd''),:CheckCode,:CreateMan,SysDate,''0'') ');
sCardCode := RightStr('0000000000' + floattostr(GetSerialID('PWPT_CARDSTOCK_ID')),10);
ParamByName('CardCode').AsString := sCardCode;
ParamByName('CardType').AsString := sCardType;
ParamByName('CardParValue').AsString := sCardParValue;
ParamByName('PublishCode').AsString := sPublishCode;
ParamByName('SerialNumber').AsString := sSerialNumber;
ParamByName('CardNo').AsString := sCardNo;
ParamByName('PassWord').AsString := sPassWord;
ParamByName('EndDate').AsString := sEndDate;
ParamByName('CheckCode').AsString :=
GetCheckCode(sCardCode,sCardType,sPublishCode,sSerialNumber,sCardNo,sPassWord) ;
ParamByName('CreateMan').AsString := sAdmCode;
ExecSQL;
end;
result := 1;
except
result := 0;
end;
end;
function TfmCA010.GetCheckCode(sCardCode,sCardType,sPublishCode,sSerialNumber,sCardNo,
sPassWord:string):string;
var
i : integer;
str :string;
fsum : real;
begin
fsum := 0;
str := sCardCode + sCardType + sPublishCode + sSerialNumber + sCardNo + sPassWord;
for i :=1 to length(str) do
begin
fsum := fsum + Ord(str[i]);
end;
result := RightStr('0000000000' + floattostr(fsum) + floattostr(Random(10000) * Random(10000)),10) ;
end;
procedure TfmCA010.FormCreate(Sender: TObject);
begin
inherited;
CB1.Clear;
with qyTemp do
begin
Close;
SQL.Clear;
SQL.Add('select CardType from Pwpt_CardType where bused = ''1'' ');
SQL.Add('group by CardType order by CardType');
Open;
end;
while not qyTemp.Eof do
begin
CB1.Items.Add(qyTemp.fieldbyname('CardType').AsString);
qyTemp.Next;
end;
if CB1.Items.Count > 0 then CB1.ItemIndex := 0;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -