Mensagem de Erro ao Gravar cadastro no banco mas grava

Delphi

01/07/2014

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

Curtidas 0

Melhor post

Ricardo

Ricardo

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?
GOSTEI 1

Mais Respostas

Diego Jacauna

Diego Jacauna

01/07/2014

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

realmente resolver tirando o o post.

obrigado Ricardo pelo retorno.
GOSTEI 0
Guilherme

Guilherme

01/07/2014

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

Ricardo

01/07/2014

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.
GOSTEI 0
Guilherme Wiethaus

Guilherme Wiethaus

01/07/2014

Ficou desapercebido quando analisei. Sem dúvida, deu duas vezes o Post.
GOSTEI 0
POSTAR