Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Maneju

Erro na cxgrid

Recommended Posts

Olá.

Estou com erro de Access violation na cxgrid quando edito uma célula e teclo seta para baixo ou para cima, Quando faço com o ENTER não dá o erro. Acredito ser o motivo, o fato de que, com as setas o ponteiro muda de registro antes do post. Tem como contornar isto?
Usei a alternativa abaixo mas não resolveu:

  

 

try
         cxGrid1DBTableView1.DataController.DataModeController.SyncMode:= false;
  finally
         cxGrid1DBTableView1.DataController.DataModeController.SyncMode:= true;
  end;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, o famoso erro de Access violation (Tradução: Acesso Violado) não pode ser questão de post, applyupdates..

 

Esse erro é quando você acessa algo que não esta (mais ou nunca esteve) instanciado na memória.

Eu particularmente não conheço os componentes da conceituada DevExpress, mas acredito que não deve ser no componente.

 

Portanto, recomendo que olhe os eventos que você colocou no componente. Debug.

Se não encontrar, poste sua unit inteira aqui por favor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu pego o evento abaixo, onde pego o conteudo atual do grid e gravo. Se dou ENTER na célua funciona, se dou SETA PARA BAIXO ou PARA CIMA, ocorre o erro. Não acredito ser algo não instanciado, senão com a tecla ENTAR daria o mesmo erro. Imagino ser o fato de, quando utilizo as setas, o ponteiro de registros move-se para o registro anterior ou posterior e daí o erro.

procedure TNFEntradaPedido.cxGrid1DBTableView1qtdeentreguePropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
  try
     cxGrid1DBTableView1.DataController.DataModeController.SyncMode:= false;
     Error := false;
     if itens_pedidofracionado.Value = 'N' then
        begin
           if DisplayValue > itens_pedidoqtdepedida.value then
              begin
                 MessageDlg('Qtde informada maior que qtde pedida', mtInformation, [mbOk], 0);
                 itens_pedido.edit;
                 itens_pedidoqtdeentregue.value       := 0;
                 itens_pedido.post;
                 exit;
              end
           else
              begin
                 itens_pedido.edit;
                 itens_pedidoqtdeentregue.value       := DisplayValue;
                 itens_pedido.post;
           end;
        end
     else if itens_pedidofracionado.Value = 'S' then
        begin
           itens_pedido.edit;
           itens_pedidoqtdeentregue.value       := DisplayValue;
           itens_pedido.post;
     end;
  finally
     cxGrid1DBTableView1.DataController.DataModeController.SyncMode:= true;
  nd;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maneju, estou tentando baixar o componente trial da DevExpress pra te ajudar, mas ta dando página não disponível :grin: .

 

Enfim, em qual linha esta apresentando o Access violation?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que eventos você tem programado no seu grid? Já debugou o código para ver se o erro ocorre realmente no código que postou aqui? Outra coisa: porque não está usando tratamento de exceções (try .. except) no seu código? Considerando que está envolvendo acesso e gravação a base de dados, seria altamente recomendado dar um rollback em qualquer operação em caso de erro e apresentar uma mensagem de erro mais padronizada ao seu usuário em caso de exceções... coloque alguns breakpoints no seu programa e veja se o erro não está ocorrendo por estar entrando em outra função do seu sistema pois, se ao clicar enter este código está ok, provavelmente o problema está em outro ponto que você não está vendo por estar focando sua análise neste código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.