1、假设数据库表有32条记录;
2、用连续纸打印,每页打印30条记录;
3、每页都需要打印标题“-----客户清单-----”和“打印时间:”
我跟踪下面程序,发现数据库表32条记录都循环完毕,可是打印出来得结果不正常,错误的结果是:
第一页:打印的记录号的顺序是30、31、32、32、5、6、......30
不会打印第二页
第1至5条记录不会打印出来为什么会从第30条记录开始打印?为什么1至5条记录不会打印?为什么不会换页打印?请帮助我看看,哪里需要修改,谢谢!
procedure TFrmMain.Button10Click(Sender: TObject);
var
  s : string;
  x,y,i : integer;
begin
  screen.Cursor:=crSQLWait;
  ADOConnection1.Connected := False;  if printer.Printers.Count = 0 then
  begin
    showmessage('----未安装打印机,无法打印----');
    screen.Cursor:=crarrow;
    abort;
  end;  try
    CONN_STRING;    //设置连接字符串
    ADOConnection1.Connected := true;
    OPEN_ADOQUERY1; //打开qf_printer表
    try
      Printer.BeginDoc();
      ADOQuery1.First;
      while not ADOQuery1.Eof do
      begin
      x := 10;
      y := 10;
      Printer.Canvas.Font.Size := 18;
      Printer.Canvas.Font.Name := '黑体';
      Printer.Canvas.TextOut(x+480,y,' -----客户清单----- ');
      Printer.Canvas.Font.Size := 10;
      Printer.Canvas.Font.Name := '宋体';
      x := 100;
      y := y+80;
      printer.Canvas.TextOut(x+28,y,'打印时间:'+FormatDateTime('YYYY-MM-DD HH:MM:SS', now));
      y := y+26;
      Printer.Canvas.TextOut(x,y,'┏━━━┳━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━┓');
      y := y+26;
      Printer.Canvas.TextOut(x,y,'┃ 字段1 ');
      Printer.Canvas.TextOut(x+100,y,'┃     字段2     ');
      Printer.Canvas.TextOut(x+350,y,'┃  字段3  ');
      Printer.Canvas.TextOut(x+525,y,'┃        字段4      ');
      Printer.Canvas.TextOut(x+1325,y,'┃');
      y := y+26;
      Printer.Canvas.TextOut(x,y,'┣━━━╋━━━━━━━━━╋━━━━━━━━╋━━━━━━━━━━┫');
      i := 0;
      while i <= 30 do
        begin
          i := i+1;
          y := y+26;
          Printer.Canvas.TextOut(x,y,'┃  '+ADOQuery1.FieldByName('字段1').AsString);
          Printer.Canvas.TextOut(x+100,y,'┃'+ADOQuery1.FieldByName('字段2').AsString);
          Printer.Canvas.TextOut(x+350,y,'┃'+ADOQuery1.FieldByName('字段3').AsString);
          Printer.Canvas.TextOut(x+525,y,'┃'+ADOQuery1.FieldByName('字段4').AsString);
          Printer.Canvas.TextOut(x+1325,y,'┃');
          if(ADOQuery1.Eof) or (i = 30) then
            begin
            y := y+26;
            Printer.Canvas.TextOut(x,y,'┗━━━┻━━━━━━━━━┻━━━━━━━┻━━━━━━━━━┛');
            break;
            end
            else
            begin
            y := y+26;
            Printer.Canvas.TextOut(x,y,'┣━━━╋━━━━━━━━━╋━━━━━━╋━━━━━━━━━━┫');
            if (i<=30) then
              begin
                ADOQuery1.Next();
              end;
            end;
        end;
      end;
      Printer.EndDoc();
      ShowMessage('打印完毕!');     
    except
       showmessage('----可能打印机未准备好,无法打印!----');
    end;
  except
    showmessage('----无法连接到数据库----');
  end;
  screen.Cursor:=crarrow;
end;