Fórum Atualizar linha no grid - me tirando o sono #308736
11/01/2006
Tenho um Grid(Tabela de Itens), detalhe da tabela de Pedidos. Eu tenho tres dbedits que insiro qualquer coisa e depois um botão Inserir. Nesse botão inserir eu insiro e dou um insert. Até aí tudo bem. Acontece que se o usuário clicar no grid, a linha em branco(Inserção), some, o que é normal, mas quando vou inserir outra vez, dá o erro dizendo que a linha não pode ser atualizada e logo depois funciona normalmente, quando fecho a caixa de diálogo da mensagem de erro. No botão inserir, eu faço um teste com IF, para informar se a tabela não está em edição ou inserção, então tabela.insert. Tem como evitar esse inconveniente?(Caixa de Mensagem de Erro) Ou como devo proceder.
Posts
Se eu entendi direito, você tem o grid e uns edits ao lado. Quando você insere dados pelos edits funciona, mas quando tenta fazer o mesmo pelo grid não funciona. Isso é sinal que está fazendo algo errado em seu código. Como fica dificil dizer onde pode estar errando, acho que você poderia deixar o grid apenas como uma visualização do que está sendo registrado nos edits e não permitir a edição pelo grid.
Será que você não está esquecendo de fornecer o conteúdo de algum campo (chave) durante a insersão pelo grid e o erro gerado será para lhe mostrar falta de referência entre as tabelas?
Você não entendeu. Não é inserção pelo Grid. É que se o usuário clicar no grid, sem querer, ou querendo, é que dá o erro citado. É quando clica no grid, a linha que em branco gerada no insert ela some e então, quando dou um insert novamente, é que dá o erro.
Então o caso é: o usuário inicia uma inclusão, antes de terminar a inclusão clica no grid, nesse momento a linha de inclusão desaparece (desaparece?), depois o usuário inicia novamente outra inclusão e dá erro. Dá erro porque o último registro ainda não foi salvo, a tabela estava em estado dsInsert, o novo insert tentou gravar o registro anterior que provavelmente não tinha dados suficientes para ser salvo.
Recomendo: ao iniciar uma inclusão faça Grid.enabled := false. Ao terminar a inclusão habilite o grid novamente, assim o usuário não vai poder clicar no grid enquanto não terminar a inclusão.
É isso?
Realmente era só isso. Desabilito o grid na inserção e após o post, eu o habilito, para exclusão e etc.. Assim funcionou cara, valeu pela idéia.