Fórum Erro field must have a value #478279
07/05/2014
0
Estou fazendo um sistema para trabalho da Faculdade, o tema que escolhi foi de agendamento de horário para salão de beleza...
Estou utilizando o Delphi 2010 e o meu banco de dados é o MySQL.
No meu Banco de Dados eu tenho uma tabela de Agendamento e uma tabela de Contas a Receber....
Quando o usuário for realizar um agendamento de horário ele deve informar a forma de pagamento, a data de vencimento e o valor do serviço que será feito, essas informações são devem ser gravadas na tabela de contas a Receber, e no mesmo Form o usuário deve informar o serviço que será realizado, a data que será realizado o serviço, o funcionário que fará o serviço, a hora e o cliente, que serão gravados na tabela de Agenda....
Quando clico no botão salvar o sistema salva o agendamento, mas na hora de salvar a conta aparece o seguinte erro: Project Sistema.exe raised exception class EDatabaseError with message 'Field 'idAgendamento' must have a value'....
Se eu clico no botão continue
Aparece a Mensage: Field 'idAgendamento' must have a value
Pesquise e encontrei alguns fóruns com o mesmo erro, porém não consegui corrigir o meu problema, alguém poderia me ajudar?
A mensagem diz que o idAgendamento não possui um valor, mas quando eu clico em novo eu coloquei um código assim:
EdCodigoConta.Text := IntToStr(0);
onde EdCodigoConta é o nome do DBEdit que recebe o valor para o IdAgenda...
SEGUE O CÓDIGO DO PROCEDURE DO BOTÃO(NO CASO UMA IMAGEM) NOVO:
procedure TFrmAgenda.Image2Click(Sender: TObject);
var
Cod, Cod1: Integer;
begin
ClientDataSetAgenda.Last;
Cod := ClientDataSetAgenda.FieldByName('idAgendamento').AsInteger + 1;
Cod1 := ClientDataSetAgenda.FieldByName('idAgendamento').AsInteger + 1;
ClientDataSetAgenda.Append;
EdCodigo.Text := IntToStr(Cod);
EdAgenda.Text := IntToStr(Cod1);
EdCodigoConta.Text := IntToStr(0);
PageControl1.TabIndex := 1;
end;
NO BOTÃO SALVAR:
procedure TFrmAgenda.Image8Click(Sender: TObject);
begin
ClientDataSetAgenda.Post;
ClientDataSetAgenda.ApplyUpdates(0);
ShowMessage('Registro Salvo Com Sucesso!');
ClientDataSetConta.Insert;
ClientDataSetConta.Post;
ClientDataSetConta.ApplyUpdates(0);
ShowMessage('Conta Gerada com sucesso!');
PageControl1.TabIndex := 0;
Tabela.Visible := True;
end;
Até a linha: ShowMessage('Registro Salvo Com Sucesso!'); o sistema executa normalmente, ou seja, ele salva o agendamento mas não gera a conta...
PARA CONEXÃO COM O BANCO DE DADOS EU UTILIZEI UM DATA MODULE COM OS SEGUINTES COMPONENTES:
--> SQLConnection
--> SQLDataSet (um para cada tabela do meu banco de dados)
NO FORM DE AGENDA:
--> ClientDataSet
--> DataSetProvider
--> DataSource
OS MEUS EDIT's eu adiciono assim: Clico 2 vezes no ClientDataSet e seleciono os componentes e arrasto para o form...
PQ que será que está dando o erro: roject Sistema.exe raised exception class EDatabaseError with message 'Field 'idAgendamento' must have a value', sendo que para cadastrar o agendamento de horário, os clientes, funcionários etc... está funcionando certinho e eu utilizo a mesma forma, pq 1 está dando erro e os outros não
Andre Luiz
Curtir tópico
+ 0Posts
07/05/2014
Ricardo
Mas assim deixa ver se entendi, resumindo a tabela agendamento vai receber o id da tabela dos serviços. Se foi é isso mesmo, essa mensagem aparece porque não está passando o valor do id da tabela serviços para a agendamento.
Isso acontece porque primeiro você tem que salvar os dados na tabela serviços e depois vc pega o id já salvo e passa para a tabela de agendamento aí salva.
Resumindo, é preciso existir um id salvo na tabela de serviços antes que ele seja salvo na tabela de agendamento.
Não sei se consegui explicar direito, mas qualquer coisa posta aqui novamente.
Gostei + 0
08/05/2014
Felippe Tadeu
O erro está no seguinte trecho:
NO BOTÃO SALVAR:
ClientDataSetConta.Insert; ClientDataSetConta.Post;
Você está mandando o ClientDataSet entrar em modo de inserção e logo em seguida vc está mandando ele postar os dados, mas não existe nenhum pois o ClientDataSet acabou de entrar em modo de inserção.
Peço que você explique essa parte do teu código pois aqui não vejo onde vc está passando as informações pro cds
NO BOTÃO SALVAR: procedure TFrmAgenda.Image8Click(Sender: TObject); begin ClientDataSetAgenda.Post; ClientDataSetAgenda.ApplyUpdates(0); end;
Se eu não estiver errado um cds pode assumir apenas um estado por vez (ajuda a perceber isso quando vc usa um dbnavbar), então não existe a necessidade de você usar um ApplyUpdates(0) logo após um Post ou até vice-versa.
E também não é necessariamente o que o Ricardo Cardoso disse.
O erro que fez dar a mensagem foi o que eu disse, agora um outro possível erro que pode dar com o teu código é o que Ricardo disse.
Existe a possibilidade de não existir nenhum outro código a ser na tabela e não sei se nesse caso vc usando cdsField.AsInteger poderia trazer nulo ou 0, seria interessante fazer um tratamento aí também, como por exemplo
if ClientDataSetAgenda.IsEmpty then
begin
Cod := 1;
Cod1 := Cod;
end
else
begin
Cod := ClientDataSetAgenda.FieldByName('idAgendamento').AsInteger + 1;
Cod1 := Cod;
end;
Gostei + 0
09/05/2014
Andre Luiz
Gostei + 0
09/05/2014
Felippe Tadeu
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)