delphi writeln 写入记事表出现漏写

xikboy 2013-10-10 12:20:28
delphi writeln 写入记事表出现漏写,老是最后一行,有一段会少掉,位数还不一样。
...全文
138 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathletboy 2013-10-10
  • 打赏
  • 举报
回复
Writeln只是写到缓存要让缓存写到磁盘可以调用
procedure Flush ( var FileHandle : TextFile ) ;
当然调用CloseFile也会将缓存内容写入磁盘。 参考http://www.delphibasics.co.uk/RTL.asp?Name=Flush
鐵蛋 2013-10-10
  • 打赏
  • 举报
回复

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;
上面是写入记事本的例子
award 2013-10-10
  • 打赏
  • 举报
回复
用线程来写入

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧