procedure TFrmChargeMain.ProcCallCharge(varFileName:String);
var
tmpCalleeID,tmpDurationUnit,tmpLenPointer:Integer;
tmpEndRecord,tmpProgressNum,tmpFileLen,tmpIdent:LongInt;
tmpFreeChargeFlag,tmpStartFlag:Boolean;
tmpDialNumStr,tmpCallerType,tmpCalleeType,tmpBeginTimeStr:string;
//tmpBeginDateStr:String;
tmpCallerExtra_RoamFee,tmpCalleeExtra_RoamFee,tmpFee:Single;
tmpFile:file of StructCharge;
begin
try
AssignFile(tmpFile,varFileName); //varFileName 文件名
Reset(tmpFile);
tmpFileLen:=FileSize(tmpFile);
except
Beep;
MessageDlg(MsgFileErrStr,mtError,[mbOK],0);
CloseFile(tmpFile);
Exit;
end; try
SetupTable(TRUE); //table初始化
except
Beep;
SetupTable(FALSE);
MessageDlg(MsgTableErrStr,mtError,[mbOK],0);
Exit;
end; tmpEndRecord:=GetRecordCount(DmdMain.TblCallCharge);
tmpStartFlag:=TRUE;
PbrChargeMain.Visible:=TRUE;
//tmpFreeChargeFlag:=FALSE;
tmpProgressNum:=0;
tmpIdent:=0; try
while not Eof(tmpFile) do
begin
Read(tmpFile,StrCharge); //strCharge 是txt的机构
tmpProgressNum:=tmpProgressNum+1;
PbrChargeMain.Position:=Integer((tmpProgressNum*100)div tmpFileLen);//进度
if StrCharge.CallType>=CALLTYPE_MAX_NUM then continue;
if StrCharge.CallResult=SuccessCall then
begin
with DmdMain.TblCallCharge do
begin
if tmpStartFlag=TRUE then
begin
tmpIdent:=tmpEndRecord+1;
tmpStartFlag:=FALSE;
end
else
tmpIdent:=tmpIdent+1;
Append;
FieldValues['ID']:=tmpIdent;
FieldValues['CallType']:=CallTypeArray[StrCharge.CallType]; FieldValues['CallerStation']:=StrCharge.CallerStation;
FieldValues['NumberType']:=StrCharge.NumberType;
case StrCharge.CallType of
STtoST,STtoSS,STtoLS,STtoGRP:
tmpCallerType:=MobileUserStr;
SStoST,SStoLS,SStoGRP:
tmpCallerType:=DispatcherStr;
LStoSS,LStoST:
tmpCallerType:=PSTNUserStr;
else
tmpCallerType:=ErrUserStr;
end;
FieldValues['CallerType']:=tmpCallerType;
TtmpCallerType:=tmpCallerType;
。
可以了吧?
var
tmpCalleeID,tmpDurationUnit,tmpLenPointer:Integer;
tmpEndRecord,tmpProgressNum,tmpFileLen,tmpIdent:LongInt;
tmpFreeChargeFlag,tmpStartFlag:Boolean;
tmpDialNumStr,tmpCallerType,tmpCalleeType,tmpBeginTimeStr:string;
//tmpBeginDateStr:String;
tmpCallerExtra_RoamFee,tmpCalleeExtra_RoamFee,tmpFee:Single;
tmpFile:file of StructCharge;
begin
try
AssignFile(tmpFile,varFileName); //varFileName 文件名
Reset(tmpFile);
tmpFileLen:=FileSize(tmpFile);
except
Beep;
MessageDlg(MsgFileErrStr,mtError,[mbOK],0);
CloseFile(tmpFile);
Exit;
end; try
SetupTable(TRUE); //table初始化
except
Beep;
SetupTable(FALSE);
MessageDlg(MsgTableErrStr,mtError,[mbOK],0);
Exit;
end; tmpEndRecord:=GetRecordCount(DmdMain.TblCallCharge);
tmpStartFlag:=TRUE;
PbrChargeMain.Visible:=TRUE;
//tmpFreeChargeFlag:=FALSE;
tmpProgressNum:=0;
tmpIdent:=0; try
while not Eof(tmpFile) do
begin
Read(tmpFile,StrCharge); //strCharge 是txt的机构
tmpProgressNum:=tmpProgressNum+1;
PbrChargeMain.Position:=Integer((tmpProgressNum*100)div tmpFileLen);//进度
if StrCharge.CallType>=CALLTYPE_MAX_NUM then continue;
if StrCharge.CallResult=SuccessCall then
begin
with DmdMain.TblCallCharge do
begin
if tmpStartFlag=TRUE then
begin
tmpIdent:=tmpEndRecord+1;
tmpStartFlag:=FALSE;
end
else
tmpIdent:=tmpIdent+1;
Append;
FieldValues['ID']:=tmpIdent;
FieldValues['CallType']:=CallTypeArray[StrCharge.CallType]; FieldValues['CallerStation']:=StrCharge.CallerStation;
FieldValues['NumberType']:=StrCharge.NumberType;
case StrCharge.CallType of
STtoST,STtoSS,STtoLS,STtoGRP:
tmpCallerType:=MobileUserStr;
SStoST,SStoLS,SStoGRP:
tmpCallerType:=DispatcherStr;
LStoSS,LStoST:
tmpCallerType:=PSTNUserStr;
else
tmpCallerType:=ErrUserStr;
end;
FieldValues['CallerType']:=tmpCallerType;
TtmpCallerType:=tmpCallerType;
。
可以了吧?
试了几个方法,
BDE batch move, ms DTS ,PowerBuilder,SQL
速度最快的居然是SQL 语句,例子如下
BULK INSERT MSDB FROM "D:\PipeLineData\DB1.txt"
WITH (FIELDTERMINATOR ="\t",
ROWTERMINATOR ="\n"
详细的当然是看帮助了
也有坏处,在这句中这个文件必须存在于服务器的D:\PipeLineData\