Mensagem de Erro ao Gravar cadastro no banco mas grava
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.
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
Curtidas 0
Melhor post
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?
Outra coisa; qual o banco de dados que você esta usando? e por que usar trigger?
GOSTEI 1
Mais Respostas
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.
realmente resolver tirando o o post.
obrigado Ricardo pelo retorno.
GOSTEI 0
Guilherme
01/07/2014
Está faltando antes de Post
dm.cdsclientes.Append ou dm.cdsclientes.Insert
por isso aquela mensagem que você viu.
dm.cdsclientes.Append ou dm.cdsclientes.Insert
por isso aquela mensagem que você viu.
GOSTEI 0
Ricardo
01/07/2014
Está faltando antes de Post
dm.cdsclientes.Append ou dm.cdsclientes.Insert
por isso aquela mensagem que você viu.
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
01/07/2014
Ficou desapercebido quando analisei. Sem dúvida, deu duas vezes o Post.
GOSTEI 0