Erro Quick Report Windows XP (Access Violation)
Olá amigos, estou com um problema e tanto aqui e peço a ajuda de vocês.
É o seguinte eu tenho uma aplicação em [b:eb1eb8f410]Delphi 5 x BDE x Paradox[/b:eb1eb8f410] rodando em Windows XP. Quando eu dou um preview no QuickReport ele ocasionalmente dá erro de Access Violation quando eu dou um [b:eb1eb8f410]Free[/b:eb1eb8f410] no Form(TQuickRep) e se eu tentar dar Preview em outro ele mosta a mensagem:
[color=blue:eb1eb8f410][b:eb1eb8f410] A component named ´QRStandardPreview´ alread exist´[/b:eb1eb8f410][/color:eb1eb8f410]
Estou precisando resolver isso com urgencia!
Aqui vai o código completo do Form:
Desde já agradeço-os pela atenção[/b]
É o seguinte eu tenho uma aplicação em [b:eb1eb8f410]Delphi 5 x BDE x Paradox[/b:eb1eb8f410] rodando em Windows XP. Quando eu dou um preview no QuickReport ele ocasionalmente dá erro de Access Violation quando eu dou um [b:eb1eb8f410]Free[/b:eb1eb8f410] no Form(TQuickRep) e se eu tentar dar Preview em outro ele mosta a mensagem:
[color=blue:eb1eb8f410][b:eb1eb8f410] A component named ´QRStandardPreview´ alread exist´[/b:eb1eb8f410][/color:eb1eb8f410]
Estou precisando resolver isso com urgencia!
Aqui vai o código completo do Form:
unit RelOSI2;
interface
uses Windows, SysUtils, Messages, Classes, Graphics, Controls,
StdCtrls, ExtCtrls, Forms, Quickrpt, QRCtrls, Db, DBTables, ImgList;
type
TQROsi2 = class(TQuickRep)
qrReport: TQuery;
qrTintas: TQuery;
qrVariacoes: TQuery;
PageHeaderBand1: TQRBand;
lblOSI: TQRLabel;
DetailBand1: TQRBand;
QRShape1: TQRShape;
QRLabel3: TQRLabel;
QRLabel4: TQRLabel;
QRLabel5: TQRLabel;
QRLabel6: TQRLabel;
QRLabel7: TQRLabel;
QRLabel8: TQRLabel;
QRLabel9: TQRLabel;
lbUrgente: TQRLabel;
QRLabel11: TQRLabel;
QRLabel12: TQRLabel;
QRLabel13: TQRLabel;
QRLabel14: TQRLabel;
QRLabel15: TQRLabel;
QRLabel16: TQRLabel;
QRLabel17: TQRLabel;
QRLabel18: TQRLabel;
QRLabel19: TQRLabel;
QRLabel20: TQRLabel;
QRLabel21: TQRLabel;
QRLabel22: TQRLabel;
QRLabel25: TQRLabel;
QRLabel26: TQRLabel;
QRLabel27: TQRLabel;
QRLabel28: TQRLabel;
QRLabel29: TQRLabel;
QRLabel30: TQRLabel;
QRLabel31: TQRLabel;
QRLabel32: TQRLabel;
QRLabel33: TQRLabel;
QRLabel34: TQRLabel;
QRLabel35: TQRLabel;
QRLabel36: TQRLabel;
QRLabel37: TQRLabel;
QRLabel38: TQRLabel;
QRLabel39: TQRLabel;
QRLabel40: TQRLabel;
QRLabel41: TQRLabel;
QRLabel42: TQRLabel;
QRLabel43: TQRLabel;
QRLabel46: TQRLabel;
QRLabel47: TQRLabel;
QRLabel48: TQRLabel;
QRLabel49: TQRLabel;
QRLabel50: TQRLabel;
QRLabel51: TQRLabel;
QRLabel52: TQRLabel;
QRLabel53: TQRLabel;
QRLabel56: TQRLabel;
QRLabel57: TQRLabel;
QRLabel58: TQRLabel;
QRLabel59: TQRLabel;
QRLabel54: TQRLabel;
QRLabel60: TQRLabel;
QRLabel61: TQRLabel;
QRLabel63: TQRLabel;
QRLabel64: TQRLabel;
QRDBText1: TQRDBText;
QRDBText2: TQRDBText;
QRDBText3: TQRDBText;
QRDBText4: TQRDBText;
QRDBText5: TQRDBText;
QRDBText6: TQRDBText;
QRDBText7: TQRDBText;
QRDBText8: TQRDBText;
QRDBText9: TQRDBText;
QRDBText10: TQRDBText;
QRDBText11: TQRDBText;
QRDBText12: TQRDBText;
QRDBText13: TQRDBText;
QRDBText14: TQRDBText;
QRDBText15: TQRDBText;
QRDBText16: TQRDBText;
QRDBText17: TQRDBText;
QRDBText18: TQRDBText;
QRDBText19: TQRDBText;
QRDBText20: TQRDBText;
QRDBText21: TQRDBText;
QRDBText22: TQRDBText;
QRDBText23: TQRDBText;
QRDBText24: TQRDBText;
QRDBText25: TQRDBText;
QRDBText26: TQRDBText;
QRDBText27: TQRDBText;
QRDBText28: TQRDBText;
QRDBText29: TQRDBText;
QRDBText30: TQRDBText;
QRDBText31: TQRDBText;
QRDBText32: TQRDBText;
QRDBText33: TQRDBText;
QRDBText34: TQRDBText;
QRDBText35: TQRDBText;
QRDBText36: TQRDBText;
QRDBText37: TQRDBText;
QRDBText38: TQRDBText;
QRDBText39: TQRDBText;
QRDBText40: TQRDBText;
QRDBText42: TQRDBText;
QRDBText43: TQRDBText;
QRDBText44: TQRDBText;
QRDBText45: TQRDBText;
QRDBText46: TQRDBText;
QRDBText47: TQRDBText;
QRLabel10: TQRLabel;
QRLabel23: TQRLabel;
QRLabel24: TQRLabel;
QRLabel44: TQRLabel;
QRLabel45: TQRLabel;
QRLabel55: TQRLabel;
lblCor: TQRLabel;
lblLocal: TQRLabel;
lblTinta: TQRLabel;
lblAcabamento: TQRLabel;
lblT: TQRLabel;
lblR: TQRLabel;
QRLabel65: TQRLabel;
QRLabel66: TQRLabel;
QRLabel67: TQRLabel;
QRDBText48: TQRDBText;
QRDBText49: TQRDBText;
QRDBText50: TQRDBText;
QRLabel68: TQRLabel;
QRLabel69: TQRLabel;
QRLabel70: TQRLabel;
QRLabel71: TQRLabel;
QRLabel72: TQRLabel;
lblAssinatura: TQRLabel;
lblQuant: TQRLabel;
lblFilme: TQRLabel;
lblPrazo: TQRLabel;
lblImpEm: TQRLabel;
QRLabel78: TQRLabel;
lblNumero: TQRLabel;
QRLabel80: TQRLabel;
QRLabel79: TQRLabel;
QRDBText51: TQRDBText;
QRDBText52: TQRDBText;
QRDBText53: TQRDBText;
QRDBText54: TQRDBText;
QRLabel81: TQRLabel;
QRLabel82: TQRLabel;
QRLabel83: TQRLabel;
QRDBText55: TQRDBText;
QRDBText56: TQRDBText;
QRDBText57: TQRDBText;
QRDBText58: TQRDBText;
QRImage1: TQRImage;
QRShape7: TQRShape;
QRShape2: TQRShape;
qrOSIAcab: TQuery;
tbCores: TTable;
QRLabel85: TQRLabel;
QRDBText59: TQRDBText;
QRDBText60: TQRDBText;
QRDBText61: TQRDBText;
QRDBText62: TQRDBText;
QRDBText63: TQRDBText;
QRLabel2: TQRLabel;
QRLabel62: TQRLabel;
ImageList1: TImageList;
QRShape3: TQRShape;
QRShape4: TQRShape;
QRShape5: TQRShape;
procedure QRDBText16Print(sender: TObject; var Value: String);
procedure QRDBText1Print(sender: TObject; var Value: String);
procedure QRDBText11Print(sender: TObject; var Value: String);
procedure QRDBText12Print(sender: TObject; var Value: String);
procedure QRDBText17Print(sender: TObject; var Value: String);
procedure QRDBText18Print(sender: TObject; var Value: String);
procedure QRDBText20Print(sender: TObject; var Value: String);
procedure DetailBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
procedure QRDBText51Print(sender: TObject; var Value: String);
procedure QRDBText58Print(sender: TObject; var Value: String);
procedure QRDBText4Print(sender: TObject; var Value: String);
procedure QRDBText36Print(sender: TObject; var Value: String);
procedure QRDBText41Print(sender: TObject; var Value: String);
procedure QRDBText40Print(sender: TObject; var Value: String);
procedure PageHeaderBand1AfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
private
procedure MontarListaCores(osi: Integer);
procedure MontarListaVariacoes(osi: Integer);
procedure MontarShapeCampos;
public
end;
var
QROsi2: TQROsi2;
procedure ImprimirDadosOSI_parte1(osi: Integer);
implementation
uses Datatb, Generico;
{$R *.DFM}
{------------------------------------------------------------------------}
procedure TQROsi2.MontarListaCores(osi: Integer);
var lCor, lLocal, lTinta, lAcab, lT, lR: TQRLabel;
desloc: Integer;
procedure PreencherLabels;
begin
with qrTintas do
begin
lCor.Caption := ´ ´ + FieldByName(´COR´).AsString;
lLocal.Caption := ´ ´ + FieldByName(´LOCAL´).AsString;
lTinta.Caption := ´ ´ + FieldByName(´TIPO´).AsString;
lAcab.Caption := ´ ´ + FieldByName(´ACAB´).AsString;
if FieldByName(´TESTE´).AsString = ´S´
then lT.Caption := ´X´
else lT.Caption := ´ ´;
if FieldByName(´RELEVO´).AsString = ´S´
then lR.Caption := ´X´
else lR.Caption := ´ ´;
end;
end;
procedure CriarLabels;
function DuplicarLabel(l_ori: TQRLabel): TQRLabel;
begin
Result := TQRLabel.Create(Self);
Result.Parent := DetailBand1; // l_ori.Parent;
Result.Font := l_ori.Font;
Result.Alignment := l_ori.Alignment;
Result.AutoSize := l_ori.AutoSize;
Result.WordWrap := l_ori.WordWrap;
Result.Left := l_ori.Left;
Result.Width := l_ori.Width;
Result.Frame.DrawLeft := l_ori.Frame.DrawLeft;
Result.Frame.DrawRight := l_ori.Frame.DrawRight;
Result.Frame.DrawTop := l_ori.Frame.DrawTop;
Result.Frame.DrawBottom := l_ori.Frame.DrawBottom;
Result.Top := l_ori.Top + l_ori.Height - 1;
Result.Tag := l_ori.Tag;
end;
begin
lCor := DuplicarLabel(lCor);
lLocal := DuplicarLabel(lLocal);
lAcab := DuplicarLabel(lAcab);
lTinta := DuplicarLabel(lTinta);
lT := DuplicarLabel(lT);
lR := DuplicarLabel(lR);
desloc := desloc + lCor.Height - 1;
end;
begin
lblCor.Caption := ´´;
lblLocal.Caption := ´´;
lblTinta.Caption := ´´;
lblAcabamento.Caption := ´´;
lblT.Caption := ´´;
lblR.Caption := ´´;
desloc := 0;
with qrTintas do
begin
Params[0].AsInteger := osi;
Open;
if RecordCount > 0 then
begin
lCor := lblCor;
lLocal := lblLocal;
lAcab := lblAcabamento;
lTinta := lblTinta;
lT := lblT;
lR := lblR;
PreencherLabels;
Next;
while not Eof do
begin
// criar novas linhas na tabela
CriarLabels;
PreencherLabels;
Next;
end;
end;
Close;
end;
if desloc > 0 then
begin
QRLabel65.Top := QRLabel65.Top + desloc;
QRLabel66.Top := QRLabel66.Top + desloc;
QRLabel67.Top := QRLabel67.Top + desloc;
QRDBText48.Top := QRDBText48.Top + desloc;
QRDBText49.Top := QRDBText49.Top + desloc;
QRDBText50.Top := QRDBText50.Top + desloc;
QRLabel81.Top := QRLabel81.Top + desloc;
QRLabel82.Top := QRLabel82.Top + desloc;
QRLabel83.Top := QRLabel83.Top + desloc;
QRDBText55.Top := QRDBText55.Top + desloc;
QRDBText56.Top := QRDBText56.Top + desloc;
QRDBText57.Top := QRDBText57.Top + desloc;
QRLabel78.Top := QRLabel78.Top + desloc;
QRLabel68.Top := QRLabel68.Top + desloc;
QRLabel69.Top := QRLabel69.Top + desloc;
QRLabel70.Top := QRLabel70.Top + desloc;
QRLabel71.Top := QRLabel71.Top + desloc;
QRLabel72.Top := QRLabel72.Top + desloc;
lblNumero.Top := lblNumero.Top + desloc;
lblAssinatura.Top := lblAssinatura.Top + desloc;
lblQuant.Top := lblQuant.Top + desloc;
lblFilme.Top := lblFilme.Top + desloc;
lblPrazo.Top := lblPrazo.Top + desloc;
lblImpEm.Top := lblImpEm.Top + desloc;
end;
end;
{------------------------------------------------------------------------}
procedure TQROsi2.MontarListaVariacoes(osi: Integer);
var lNum, lVar, lQtd, lFilme, lPrazo, lImp: TQRLabel;
flg_sum: Boolean;
banda_pai: TQRBand;
desloc, desloc_ini: Integer;
procedure PreencherLabels;
begin
with qrVariacoes do
begin
lNum.Caption := FieldByName(´IDASS´).AsString + ´ ´;
lVar.Caption := ´ ´ + FieldByName(´NOME´).AsString;
lQtd.Caption := ´ ´ + FieldByName(´QTD´).AsString;
lFilme.Caption := ´ ´ + FieldByName(´FILME´).AsString;
lPrazo.Caption := ´ ´ + FieldByName(´PRAZO´).AsString;
lImp.Caption := ´ ´;
end;
end;
procedure CriarLabels;
function DuplicarLabel(l_ori: TQRLabel): TQRLabel;
begin
Result := TQRLabel.Create(Self);
Result.Parent := banda_pai; // l_ori.Parent;
Result.Font := l_ori.Font;
Result.Alignment := l_ori.Alignment;
Result.AutoSize := l_ori.AutoSize;
Result.WordWrap := l_ori.WordWrap;
Result.Left := l_ori.Left;
Result.Width := l_ori.Width;
Result.Frame.DrawLeft := l_ori.Frame.DrawLeft;
Result.Frame.DrawRight := l_ori.Frame.DrawRight;
Result.Frame.DrawTop := l_ori.Frame.DrawTop;
Result.Frame.DrawBottom := l_ori.Frame.DrawBottom;
Result.Top := l_ori.Top + l_ori.Height - 1;
Result.Tag := l_ori.Tag;
end;
begin
lNum := DuplicarLabel(lNum);
lVar := DuplicarLabel(lVar);
lQtd := DuplicarLabel(lQtd);
lFilme := DuplicarLabel(lFilme);
lPrazo := DuplicarLabel(lPrazo);
lImp := DuplicarLabel(lImp);
desloc := desloc + lVar.Height - 1;
end;
begin
DetailBand1.Height := 685;
banda_pai := DetailBand1;
lblNumero.Caption := ´´;
lblAssinatura.Caption := ´´;
lblQuant.Caption := ´´;
lblFilme.Caption := ´´;
lblPrazo.Caption := ´´;
lblImpEm.Caption := ´´;
// sumário
// lblAssinatura2.Caption := ´´;
flg_sum := False;
desloc := lblAssinatura.Top;
with qrVariacoes do
begin
Params[0].AsInteger := osi;
Open;
if RecordCount > 0 then
begin
lNum := lblNumero;
lVar := lblAssinatura;
lQtd := lblQuant;
lFilme := lblFilme;
lPrazo := lblPrazo;
lImp := lblImpEm;
PreencherLabels;
Next;
while not Eof do
begin
if lVar.Top > QRLabel58.Top then
begin
if flg_sum then Break;
flg_sum := True;
end
else
begin
// criar novas linhas na tabela
CriarLabels;
end;
PreencherLabels;
Next;
end;
end;
Close;
end;
Bands.HasSummary := flg_sum;
end;
{------------------------------------------------------------------------}
procedure TQROsi2.PageHeaderBand1AfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
begin
// lblOSI.Left := PageHeaderBand1.Width - lblOSI.Width;
end;
{------------------------------------------------------------------------}
procedure TQROsi2.DetailBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
// edObsAcab.Lines.Text := qrReport.FieldByName(´OBS_ACAB´).AsString;
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText1Print(sender: TObject; var Value: String);
begin
// número da osi
Value := ´ ´ + IntToStr(qrReport.FieldByName(´IDOSI´).AsInteger mod CONST_OSI);
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText16Print(sender: TObject; var Value: String);
begin
// campo orçamento / item ,
Value := Format(´ .¬4.4d | ¬d´, [qrReport.FieldByName(´IDORCAMENTO´).AsInteger,
qrReport.FieldByName(´ITEM´).AsInteger]);
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText58Print(sender: TObject; var Value: String);
var dst: TDataSet;
campo: string;
begin
// campos de data
dst := (sender as TQRDBText).DataSet;
campo := (sender as TQRDBText).DataField;
if not dst.FieldByName(campo).IsNull then
Value := FormatDateTime(´ dd/mm/yyyy´, dst.FieldByName(campo).AsDateTime);
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText4Print(sender: TObject; var Value: String);
begin
Value := Value + ´ ´;
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText51Print(sender: TObject; var Value: String);
var campo: string;
begin
// campo de material fornecido
campo := SoNumericos((sender as TQRDBText).DataField);
Value := ´´;
if qrReport.FieldByName(´MATERIAL´ + campo).AsString <> ´´ then
if Value = ´S´ then
Value := ´F´
else
Value := ´NF´;
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText11Print(sender: TObject; var Value: String);
begin
// formato aberto
Value := Format(´ ¬.2f x ¬.2f´, [qrReport.FieldByName(´LARG_ABERTO´).AsFloat,
qrReport.FieldByName(´ALT_ABERTO´).AsFloat]);
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText12Print(sender: TObject; var Value: String);
begin
// formato fechado
Value := ´´;
if not qrReport.FieldByName(´LARG_FECHADO´).IsNull or
not qrReport.FieldByName(´ALT_FECHADO´).IsNull or
not qrReport.FieldByName(´COMP_FECHADO´).IsNull then
Value := Format(´ ¬.2f x ¬.2f x ¬.2f´,
[qrReport.FieldByName(´LARG_FECHADO´).AsFloat,
qrReport.FieldByName(´ALT_FECHADO´).AsFloat,
qrReport.FieldByName(´COMP_FECHADO´).AsFloat]);
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText17Print(sender: TObject; var Value: String);
begin
// corte inicial
Value := Format(´ ¬.2f x ¬.2f´, [qrReport.FieldByName(´LARG_CORTE_INI´).AsFloat,
qrReport.FieldByName(´ALT_CORTE_INI´).AsFloat]);
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText18Print(sender: TObject; var Value: String);
begin
// sobras
Value := ´ ´ + IntToStr(qrReport.FieldByName(´SOBRAS´).AsInteger);
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText20Print(sender: TObject; var Value: String);
begin
// "checks"
if Value = ´S´ then Value := ´X´
else Value := ´ ´;
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText36Print(sender: TObject; var Value: String);
begin
if Value <> ´´ then
if tbCores.FindKey([StrToInt(Value)]) then
Value := ´ ´ + tbCores.FieldByName(´NOME´).AsString;
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText41Print(sender: TObject; var Value: String);
begin
try if StrToInt(Value) > 0 then Value := ´X´
else Value := ´´;
except Value := ´´; end;
end;
{------------------------------------------------------------------------}
procedure TQROsi2.QRDBText40Print(sender: TObject; var Value: String);
begin
Value := Value + ´ ´;
end;
{------------------------------------------------------------------------}
procedure TQROsi2.MontarShapeCampos;
var i: Integer;
sh: TQRShape;
begin
for i := 0 to ComponentCount -1 do
if Components[i].Tag In [1, 2] then
begin
sh := TQRShape.Create(Self);
sh.Brush.Style := bsClear;
sh.Pen.Width := Components[i].Tag;
sh.Left := (Components[i] as TQRCustomLabel).Left -1;
sh.Top := (Components[i] as TQRCustomLabel).Top -1;
sh.Height := (Components[i] as TQRCustomLabel).Height {+ 1};
if Components[i].Tag = 2 then sh.Height := sh.Height - 1;
sh.Width := (Components[i] as TQRCustomLabel).Width + 1;
if Components[i].Tag = 2 then sh.Width := sh.Width - 1;
// sh.Size := (Components[i] as TQRDBText).Size;
sh.Parent := (Components[i] as TQRCustomLabel).Parent;
end;
end;
{------------------------------------------------------------------------}
procedure ImprimirDadosOSI_parte1(osi: Integer);
var r: TQROsi2;
begin
Application.CreateForm(TQROsi2, r);
with r do
begin
MontarListaCores(osi);
MontarListaVariacoes(osi);
MontarShapeCampos;
qrReport.Close;
qrReport.Params[0].AsInteger := osi;
qrReport.Open;
qrOSIAcab.Close;
qrOSIAcab.Params[0].AsInteger := osi;
qrOSIAcab.Open;
tbCores.Open;
lbUrgente.Enabled := qrReport.FieldByName(´URGENTE´).AsString = ´S´;
try
Preview;
except
QRPrinter.Free;
end;
qrReport.Close;
tbCores.Close;
qrVariacoes.Close;
qrTintas.Close;
qrOSIAcab.Close;
Free;
end;
end;
end.Desde já agradeço-os pela atenção[/b]
Rogick
Curtidas 0
Respostas
Rogick
22/09/2006
Ah, eu já pesquisei na internet e não conseguir achar algo que solucionasse o meu problema
GOSTEI 0
Joaoshi
22/09/2006
Colega,
Crie a procedure abaixo e execute antes de chamar o preview do QR.
Procedure DestroiPreview;
var nIdx:Integer;
begin
for nIdx := (Screen.FormCount - 1) downto 0 do
With Screen.Forms[nIdx] do
if ClassName = ´TQRStandardPreview´ then
Destroy;
end;
Espero ter ajudado.
Crie a procedure abaixo e execute antes de chamar o preview do QR.
Procedure DestroiPreview;
var nIdx:Integer;
begin
for nIdx := (Screen.FormCount - 1) downto 0 do
With Screen.Forms[nIdx] do
if ClassName = ´TQRStandardPreview´ then
Destroy;
end;
Espero ter ajudado.
GOSTEI 0
Micheus
22/09/2006
[b:d4eaf952c2]Rogick[/b:d4eaf952c2], verifique se vc não deixou o form QROsi2 no auto-create do projeto.
Estou achando um pouco estranho vc chamar [i:d4eaf952c2]QRPrinter.Free[/i:d4eaf952c2] na finalização do preview - não é comum.
Faça um teste, no procedimento abaixo modifiquei a forma como o form é criado, removí o QRPrinter.Free (já que o próprio qreport deve fazer isto) e ajustei a forma de liberação do formulário através do finally, pois ´tudo que foi feito´ antes do try, deve ser desfeito independente de ocorrer erro na visualização.
Estou achando um pouco estranho vc chamar [i:d4eaf952c2]QRPrinter.Free[/i:d4eaf952c2] na finalização do preview - não é comum.
Faça um teste, no procedimento abaixo modifiquei a forma como o form é criado, removí o QRPrinter.Free (já que o próprio qreport deve fazer isto) e ajustei a forma de liberação do formulário através do finally, pois ´tudo que foi feito´ antes do try, deve ser desfeito independente de ocorrer erro na visualização.
procedure ImprimirDadosOSI_parte1(osi: Integer); var r: TQROsi2; begin r := TQROsi2.Create(Application); // *** with r do begin MontarListaCores(osi); MontarListaVariacoes(osi); MontarShapeCampos; qrReport.Close; qrReport.Params[0].AsInteger := osi; qrReport.Open; qrOSIAcab.Close; qrOSIAcab.Params[0].AsInteger := osi; qrOSIAcab.Open; tbCores.Open; lbUrgente.Enabled := qrReport.FieldByName(´URGENTE´).AsString = ´S´; try Preview; finally // *** qrReport.Close; tbCores.Close; qrVariacoes.Close; qrTintas.Close; qrOSIAcab.Close; Free; end; end; end;
GOSTEI 0
Leufmt
22/09/2006
Tu tem duas opções:
Acessar o site o fabricante do QuickReport e baixar a atualização do QuickReport para o Delphi 5 (o qual tu utiliza): http://www.qusoft.com/
Ou Começar a trabalhar com o Delphi 7, que é o que eu fiz e resolveu definitivamente o problema, pois o QuickReport no Delphi 7 não tem este problema.
Espero que eu possa ter lhe ajudado
Acessar o site o fabricante do QuickReport e baixar a atualização do QuickReport para o Delphi 5 (o qual tu utiliza): http://www.qusoft.com/
Ou Começar a trabalhar com o Delphi 7, que é o que eu fiz e resolveu definitivamente o problema, pois o QuickReport no Delphi 7 não tem este problema.
Espero que eu possa ter lhe ajudado
GOSTEI 0
Rogick
22/09/2006
Consegui resolver! Era só atualizar o QuickReport da versão 3.0.5 para 3.5.1. :D
Vlw [b:d277becf8e]leufmt[/b:d277becf8e]! ;)
Vlw [b:d277becf8e]leufmt[/b:d277becf8e]! ;)
GOSTEI 0