Erro no QuickRep1.preview

Delphi

25/12/2007

Galera tô com esse código para fazer impressão
procedure TF_RELATORIO_LANCAMENTO_FORM.imprimirClick(Sender: TObject);
begin

   dm.sdsLancamento.Close;
   dm.sdsLancamento.CommandText:=´select lancamento_projeto.*, material.descricao, material.un, ´ +
                                 ´projeto.nome_projeto ´ +
                                 ´from lancamento_projeto, projeto ´ +
                                 ´inner join material on  ´ +
                                 ´lancamento_projeto.cod_ordenado_m = material.cod_ordenado ´ +
                                 ´where cod_projeto_lancamento=:cod_projeto_lancamento´;
   dm.sdsLancamento.ParamByName(´cod_projeto_lancamento´).AsString:=projeto.Text;
   dm.sdsLancamento.Open;

   dm.cdsLancamento.Close;
   dm.cdsLancamento.Open;
   dm.cdsLancamento.Refresh;

   R_LANCAMENTO.QuickRep1.Preview;

end;


Ta dando erro na linha
R_LANCAMENTO.QuickRep1.Preview

Erro:
---------------------------
Debugger Exception Notification
---------------------------
Project MATERIAIS.exe raised exception class EAccessViolation with message ´Access violation at address 0062CD2F in module ´MATERIAIS.exe´. Read of address 000002F8´. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------

O que pode ser?


Jpauloss

Jpauloss

Curtidas 0

Respostas

Rpatricia

Rpatricia

25/12/2007

Olá jpauloss

Primeiro verifica se você deu um CreateForm no seu form onde você tem seu quickreport, pois você tá tentando acessar um objeto que ainda não foi criado na memória

e antes do seu

 R_LANCAMENTO.QuickRep1.Preview; 


também tente usar assim
 R_LANCAMENTO.QuickRep1.Prepare; 



Espero que ajude! :wink:

abs
Patrícia


GOSTEI 0
Jpauloss

Jpauloss

25/12/2007

Olá jpauloss Primeiro verifica se você deu um CreateForm no seu form onde você tem seu quickreport, pois você tá tentando acessar um objeto que ainda não foi criado na memória e antes do seu
 R_LANCAMENTO.QuickRep1.Preview; 
também tente usar assim
 R_LANCAMENTO.QuickRep1.Prepare; 
Espero que ajude! :wink: abs Patrícia

O problema é que estou usando em MDI.
Coloquei assim
 R_LANCAMENTO.QuickRep1.Preview; 
R_LANCAMENTO:=TR_LANCAMENTO.CREATE(SELF);



GOSTEI 0
Jpauloss

Jpauloss

25/12/2007

Ao contrário.

R_LANCAMENTO:=TR_LANCAMENTO.CREATE(SELF);
R_LANCAMENTO.QuickRep1.Preview;



GOSTEI 0
Jpauloss

Jpauloss

25/12/2007

Coloquei o formstyle=fsNormal e meu código ta assim
procedure TF_RELATORIO_LANCAMENTO_FORM.btnSemValorClick(Sender: TObject);
begin
  if (projeto.Text=´´) then begin
   ShowMessage(´Selecione projeto!´);
   exit
   end
   else
   R_LANCAMENTO_SEM_VALORES2.sdsRelLancamentoProjeto.Close;
   R_LANCAMENTO_SEM_VALORES2.sdsRelLancamentoProjeto.CommandText:=´select lancamento_projeto.*, ´ +
                                 ´cast(total as float) as total_flt, ´ +
                                 ´grupo.descricao_grupo, grupo.cod_grupo, ´ +
                                 ´material.descricao, ´ +
                                 ´material.un, material.preco_unitario, ´ +
                                 ´projeto.nome_projeto ´ +
                                 ´from lancamento_projeto, projeto, grupo ´ +
                                 ´inner join material on  ´ +
                                 ´lancamento_projeto.cod_ordenado_m = material.cod_ordenado ´ +
                                 ´and grupo.id_grupo = lancamento_projeto.cod_grupo_fk ´ +
                                 ´where cod_projeto_lancamento=:cod_projeto_lancamento´;
   R_LANCAMENTO_SEM_VALORES2.sdsRelLancamentoProjeto.ParamByName(´cod_projeto_lancamento´).AsString:=projeto.Text;
   R_LANCAMENTO_SEM_VALORES2.sdsRelLancamentoProjeto.Open;

   R_LANCAMENTO_SEM_VALORES2.cdsRelLancamentoProjeto.Close;
   R_LANCAMENTO_SEM_VALORES2.cdsRelLancamentoProjeto.Open;
   R_LANCAMENTO_SEM_VALORES2.cdsRelLancamentoProjeto.Refresh;

   R_LANCAMENTO_SEM_VALORES2.ShowModal;
   R_LANCAMENTO_SEM_VALORES2.QuickRep1.PreviewModal; 

E o erro é o mesmo
---------------------------
Debugger Exception Notification
---------------------------
Project MATERIAIS.exe raised exception class EAccessViolation with message ´Access violation at address 00631517 in module ´MATERIAIS.exe´. Read of address 0000035C´. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
--------------------------- 

Que faço?


GOSTEI 0
Jpauloss

Jpauloss

25/12/2007

up


GOSTEI 0
Djjunior

Djjunior

25/12/2007

que me lembre voce não dá um showmodal no form que o quick está seria somente um create e um preview.

vc detectou em que [u:56ee62402b]linha[/u:56ee62402b] está o erro ?

se você deu um close/OPen na query não vejo sentido em dar um refresh logo em seguinda.


GOSTEI 0
Jpauloss

Jpauloss

25/12/2007

que me lembre voce não dá um showmodal no form que o quick está seria somente um create e um preview. vc detectou em que [u:108ca7955c]linha[/u:108ca7955c] está o erro ? se você deu um close/OPen na query não vejo sentido em dar um refresh logo em seguinda.

O erro esta dando na linha
 R_LANCAMENTO_SEM_VALORES2.sdsRelLancamentoProjeto.CommandText:=´select 

Que faço?


GOSTEI 0
Djjunior

Djjunior

25/12/2007

Tipo kde o Create do R_LANCAMENTO_SEM_VALORES2 ?

Pelo que pude ver no seu código ele não está criado ainda por isso o erro. tente quando parar neste item dar um ctrl+f7 para ver o conteúdo dele ... deve estar null dê o create antes de começar a mexer nele


GOSTEI 0
Jpauloss

Jpauloss

25/12/2007

Tipo kde o Create do R_LANCAMENTO_SEM_VALORES2 ? Pelo que pude ver no seu código ele não está criado ainda por isso o erro. tente quando parar neste item dar um ctrl+f7 para ver o conteúdo dele ... deve estar null dê o create antes de começar a mexer nele

Que código coloco?


GOSTEI 0
Djjunior

Djjunior

25/12/2007

Na sua linha:
R_LANCAMENTO:=TR_LANCAMENTO.CREATE(SELF);

tem um erro grave... o self, o formulário não pode ser ´pai´ dele mesmo, use o Application em vez de self.

e essa linha que vir antes de qualquer referencia que vc for fazer do R_LANCAMENTO e no fim não se esqueça de dar um free nele faça algo do tipo

R_LANCAMENTO:=TR_LANCAMENTO.CREATE(SELF);
try
  ... seus códigos
  R_LANCAMENTO.QuickRep1.Preview;
finally
  R_LANCAMENTO.FREE;
end;



GOSTEI 0
Jpauloss

Jpauloss

25/12/2007

Na sua linha: R_LANCAMENTO:=TR_LANCAMENTO.CREATE(SELF); tem um erro grave... o self, o formulário não pode ser ´pai´ dele mesmo, use o Application em vez de self. e essa linha que vir antes de qualquer referencia que vc for fazer do R_LANCAMENTO e no fim não se esqueça de dar um free nele faça algo do tipo
R_LANCAMENTO:=TR_LANCAMENTO.CREATE(SELF);
try
  ... seus códigos
  R_LANCAMENTO.QuickRep1.Preview;
finally
  R_LANCAMENTO.FREE;
end;

Valeu! funcinou.


GOSTEI 0
Wanderok

Wanderok

25/12/2007

:D:D:D


GOSTEI 0
POSTAR