Debug Xe6

25/06/2019

11

Bom Tarde,

Estou tralhando em projeto que está me tirando o sono. Nos outros projetos quando dá um erro de execução sql ou algum erro qlq, na maioria das vezes eu coloco o Try ...Except end;

Try
   Execute('insert into bilhete (código, nome, data, hora) values (:0,:1,:2,)'
except
         on e : Exception do
         Begin
            beep;
            dm.DB.Rollback;
            KDialog('Erro ao gravar bilhete'#13#13'Classe de erro: '+e.ClassName + #13+
                'Mensagem de erro: '+ e.Message, 'Erro', 'ERRO');
            exit
         end;
      end;


Ao invés de mostrar a mensagem "Erro ao gravar bilhete......" aparece a mensagem de violação:

'Access violation at address 004053CD in module ''Bilheteria.exe''. Read of address 0030002C'


Mesmo eu fazendo o DEBUG aparece a mensagem de Violação.
Debbuger Fault Notification


Project: d:\\Vendas\\Bilhete.exe fauted with message: 'system exception (code 0x00041d) at 0x00000053cd'.Process stopped.
use step or run to continue


Depois que dá essa mensagem, nem sair do programa eu consigo.


Eu testei, várias vezes o comando "clientdataset.locate" e apareceria a mensagem de violação. Acho que deve ser alguma coisa a respeito da hora.
Porque fui almoçar, quando retornei já não deu erro mais.


Me ajudem..... rsrsrs
Responder

Post mais votado

26/06/2019

publique o trecho de código que está gerando o erro.

se com o código em mãos você não está conseguindo identificar o problema, imagine como pode ser difícil pra quem quer te ajudar, se você não publicá-lo.

indique também qual banco de dados, tipos dos campos e o que mais você puder detalhar.
Responder

Mais Posts

25/06/2019

Bruno

Bom Tarde,

Estou tralhando em projeto que está me tirando o sono. Nos outros projetos quando dá um erro de execução sql ou algum erro qlq, na maioria das vezes eu coloco o Try ...Except end;

Try
   Execute('insert into bilhete (código, nome, data, hora) values (:0,:1,:2,)'
except
         on e : Exception do
         Begin
            beep;
            dm.DB.Rollback;
            KDialog('Erro ao gravar bilhete'#13#13'Classe de erro: '+e.ClassName + #13+
                'Mensagem de erro: '+ e.Message, 'Erro', 'ERRO');
            exit
         end;
      end;


Ao invés de mostrar a mensagem "Erro ao gravar bilhete......" aparece a mensagem de violação:

'Access violation at address 004053CD in module ''Bilheteria.exe''. Read of address 0030002C'


Mesmo eu fazendo o DEBUG aparece a mensagem de Violação.
Debbuger Fault Notification


Project: d:\\\\Vendas\\\\Bilhete.exe fauted with message: 'system exception (code 0x00041d) at 0x00000053cd'.Process stopped.
use step or run to continue


Depois que dá essa mensagem, nem sair do programa eu consigo.


Eu testei, várias vezes o comando "clientdataset.locate" e apareceria a mensagem de violação. Acho que deve ser alguma coisa a respeito da hora.
Porque fui almoçar, quando retornei já não deu erro mais.


Me ajudem..... rsrsrs


você inicia a transação? porque esta dando roollback talvez ele não esteja em transação e gera a erro
Responder

25/06/2019

Dirceu Morais



você inicia a transação? porque esta dando roollback talvez ele não esteja em transação e gera a erro


O Trecho que tem o Roollback foi só um exemplo, para vcs entenderem como eu faço.
Responder

26/06/2019

Dirceu Morais

Esta complicado colocar o código, pois teria eu disponibilizar o programa inteiro.

Veja bem:
Testei uma vez aqui e deu certo.

If Not cdsTMP.Locate('Categoria','-',[]) Then
 KDialog('Não achei categoria vazia','Alerta','Erro');
      cdsTMP.Edit;
      cdsTMPValor.AsFloat := cdsEventosVALOR.AsFloat;
      cdsTMPCategoria.AsString := 'I';


Agora fui executar novamente de deu erro de violação na linha: If Not cdsTMP.Locate('Categoria','-',[]) e como se não existisse a tabela CDSTMP.

Tem agora que consigo imprimir no FastReport de boa, dai do nada, ao executar não imprimi nada ou dá erro de violação.




Responder
cdsTMP pode estar sendo fechada num momento indevido, ou até mesmo ter sido eliminado.
se cdsTMP for criado em tempo de execução, veja quem é o owner, pois ao eliminar o owner, os childs também são eliminados.
Responder

26/06/2019

Bruno

Esta complicado colocar o código, pois teria eu disponibilizar o programa inteiro.

Veja bem:
Testei uma vez aqui e deu certo.

If Not cdsTMP.Locate('Categoria','-',[]) Then
 KDialog('Não achei categoria vazia','Alerta','Erro');
      cdsTMP.Edit;
      cdsTMPValor.AsFloat := cdsEventosVALOR.AsFloat;
      cdsTMPCategoria.AsString := 'I';


Agora fui executar novamente de deu erro de violação na linha: If Not cdsTMP.Locate('Categoria','-',[]) e como se não existisse a tabela CDSTMP.

Tem agora que consigo imprimir no FastReport de boa, dai do nada, ao executar não imprimi nada ou dá erro de violação.







antes de dar locate verifica se esta cdsTMP.IsEmpty
Responder

26/06/2019

Dirceu Morais

Será que tem alguma coisa a ver com minha configuração:

Formprincipal:
Borderstyle=bsSingle
FormStyle = fsMDIForm
Visible = True
Windostate=wsMaximized

Chamada:
   If FormVendas = nil Then
      FormVendas := TFormVendas.Create(Application);
   FormVendas.Show;
   Panel2.Visible := False;


No formVendas:
Borderstyle=bsNone
FormStyle = fsMDIChild
Visible = True
Windostate=wsMaximized




O Formvendas trabalha com outra tela (outro monitor para o cliente ficar vendo o que esta sendo digitado, com a mesma característica do formvendas)

type
TFormVendas = class(TForm)
...
cdsTMP: TClientDataSet;
...


No oncreate do formvendas:
cdsTMP.CreateDataSet;


No Botão Inicia vendas:
cdsTMP.EmptyDataSet;

Lembrando que o erro ocorre em outras tabelas também;

Neste caso também esta com erro:
 cdsSessao.Close;
         cdsSessao.ParamByName('Data').AsDateTime := cdsEventosDATA.AsDateTime;
         cdsSessao.ParamByName('Hora').AsDateTime := cdsEventosHORA.AsDateTime;
         cdsSessao.ParamByName('01').AsInteger := cdsEventosID_VENDA.AsInteger;
         cdsSessao.ParamByName('02').AsString   := cdsEventosID_ITEM.AsString;
         cdsSessao.Open();

Ao executar o OPEN dá erro.
O que mais me intriga é que Não é sempre que acontece isto.
As vezes acontece na primeira chamada, outras vezes na segunda.

;(
Responder

26/06/2019

Bruno

Qual erro está dando amigo vamos em partes .
Responder

27/06/2019

Dirceu Morais

Sempre é o mesmo erro em tudo.
Na hora de imprimir, abrir uma tabela.

'Access violation at address 004053CD in module ''Bilheteria.exe''. Read of address 0030002C'


[code=delphi
Debbuger Fault Notification


Project: d:\\\\Vendas\\\\Bilhete.exe fauted with message: 'system exception (code 0x00041d) at 0x00000053cd'.Process stopped.
use step or run to continue
[/code]

Acho que vou começar um projeto novo.
Pq já tem uma semana que estou nesta peleja.
Responder

27/06/2019

Dirceu Morais

Olha só,

Criei outro projeto e continua com o mesmo erro.

Olha só este outro erro:
Coloquei um Componente FDQuery liquei a conexão com o DM coloquei o sql lá.
Inclui os Fields. Deixei a conexão com o Banco de dados Fechada.

No Form eu uso assim.

        cdsSessao.Close;  //CdsSessao = FDQuery       -----DÁ ERRO DE VIOLAÇÃO AQUI
        cdsSessao.ParamByName('Data').AsDateTime := cdsEventosDATA.AsDateTime;
        cdsSessao.ParamByName('Hora').AsDateTime := cdsEventosHORA.AsDateTime;
        cdsSessao.ParamByName('01').AsInteger := cdsEventosID_VENDA.AsInteger;
        cdsSessao.ParamByName('02').AsString   := cdsEventosID_ITEM.AsString;
        cdsSessao.Open();


Testei assim:

if cdssessao.active Then
cdssessao.close; ///Testei também: cdssessao.active := False;
cdsSessao.ParamByName('Data').AsDateTime := cdsEventosDATA.AsDateTime;
cdsSessao.ParamByName('Hora').AsDateTime := cdsEventosHORA.AsDateTime;
cdsSessao.ParamByName('01').AsInteger := cdsEventosID_VENDA.AsInteger;
cdsSessao.ParamByName('02').AsString := cdsEventosID_ITEM.AsString;
cdsSessao.Open();


Porém, entra no "cdssessao.close" e dá erro.

Tentei não usando o "cdssessao.close" passou, só que eu preciso, atualizar o meu CDS.

Caramba!
Responder
há implementação nos eventos do componente cdssessao ?
Responder

27/06/2019

Bruno

Acho melhor você mandar como você faz a logica de montagem toda de uma vez para que agente possa te ajudar..
Responder

27/06/2019

Dirceu Morais

há implementação nos eventos do componente cdssessao ?


Não há nenhum evento nas tabelas.

Aliás eu coloquei uma agora no "afteropen" da tabela.

  if cdsVendas.Active then
     cdsVendas.Close;


Responder

27/06/2019

Rafael Bosco

Meu amigo, o seu erro é por que ta faltando a midas.dll, vá no seu formprincipal e coloque nas USES: midaslib;
Responder

27/06/2019

Dirceu Morais

Rafael, só se for o contrário porque já estou usando.

Meu amigo, o seu erro é por que ta faltando a midas.dll, vá no seu formprincipal e coloque nas USES: midaslib;


Veja:
program Bilheteria;

uses
  Vcl.Forms,
  MidasLib,
  unPrincipal in 'unPrincipal.pas' ,
  UDialog in 'UDialog.pas' ,
  unDm in 'unDm.pas' {DM: TDataModule},
  unLogin in 'unLogin.pas' ,
  uRotinas in 'uRotinas.pas',
  UnConfiguracao in 'UnConfiguracao.pas' ,
  unFechamentoCaixa in 'unFechamentoCaixa.pas' ,
  unBilheteria in 'unBilheteria.pas' ,
  unTelaCliente in 'unTelaCliente.pas' ,
  unprogramacao in 'unprogramacao.pas' ,
  unrelprogramacao in '..\\unrelprogramacao.pas' ,
  unSenha in 'unSenha.pas' ,
  ufCadastrar in '..\\ufCadastrar.pas' {FrameCadastro: TFrame};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TFormPrincipal, FormPrincipal);
  Application.CreateForm(TfrmDialog, frmDialog);
  Application.CreateForm(TDM, DM);
  Application.Run;
end.

Responder

06/08/2019

Dirceu Morais

Fala Galera, Boa tarde,

Ainda estou na peleja.
Criei um novo projeto e continua dano o mesmo erro vejam só.

o trecho abaixo, executa uma, duas, três, quatro, cinco, seis, e de repente ao clicar no botão btiniciavendaclick da erro.

Classe de erro: EAccessViolation
Mensagem de erro: Access violation at address 0040572B in module 'DSCinema.exe'. Read of address 00300030

procedure TFormBilheteria.btIniciaVendaClick(Sender: TObject);
Var i : Integer;
    Classif : String;
begin
   Try
      QueryValor.Close;
      QueryValor.SQL.Text := 'Select Data_Exibicao, id_sala, id_filme from '+
         'sessao_filme Where data_exibicao < current_date';
      QueryValor.Open;  //AS VEZES DA ERRO AQUI
      if dm.QueryValor.RecordCount > 0 then
      Begin
         KDialog('Existe caixa aberto do dia '+FormatDateTime('dd/mm/yyyy',dm.QueryValor.FieldByName('Data_Exibicao').AsDateTime)+
            ' Sala '+dm.QueryValor.FieldByName('id_sala').AsString,'Alerta','Info');
         Exit;
      End;

      TelaCliente(0,'1','1','1'); //PROCEDIMENTO ESTA VAZIO NÃO FAZ NADA POR ENQUANTO
      tsFilme.TabVisible := True;
      RzPageControl1.ActivePageIndex := 1;
      tsInicial.TabVisible := False;
      cdsTMP.EmptyDataSet;
      cdsEventos.Close;
      cdsEventos.Open;
      i := 1;
      PanelData.Caption := 'Data: '+ cdsEventosDATA_EXIBICAO.AsString;
      lbSelecao.Caption := 'Total Selecionada:   0';
      stCadeiraSelec.Caption := lbSELECAO.Caption;
      imsala01.Picture := Nil;
      imsala02.Picture := Nil;
      imsala03.Picture := Nil;
      imsala04.Picture := Nil;
      while not cdsEventos.eof do
      Begin
         case i of
         1 :
         Begin
             PanelSALA01.Visible := True;
             if cdsEventosIMAGEM.AsString <> '' Then
             begin
                 If FileExists(cdsEventosIMAGEM.AsString) Then
                    imsala01.Picture.LoadFromFile(cdsEventosIMAGEM.AsString);
             end;
             stFilme01.Caption := Trim(cdsEventosTITULO.AsString);
             S1 := cdsEventosID_SALA.AsString;
             F1 := cdsEventosID_FILME.AsString;
             H1 := cdsEventosHORA_EXIBICAO.AsString;
             stSala01.Caption := 'Sala: '+ cdsEventosID_SALA.AsString;
             stPrecoIS01.Caption := 'R$ '+Formatar_valores(cdsEventosPR_INTEIRA.AsFloat);
             stPrecoMS01.Caption := 'R$ '+Formatar_valores(cdsEventosPR_MEIA.AsFloat);
             stHora01.Caption := FormatDateTime('HH:mm',cdsEventosHORA_EXIBICAO.AsDateTime);
             Classif := RetSomenteNumeros(cdsEventosCENSURA.AsString);
             stLota01.Caption := 'Lotação: '+cdsEventosLOTACAO.AsString;
             //88Pinta_sessao(stSessao01,FormTelaCliente.stSessao01, cdsEventosLOTACAO.AsInteger,cdsEventosCAPACIDADE.AsInteger);
             Case StrToIntDef(Classif,0) of
             18 : imCensura01.Picture := im18.Picture;
             16 : imCensura01.Picture := im16.Picture;
             14 : imCensura01.Picture := im14.Picture;
             12 : imCensura01.Picture := im12.Picture;
             10 : imCensura01.Picture := im10.Picture;
             Else
//ERRO AQUI...........
                imCensura01.Picture := ImLivre.Picture;  //DA ERRO AQUI
             End;
             If cdsEventosAUDIO.AsString = 'L' Then
                stLegenda01.Caption := 'LEGENDADO'
             Else
                stLegenda01.Caption := 'DUBLADO';
             if cdsEventosTIPOPROJECAO.AsString = '3' then
                Proj01.Caption := '3D'
             Else
                Proj01.Caption := 'DIGITAL';
             Gauge1.MaxValue := cdsEventosCAPACIDADE.AsInteger;
             cdsVendas.Close;
             cdsVendas.ParamByName('TSala').AsString := cdsEventosID_SALA.AsString;
             cdsVendas.ParamByName('Data').AsDate := cdsEventosDATA_EXIBICAO.AsDateTime;
             cdsVendas.ParamByName('Hora').AsString := cdsEventosHORA_EXIBICAO.AsString;
             cdsVendas.ParamByName('Filme').AsString := cdsEventosID_FILME.AsString;
             cdsVendas.Open;
             gauge1.Progress :=cdsEventosLOTACAO.AsInteger;
         End;
         2 :
         Begin
             PanelSALA02.Visible := True;
             if cdsEventosIMAGEM.AsString <> '' Then
             begin
                 If FileExists(cdsEventosIMAGEM.AsString) Then
                    imsala02.Picture.LoadFromFile(cdsEventosIMAGEM.AsString);
             end;
             stFilme02.Caption := Trim(cdsEventosTITULO.AsString);
             stSala02.Caption := 'Sala: '+ cdsEventosID_SALA.AsString;
             stPrecoIS02.Caption := 'R$ '+Formatar_valores(cdsEventosPR_INTEIRA.AsFloat);
             stPrecoMS02.Caption := 'R$ '+Formatar_valores(cdsEventosPR_MEIA.AsFloat);
             stHora02.Caption := FormatDateTime('HH:mm',cdsEventosHORA_EXIBICAO.AsDateTime);
             Classif := RetSomenteNumeros(cdsEventosCENSURA.AsString);
             F2 := cdsEventosID_FILME.AsString;
             S2 := cdsEventosID_SALA.AsString;
             H2 := cdsEventosHORA_EXIBICAO.AsString;
             Case StrToIntDef(Classif,0) of
             18 : imCensura02.Picture := im18.Picture;
             16 : imCensura02.Picture := im16.Picture;
             14 : imCensura02.Picture := im14.Picture;
             12 : imCensura02.Picture := im12.Picture;
             10 : imCensura02.Picture := im10.Picture;
             Else
                imCensura02.Picture := ImLivre.Picture;
             End;
             If cdsEventosAUDIO.AsString = 'L' Then
                stLegenda02.Caption := 'LEGENDADO'
             Else
                stLegenda02.Caption := 'DUBLADO';
             if cdsEventosTIPOPROJECAO.AsString = '3' then
                Proj02.Caption := '3D'
             Else
                Proj02.Caption := 'DIGITAL';
             Gauge2.MaxValue := cdsEventosCAPACIDADE.AsInteger;
             cdsVendas.Close;
             cdsVendas.ParamByName('TSala').AsString := cdsEventosID_SALA.AsString;
             cdsVendas.ParamByName('Data').AsDate := cdsEventosDATA_EXIBICAO.AsDateTime;
             cdsVendas.ParamByName('Hora').AsString := cdsEventosHORA_EXIBICAO.AsString;
             cdsVendas.ParamByName('Filme').AsString := cdsEventosID_FILME.AsString;
             cdsVendas.Open;
             gauge2.Progress := cdsEventosLOTACAO.AsInteger;
             stLota02.Caption := 'Lotação: '+cdsEventosLOTACAO.AsString; 
         End;
        end;
         Inc(i);
         cdsEventos.Next;
      End;
   Except
      on e : Exception do
      Begin
         KDialog('Erro ao iniciar venda'#13#13'Classe de erro: '+e.ClassName + #13+
                'Mensagem de erro: '+ e.Message, 'Erro', 'ERRO');
      end;
   end;
   PanelSALA01.Visible := S1<>'';
   PanelSALA02.Visible := S2<>'';
end;

procedure TFormBilheteria.bVoltarClick(Sender: TObject);
begin
   tsInicial.TabVisible := True;
   RzPageControl1.ActivePageIndex := 0;
   tsFilme.TabVisible := False;
   tsPoltrona.TabVisible := False;
   tsFinalizacao.TabVisible := False;
end;             


Veja que não DESTRUO nenhum objeto.

Já faz mais de mês que estou lutando com esse erro.

Me ajude sniff, sniff
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira