首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi writeln 写下记事表出现漏写

2013-10-15 
delphi writeln 写入记事表出现漏写delphi writeln 写入记事表出现漏写,老是最后一行,有一段会少掉,位数还

delphi writeln 写入记事表出现漏写
delphi writeln 写入记事表出现漏写,老是最后一行,有一段会少掉,位数还不一样。
[解决办法]
用线程来写入
[解决办法]


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;

上面是写入记事本的例子
[解决办法]
Writeln只是写到缓存要让缓存写到磁盘可以调用
procedure Flush ( var FileHandle : TextFile ) ;

当然调用CloseFile也会将缓存内容写入磁盘。
参考http://www.delphibasics.co.uk/RTL.asp?Name=Flush

热点排行