Relatório de impressão não chama se tiver no - Available forms

27/06/2020

4

Boa noite pessoal.

Tenho um botão de imprimir com as linhas de código abaixo. Se eu deixar o formulário no auto-create forms ele chama o formulário direitinho, mais quando
eu coloco o formulário no Available forms da a seguinte mensagem de erro:
"Access violation at adreess 008facbd in module 'Projeto.exe'. Read of adreess 000003D0."



procedure TfrmPedidos.btnImprimir0Click(Sender: TObject);
begin
    if dmRel.ibQryRelPedidos.Active = False then
    begin
      dmRel.ibQryRelPedidos.Active := True;
    end;

      if (editImpressao.Text <> '') then //se for diferente de vazio imprime a busca
        begin
          with dmRel.ibQryRelPedidos do
            begin
              if RadioButton1.Checked = True then

                begin
                Close;
                SQL.Clear;
                SQL.Add('select A.id_pedidos,    B.id_artigos,     B.art_descricao, E.cor_descricao,    ');
                SQL.Add('       A.ped_total,     A.ped_valor,      G.med_sigla,     F.forn_descricao,   ');
                SQL.Add('       H.pro_descricao, A.ped_referencia, C.col_descricao, D.comp_descricao,   ');
                SQL.Add('       A.ped_obs,       A.ped_gramatura,  A.ped_largura                        ');
                SQL.Add('from pedidos              AS A                                                 ');
                SQL.Add('inner join artigos        AS B   on A.idartigos      = B.id_artigos            ');
                SQL.Add('inner join colecoes       AS C   on A.idcolecoes     = C.id_colecoes           ');
                SQL.Add('inner join composicao     AS D   on A.idcomposicao   = D.id_composicao         ');
                SQL.Add('inner join cores          AS E   on A.idcores        = E.id_cores              ');
                SQL.Add('inner join fornecedores   AS F   on A.idfornecedores = F.id_fornecedores       ');
                SQL.Add('inner join medidas        AS G   on A.idmedidas      = G.id_medidas            ');
                SQL.Add('inner join producao       AS H   on A.idproducao     = H.id_producao           ');
                SQL.Add('where a.ID_PEDIDOS =:pPedidos ');
                ParamByName('pPedidos').Value := StrToInt(editImpressao.Text);
                Open;

				//chama o relatorio de impressão
                frmRelPedido.frxReportAviamentos.PrepareReport();
                frmRelPedido.frxReportAviamentos.ShowReport;
                editImpressao.Text      :='';
                LabelImpressao.Caption  :='';
                RadioButton1.Checked    := False;
                end;
            end;
        end;
end;	


Esse é apenas um dos relatórios que esta no auto-create, (total de 28 ate o momento) preciso deixar eles no Available forms.
Então onde esta o erro na chamada do relatório. Me ajudem.
Responder

Posts

27/06/2020

Rubens Pena

Boa noite pessoal.

Tenho um botão de imprimir com as linhas de código abaixo. Se eu deixar o formulário no auto-create forms ele chama o formulário direitinho, mais quando
eu coloco o formulário no Available forms da a seguinte mensagem de erro:
"Access violation at adreess 008facbd in module 'Projeto.exe'. Read of adreess 000003D0."



procedure TfrmPedidos.btnImprimir0Click(Sender: TObject);
begin
    if dmRel.ibQryRelPedidos.Active = False then
    begin
      dmRel.ibQryRelPedidos.Active := True;
    end;

      if (editImpressao.Text <> '') then //se for diferente de vazio imprime a busca
        begin
          with dmRel.ibQryRelPedidos do
            begin
              if RadioButton1.Checked = True then

                begin
                Close;
                SQL.Clear;
                SQL.Add('select A.id_pedidos,    B.id_artigos,     B.art_descricao, E.cor_descricao,    ');
                SQL.Add('       A.ped_total,     A.ped_valor,      G.med_sigla,     F.forn_descricao,   ');
                SQL.Add('       H.pro_descricao, A.ped_referencia, C.col_descricao, D.comp_descricao,   ');
                SQL.Add('       A.ped_obs,       A.ped_gramatura,  A.ped_largura                        ');
                SQL.Add('from pedidos              AS A                                                 ');
                SQL.Add('inner join artigos        AS B   on A.idartigos      = B.id_artigos            ');
                SQL.Add('inner join colecoes       AS C   on A.idcolecoes     = C.id_colecoes           ');
                SQL.Add('inner join composicao     AS D   on A.idcomposicao   = D.id_composicao         ');
                SQL.Add('inner join cores          AS E   on A.idcores        = E.id_cores              ');
                SQL.Add('inner join fornecedores   AS F   on A.idfornecedores = F.id_fornecedores       ');
                SQL.Add('inner join medidas        AS G   on A.idmedidas      = G.id_medidas            ');
                SQL.Add('inner join producao       AS H   on A.idproducao     = H.id_producao           ');
                SQL.Add('where a.ID_PEDIDOS =:pPedidos ');
                ParamByName('pPedidos').Value := StrToInt(editImpressao.Text);
                Open;

				//chama o relatorio de impressão
                frmRelPedido.frxReportAviamentos.PrepareReport();
                frmRelPedido.frxReportAviamentos.ShowReport;
                editImpressao.Text      :='';
                LabelImpressao.Caption  :='';
                RadioButton1.Checked    := False;
                end;
            end;
        end;
end;	


Esse é apenas um dos relatórios que esta no auto-create, (total de 28 ate o momento) preciso deixar eles no Available forms.
Então onde esta o erro na chamada do relatório. Me ajudem.


Pessoal consegui resolver. estava esquecendo de chamar o formulário

o código agora ficou assim:

procedure TfrmPedidos.btnImprimir0Click(Sender: TObject);
begin
    if dmRel.ibQryRelPedidos.Active = False then
    begin
      dmRel.ibQryRelPedidos.Active := True;
    end;

      if (editImpressao.Text <> '') then //se for diferente de vazio imprime a busca
        begin
          with dmRel.ibQryRelPedidos do
            begin
              if RadioButton1.Checked = True then

                begin
                Close;
                SQL.Clear;
                SQL.Add('select A.id_pedidos,    B.id_artigos,     B.art_descricao, E.cor_descricao,    ');
                SQL.Add('       A.ped_total,     A.ped_valor,      G.med_sigla,     F.forn_descricao,   ');
                SQL.Add('       H.pro_descricao, A.ped_referencia, C.col_descricao, D.comp_descricao,   ');
                SQL.Add('       A.ped_obs,       A.ped_gramatura,  A.ped_largura                        ');
                SQL.Add('from pedidos              AS A                                                 ');
                SQL.Add('inner join artigos        AS B   on A.idartigos      = B.id_artigos            ');
                SQL.Add('inner join colecoes       AS C   on A.idcolecoes     = C.id_colecoes           ');
                SQL.Add('inner join composicao     AS D   on A.idcomposicao   = D.id_composicao         ');
                SQL.Add('inner join cores          AS E   on A.idcores        = E.id_cores              ');
                SQL.Add('inner join fornecedores   AS F   on A.idfornecedores = F.id_fornecedores       ');
                SQL.Add('inner join medidas        AS G   on A.idmedidas      = G.id_medidas            ');
                SQL.Add('inner join producao       AS H   on A.idproducao     = H.id_producao           ');
                SQL.Add('where a.ID_PEDIDOS =:pPedidos ');
                ParamByName('pPedidos').Value := StrToInt(editImpressao.Text);
                Open;

				//chama o relatorio de impressão
                frmRelPedido := TfrmRelPedido.Create(self);
                frmRelPedido.frxReportAviamentos.PrepareReport();
                frmRelPedido.frxReportAviamentos.ShowReport;
                editImpressao.Text      :='';
                LabelImpressao.Caption  :='';
                RadioButton1.Checked    := False;
                FreeAndNil(frmRelPedido);
                end;
            end;
        end;
end;	


Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar