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;

可以了吧?