Fórum erro tabela _ Dataset not in edit or insert mode. #489437
19/08/2014
0
Estou iniciando um projeto com ADOs e DataSources, porém no formulário de cadastro de clientes ao inserir todos os dados quando clico em salvar aparece o seguinte erro:
TAB_CLIENTES: Dataset not in edit or insert mode. Lembrando que a tabela já esta em modo de Edição e Inserção com os seguintes códigos:
procedure TDM.TAB_CLIENTESBeforeInsert(DataSet: TDataSet);
begin
if DM.TAB_CLIENTES.State in [dsEdit] then
begin
DM.TAB_CLIENTES.Post;
end;
if DM.TAB_CLIENTES.State in [dsEdit] then
begin
DM.TAB_CLIENTES.Post
end;
end;
Aguardo respostas. Obrigado
Tácio Silva
Curtir tópico
+ 0Post mais votado
19/08/2014
Como você chama o Insert para precisar dar o post no BeforeInsert?
Seguindo sua linha de raciocínio, uma das verificações idênticas do BeforeInsert deveria ser
if DM.TAB_CLIENTES.State in [dsInsert] then
Além de corrigir, pode por as duas juntas.
if DM.TAB_CLIENTES.State in [dsInsert,dsEdit] then DM.TAB_CLIENTES.Post;
O erro que está ocorrendo depende do que o "Salvar" faz ? Está usando um DBNavigator para isso ou um botão com uma procedure alimentada por você?
Abraççç,
Renato
Renato Rubinho
Gostei + 1
Mais Posts
19/08/2014
Tácio Silva
Em relação ao tipo de botão, estou usando um SpeedButton com a seguinte linha de código no 'Salvar'
procedure TFR_CADCLIENTE.BTSALVARClick(Sender: TObject);
begin
DM.TAB_CLIENTESNOME.Value:= EDNOME.Text;
DM.TAB_CLIENTESENDERECO.Value:= EDEND.Text;
DM.TAB_CLIENTESBAIRRO.Value:= EDBAIRRO.Text;
DM.TAB_CLIENTESCIDADE.Value:= EDCIDADE.Text;
DM.TAB_CLIENTESTELEFONE.Value:= StrToInt (EDTELEF.Text);
DM.TAB_CLIENTESCPF.Value:= StrToInt(EDCPF.Text);
DM.TAB_CLIENTESDATADENASCIMENTO.Value:= StrToInt (EDDTNASC.Text);
DM.TAB_CLIENTES.Post;
DM.TAB_CLIENTES.Requery();
EDNOME.ReadOnly:=TRUE;
EDEND.ReadOnly:=TRUE;
EDBAIRRO.ReadOnly:=TRUE;
EDCIDADE.ReadOnly:=TRUE;
EDTELEF.ReadOnly:=TRUE;
EDCPF.ReadOnly:=TRUE;
EDDTNASC.ReadOnly:=TRUE;
application.MessageBox('SALVO COM SUCESSO','UNEOURO',MB_ICONEXCLAMATION);
EDCOD.Clear;
EDNOME.Clear;
EDEND.Clear;
EDBAIRRO.Clear;
EDCIDADE.Clear;
EDTELEF.Clear;
EDCPF.Clear;
EDDTNASC.Clear;
end;
Será que devo excluir a ADOTable referente e adiciona-lá novamente, um detalhe não adicionei as seguintes Fields no Formulário, inseri com Edits mesmo sei que não tem problema fazer desta forma. Mas o que devo fazer a respeito ?
Gostei + 0
19/08/2014
Renato Rubinho
Por isso dá o erro. Ao tentar preencher o EDNOME.text no campo "NOME", a tabela não está pronta para receber o dado e gera o erro.
Mas desta forma, alimentando sempre manualmente esses dados, nem precisa daquele código no BeforeInsert. Sua tabela sempre estará em "browse" porque você não edita os dados diretamente no objeto.
procedure TFR_CADCLIENTE.BTSALVARClick(Sender: TObject); begin // Se for uma inserção DM.TAB_CLIENTESNOME.Insert; // Se for uma edição DM.TAB_CLIENTESNOME.Edit; DM.TAB_CLIENTESNOME.Value:= EDNOME.Text; DM.TAB_CLIENTESENDERECO.Value:= EDEND.Text; DM.TAB_CLIENTESBAIRRO.Value:= EDBAIRRO.Text; DM.TAB_CLIENTESCIDADE.Value:= EDCIDADE.Text;
Gostei + 1
19/08/2014
Tácio Silva
Consegui corrigir o erro com sua orientação, realmente não posso preencher os dados dos campos sem antes colocar a tabela em modo de Inserção e Edição.
Aproveitei e exclui o formulário e a tabela no DataModule e fiz tudo novamente ai funfou legal. ..
Agradeço até mais..;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)