Maneju 0 Denunciar post Postado Outubro 22, 2013 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
thyagoollive 2 Denunciar post Postado Outubro 22, 2013 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
Maneju 0 Denunciar post Postado Outubro 22, 2013 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
thyagoollive 2 Denunciar post Postado Outubro 22, 2013 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
Chrnos 30 Denunciar post Postado Outubro 22, 2013 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