Fórum Mensagem de Erro ao Gravar cadastro no banco mas grava #484169

01/07/2014

0

Bom dia,

Sou novo em programação, meu conhecimento é básico. Estou tentando gravar um registro no banco de dados e ocorre a seguinte mensagem: CdsClientes: dataset no in edit or insert mode. Porém o registro é gravado. Gostaria de saber como resolvo para retirar essa mensagem.

No meu form tenho um botao de insert com o seguinte código:

dm.cdsclientes.insert;
DBnome.SetFocus;

Tenho um botão de gravar com o seguinte código:
procedure TFrameCadClientes.SBGravarClick(Sender: TObject);
var
vCodigo : integer;
begin
if dm.CdsClientes.State in [dsinsert] then
with dm.sp_Clientes do
begin
Prepared := true;
ExecProc;
Prepared := False;
Vcodigo :=ParamByName ('ID').Value;
close;
dm.cdsclientes.fieldbyname('codigo').AsInteger := vcodigo;
dm.cdsclientes.Post;
dm.cdsclientes.ApplyUpdates(0);
end;
begin
dm.cdsclientes.Post;
dm.cdsclientes.ApplyUpdates(0);
end;
end;

Sendo que utilizo uma trigger no banco para criar um codigo novo para o cliente:
AS
BEGIN
if (inserting) then
IF (NEW.CODIGO IS NULL) THEN
NEW.CODIGO = GEN_ID(GEN_CLIENTES_ID,1);
END

Preciso que o Botão Gravar grave registro novos e também atualize registro existentes. Ele está fazendo normal só que essa mensagem: CdsClientes: dataset no in edit or insert mode. fica aparecendo.

desde já agradeço a atenção.
Diego Jacauna

Diego Jacauna

Responder

Post mais votado

01/07/2014

É porque você esta executando Post duas vezes e não precisa do applyupdates. Também poderia melhorar a estrutura do código, deixando de lado o ExecProc e Prepared.

Outra coisa; qual o banco de dados que você esta usando? e por que usar trigger?

Ricardo

Ricardo
Responder

Gostei + 1

Mais Posts

01/07/2014

Diego Jacauna

A Trigger é para gerar um codigo automático no banco.

realmente resolver tirando o o post.

obrigado Ricardo pelo retorno.
Responder

Gostei + 0

11/07/2014

Guilherme

Está faltando antes de Post
dm.cdsclientes.Append ou dm.cdsclientes.Insert
por isso aquela mensagem que você viu.
Responder

Gostei + 0

11/07/2014

Ricardo

Está faltando antes de Post
dm.cdsclientes.Append ou dm.cdsclientes.Insert
por isso aquela mensagem que você viu.


O nosso amigo já resolveu o problema. No caso dele não esta faltando append ou insert, a tabela já esta em modo de inserção, veja que ele tem dois botões um para inserir e outro para gravar. O botão inserir já esta dando insert, o problema era que ele estava executando post duas vezes seguidas para o mesmo registro.
Responder

Gostei + 0

30/01/2015

Guilherme Wiethaus

Ficou desapercebido quando analisei. Sem dúvida, deu duas vezes o Post.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar