Erro DataSet not in edit or insert mode Delphi Berlin

20/05/2022

0

Olá Pessoal, bom recentemente comecei um projeto no delphi uso o berlin
é nesse meio tempo já vem dando erros que consegui resolver, mas esse
está federal rsrs, é esse

Project Projeto.exe raised exception class EDatabaseError with message ''cItens: Dataset not in edit or insert mode''.

bom já tentei trocar o insert para edit mas mesmo assim o mesmo erro continua

procedure TFLanItem.btSalvarClick(Sender: TObject);
begin
if edCod.Text='''' then
begin
ShowMessage(''CÓDIGO DO PRODUTO NÃO INFORMADO!'');
edCod.SetFocus;
Exit;
end;

if edDescricao.Text='''' then
begin
ShowMessage(''NOME DO PRODUTO NÃO INFORMADO!'');
edDescricao.SetFocus;
Exit;
end;

if edValor.Text=''0,00'' then
begin
ShowMessage(''VALOR DO PRODUTO NÃO INFORMADO!'');
edValor.SetFocus;
Exit;
end;

if edQtd.Text=''0'' then
begin
ShowMessage(''QUANTIDADE DO PRODUTO NÃO INFORMADO!'');
edQtd.SetFocus;
Exit;
end;

if edTotal.Text=''0,00'' then
begin
ShowMessage(''TOTAL DO PRODUTO NÃO INFORMADO!'');
edTotal.SetFocus;
Exit;
end;

if dm.cItens.State=dsInsert then
begin
dm.cItens.Append;
dm.cItensID_ITEM.AsInteger:=dm.qryGenIdItemID.AsInteger;
end;

dm.cItensID_PRODUTO.AsInteger := StrToInt(edCod.Text);
dm.cItensQUANTIDADE.AsInteger := StrToInt(edQtd.Text);
dm.cItensVALOR.AsFloat := StrToFloat(edValor.Text);
dm.cItensTOTAL.AsFloat := StrToFloat(edTotal.Text);
dm.cItensDESCRICAO.AsString := edDescricao.Text;
dm.cItens.First;

ShowMessage(''INFORMAÇÕES ARMAZENADAS COM SUCESSO!'');
Close;


Ele está pulando esse bloco não está lendo

if dm.cItens.State=dsInsert then
begin
dm.cItens.Append;
dm.cItensID_ITEM.AsInteger:=dm.qryGenIdItemID.AsInteger;
end;

E depois já vai para seguinte linha

dm.cItensID_PRODUTO.AsInteger := StrToInt(edCod.Text);
porque onde era para gerar não está gerando e acaba dando o erro

Quem poder me ajudar ficarei grato! :)
João

João

Responder

Posts

23/05/2022

Welinton Dias

Não faz muito sentido esse teste, note que você está dando um APPEND caso o dataset estiver em modo de inserção. Se o dataset estiver em modo de inserção, ele nunca vai entrar nesse IF.
Qual o sentido de colocar uma tabela em modo de inserção, se ela já estiver em modo de inserção?

if dm.cItens.State=dsInsert then --> AQUI VC VERIFICA SE ESTÁ EM MODO DE INSERÇÃO
begin
dm.cItens.Append; --> AQUI VC COLOCA EM MODO DE INSERÇÃO.
dm.cItensID_ITEM.AsInteger:=dm.qryGenIdItemID.AsInteger;
end;

O correto seria colocar em modo de inserção se não estiver, faltou um NOT no IF

if not dm.cItens.State=dsInsert then --> AGORA, SE 'NÃO' ESTIVER EM MODO DE INSERÇÃO, ELE ENTRA NO IF E COLOCA EM MODO DE INSERÇÃO COM O APPEND
begin
dm.cItens.Append;
dm.cItensID_ITEM.AsInteger:=dm.qryGenIdItemID.AsInteger;
end;

Responder

24/05/2022

João

Não faz muito sentido esse teste, note que você está dando um APPEND caso o dataset estiver em modo de inserção. Se o dataset estiver em modo de inserção, ele nunca vai entrar nesse IF.
Qual o sentido de colocar uma tabela em modo de inserção, se ela já estiver em modo de inserção?

if dm.cItens.State=dsInsert then --> AQUI VC VERIFICA SE ESTÁ EM MODO DE INSERÇÃO
begin
dm.cItens.Append; --> AQUI VC COLOCA EM MODO DE INSERÇÃO.
dm.cItensID_ITEM.AsInteger:=dm.qryGenIdItemID.AsInteger;
end;

O correto seria colocar em modo de inserção se não estiver, faltou um NOT no IF

if not dm.cItens.State=dsInsert then --> AGORA, SE 'NÃO' ESTIVER EM MODO DE INSERÇÃO, ELE ENTRA NO IF E COLOCA EM MODO DE INSERÇÃO COM O APPEND
begin
dm.cItens.Append;
dm.cItensID_ITEM.AsInteger:=dm.qryGenIdItemID.AsInteger;
end;



Ah, sim agora entendi, irei tentar aqui, muito obrigado! :)
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar