GARANTIR DESCONTO

Fórum erro tabela _ Dataset not in edit or insert mode. #489437

19/08/2014

0

Olá pessoal sou novo aqui no DEV, estou com o seguinte problema.
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

Tácio Silva

Responder

Post mais votado

19/08/2014

Buenas,

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
"dsInsert" e outra "dsEdit", certo ?

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

Renato Rubinho
Responder

Gostei + 1

Mais Posts

19/08/2014

Tácio Silva

Bacana Renato fiz essa alteração para diminuir a linha de códigos.
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 ?
Responder

Gostei + 0

19/08/2014

Renato Rubinho

Você precisa colocar a tabela em Modo de Inserção ou edição para começar a preencher os dados dos campos.
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;
Responder

Gostei + 1

19/08/2014

Tácio Silva

Muito Grato Brother!
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..;
Responder

Gostei + 0

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

Aceitar