delphi writeln 写入记事表出现漏写,老是最后一行,有一段会少掉,位数还不一样。

解决方案 »

  1.   


    procedure TMainForm.CalcEat(var Msg: TMessage);//统计订餐员工明细
    var
      F:TextFile;
      strFile:String;
      i:Integer;
      ArrCount:Array[1..4] of Integer;
    begin
      for i:=1 to 4 do
        ArrCount[i]:=0;
      with AQuery do
      begin
        Close;
        SQL.Clear;
        SQL.Add(' Select b.EmployeNo,b.EmployeName,b.department,');
        SQL.Add('        a.BookingDate,a.InsertDateTime,a.Dining');
        SQL.Add(' From Booking a Left outer join ygjbzl b On a.EmployeNo=b.EmployeNo');
        SQL.Add(' Where a.BookingDate='''+NextDate+'''');
        SQL.Add(' Order by a.InsertDateTime');
        Open;
      end;
      strFile :=ExeFileDir+'\订餐员工记录统计\订餐员工记录'+curDate+'.txt';
      try
        AssignFile(F, strFile);
        Rewrite(F);
        Append(F);
        Writeln(F, curDate+'('+sWeek+')订餐员工明细记录如下:');
        Writeln(F, '员工编号    员工姓名    部门         订餐日      刷卡时间              餐别');
        Writeln(F, '========    ========    ========     ========    ================      ======');
        with AQuery do
        begin
          First;
          While Not Eof do
          begin
            Writeln(F, Format('%-12s',[Trim(FieldByName('EmployeNo').AsString)])+
                       Format('%-12s',[Trim(FieldByName('EmployeName').AsString)])+
                       Format('%-13s',[Trim(FieldByName('department').AsString)])+
                       Format('%-12s',[Trim(FieldByName('BookingDate').AsString)])+
                       Format('%-22s',[Trim(FieldByName('InsertDateTime').AsString)])+
                       Format('%-8s',[Trim(ConvertToValue(FieldByName('Dining').AsInteger))]));
            Inc(ArrCount[FieldByName('Dining').AsInteger]);
            Next;
          end;
        end;
        Writeln(F, '-----------------------------------------------------------------------------');
          if ArrCount[1]<>0 then
            Writeln(F, '特别早餐共:'+IntToStr(ArrCount[1])+'人');
          if ArrCount[2]<>0 then
            Write(F, '早餐共:'+IntToStr(ArrCount[2])+'人    ');
          if ArrCount[3]<>0 then
            Write(F, '中餐共:'+IntToStr(ArrCount[3])+'人    ');
          if ArrCount[4]<>0 then
            Write(F, '晚餐共:'+IntToStr(ArrCount[4])+'人');
        Flush(F);
        CloseFile(F);
      except
        ShowMessage(Exception(ExceptObject).Message);
      end;
    end;
    上面是写入记事本的例子
      

  2.   

    Writeln只是写到缓存要让缓存写到磁盘可以调用
    procedure Flush ( var FileHandle : TextFile ) ;
    当然调用CloseFile也会将缓存内容写入磁盘。
    参考http://www.delphibasics.co.uk/RTL.asp?Name=Flush