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;
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;
超过30条记录时,打印就不正常了
第1页:打印的记录号的顺序是30、31、32、32、5、6、......30
不会打印第2页、第3页.....要修改我上面代码的哪个位置?