Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

HELENO de Sant'Anna

ERRO: Dataset not in edit or insert mode

Recommended Posts

Olá a todos,

 

Tenho um formulário cujo nome é frmEscolaOrgao, onde é realizado o cadastro de escolas municipais. Neste formulário tenho um botão (btnAlterar) cujo código é o seguinte:


procedure TfrmEscolaOrgao.btnAlterarClick(Sender: TObject);
begin
dm_dadosSeduc.tbl_escolaOrgao.Edit;
btnNovo.Enabled:= False;
btnSalvar.Enabled:= True;
btnVoltar.Enabled:= False;
btnAlterar.Enabled:= False;
btnPesquisar.Enabled:= False;
btnCancelar.Enabled:= True;
btnExcluir.Enabled:= False;
btnImprimir.Enabled:= False;
dbINEP.Enabled:= True;
dbNomeEscola.Enabled:= True;
cbxLogradouro.Enabled:= True;
dbEndereco.Enabled:= True;
dbNumero.Enabled:= True;
dbComplemento.Enabled:= True;
dbBairro.Enabled:= True;
cbxCidade.Enabled:= True;
cbxUF.Enabled:= False;
dbCEP.Enabled:= True;
dbTelefone.Enabled:= True;
dbEmail.Enabled:= True;
rgpLocalizacao.Enabled:= True;
dbNumAlunos.Enabled:= True;
dbDataCadastro.Enabled:= True;
dbCadEscolar.Enabled:= True;
dbPortaria.Enabled:= True;
dbDataPortaria.Enabled:= True;
dbCNPJ.Enabled:= True;
rgpTipoInstituicao.Enabled:= True;
dbObservacoes.Enabled:= True;
dbMatDirecao.Enabled:= True;
cbxDiretor.Enabled:= True;
dbMatAdjunto.Enabled:= True;
cbxAdjunto.Enabled:= True;
dbMatSecretario.Enabled:=True;
cbxSecretario.Enabled:= True;
Foto.Enabled:= True;
carregarImagem.Enabled:= True;
end;
Neste formulário (frmEscolaOrgao), tenho também o botão Salvar (btnSalvar), cujo código é o seguinte:

procedure TfrmEscolaOrgao.btnSalvarClick(Sender: TObject);
begin
if dm_dadosSeduc.tbl_escolaOrgao.State in [dsEdit]
then
begin
if (MessageDlg('DESEJA SALVAR AS ALTERAÇÕES NO REGISTRO ATUAL?', mtConfirmation, [mbYes,mbNo],0) = mrYes)
then
begin
dm_dadosSeduc.tbl_escolaOrgao.Post;
btnNovo.Enabled:= True;
btnSalvar.Enabled:= False;
btnVoltar.Enabled:= True;
btnAvancar.Enabled:= True;
btnAlterar.Enabled:= True;
btnPesquisar.Enabled:= True;
btnCancelar.Enabled:=False;
btnExcluir.Enabled:= True;
btnImprimir.Enabled:= True;
dbINEP.Enabled:= False;
dbNomeEscola.Enabled:= False;
cbxLogradouro.Enabled:= False;
dbEndereco.Enabled:= False;
dbNumero.Enabled:= False;
dbComplemento.Enabled:= False;
dbBairro.Enabled:= False;
cbxCidade.Enabled:= False;
cbxUF.Enabled:= False;
dbCEP.Enabled:= False;
dbTelefone.Enabled:= False;
dbEmail.Enabled:= False;
rgpLocalizacao.Enabled:= False;
dbNumAlunos.Enabled:= False;
dbDataCadastro.Enabled:= False;
dbCadEscolar.Enabled:= False;
dbPortaria.Enabled:= False;
dbDataPortaria.Enabled:= False;
dbCNPJ.Enabled:= False;
rgpTipoInstituicao.Enabled:= False;
dbObservacoes.Enabled:= False;
dbMatDirecao.Enabled:= False;
cbxDiretor.Enabled:= False;
dbMatAdjunto.Enabled:= False;
cbxAdjunto.Enabled:= False;
dbMatSecretario.Enabled:=False;
cbxSecretario.Enabled:= False;
Foto.Enabled:= False;
carregarImagem.Enabled:= False;
MessageDlg('ALTERAÇÕES SALVAS COM SUCESSO!', mtInformation,[mbOK],0);
end
else
begin
dm_dadosSeduc.tbl_escolaOrgao.Cancel;
MessageDlg('AS ALTERAÇÕES NÃO FORAM SALVAS!', mtInformation,[mbOK],0);
end;
end
else
begin
if ((dbINEP.Text <> '') and (dbNomeEscola.Text <> '') and (cbxLogradouro.Text <> '') and
(dbEndereco.Text <> '') and (dbNumero.Text <> '') and (dbComplemento.Text <> '') and
(dbBairro.Text <> '') and (cbxCidade.Text <> '') and (cbxUF.Text <> '') and
(dbCEP.Text <> '') and (rgpLocalizacao.ItemIndex <> -1) and (dbNumAlunos.Text <> '') and
(rgpTipoInstituicao.ItemIndex <> -1))
then
begin
dm_dadosSeduc.tbl_escolaOrgao.Post;
btnNovo.Enabled:= True;
btnSalvar.Enabled:= False;
btnVoltar.Enabled:= True;
btnAvancar.Enabled:= True;
btnAlterar.Enabled:= True;
btnPesquisar.Enabled:= True;
btnCancelar.Enabled:=False;
btnExcluir.Enabled:= True;
btnImprimir.Enabled:= True;
dbINEP.Enabled:= False;
dbNomeEscola.Enabled:= False;
cbxLogradouro.Enabled:= False;
dbEndereco.Enabled:= False;
dbNumero.Enabled:= False;
dbComplemento.Enabled:= False;
dbBairro.Enabled:= False;
cbxCidade.Enabled:= False;
cbxUF.Enabled:= False;
dbCEP.Enabled:= False;
dbTelefone.Enabled:= False;
dbEmail.Enabled:= False;
rgpLocalizacao.Enabled:= False;
dbNumAlunos.Enabled:= False;
dbDataCadastro.Enabled:= False;
dbCadEscolar.Enabled:= False;
dbPortaria.Enabled:= False;
dbDataPortaria.Enabled:= False;
dbCNPJ.Enabled:= False;
rgpTipoInstituicao.Enabled:= False;
dbObservacoes.Enabled:= False;
dbMatDirecao.Enabled:= False;
cbxDiretor.Enabled:= False;
dbMatAdjunto.Enabled:= False;
cbxAdjunto.Enabled:= False;
dbMatSecretario.Enabled:=False;
cbxSecretario.Enabled:= False;
Foto.Enabled:= False;
carregarImagem.Enabled:= False;
MessageDlg('ESCOLA OU ÓRGÃO CADASTRADO(A) COM SUCESSO!',mtInformation,[mbOK],0);
end
else
begin
MessageDlg('ERRO AO CADASTRAR: CAMPO OBRIGATÓRIO NÃO PREENCHIDO!', mtError,[mbOK],0);
end;
end;
end;

O problema é o seguinte, quando clico no botão Alterar e realizo alguma alteração em qualquer campo desse formulário (com exceção dos campos Diretor, Diretor Adjunto e Secretário) e clico no botão Salvar tudo ocorre bem. No entanto, quando essa alteração é em um dos campos Diretor, Diretor Adjunto ou Secretário, então aparece o seguinte erro:

"Project SeducLi.exe raised exception class EDatabaseError with
message 'tbl_escolaOrgao: Dataset not in edit or insert mode'.
Process stopped. Use Step or Run to continue.
"

Alguém já passou por uma experiência semelhante? Como resolver?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, da próxima vez por favor, coloque seu código identado entre as tags {code} {/code} (troque as "{}" por "[]") para facilitar a nossa leitura, tive que copiar seu código e identar para tentar entendê-lo melhor aqui pela forma que posta <_< .... Agora, vamos lá... primeira pergunta: os campos que cita são da mesma tabela que está editando? Ou são de outra tabela? Eu vejo um problema grave no seu código do botão gravar aqui... veja que, ao alterar os dados, você passa o seguinte comando para por sua tabela em edição:

 

 

dm_dadosSeduc.tbl_escolaOrgao.Edit;

 

Isto é, neste momento, você diz ao programa que a tabela está em modo de edição... logo, quando mandar gravar, você irá entrar neste if com sucesso para editar os dados....

 

 

if dm_dadosSeduc.tbl_escolaOrgao.State in [dsEdit] then

 

Em outras palavras, ao clicar em alterar você coloca corretamente a tabela em modo de edição e ao gravar não ocorrem erros porque seu programa entra no local esperado corretamente. Contudo, o seu erro aqui é ter um else na gravação que executa sem validar se o status da tabela está em modo de edição ou de inserção, como mostrado na mensagem de erro que postou (tbl_escolaOrgao: Dataset not in edit or insert mode). Veja que no seu else do botão de gravação você apenas testa se os campos estão preenchidos, mas não se a tabela está em modo de inserção ou edição. Debugando o código, você já verificou o ponto onde ocorre o erro? Se não é por cair neste else e dar o post direto sem testar o status da tabela que está gerando o erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.