Tenho um procedimento que incrementa um NUM_AGENDAMENTO assim:
With DM_Pesq.qry_Cod do begin
Close;
SQL.Clear;
SQL.Add('select max(num_agendamento) from controle_agendamento');
Open;
if not IsEmpty then begin
proxNum := DM_Pesq.qry_Cod.Fields[0].AsInteger + 1;
end;
end;
with dm_DadosSegundo.cds_ControleAgendamento do
begin
Append;
FieldByName('num_agendamento').AsInteger := proxnum;
ApplyUpdates(0);
end;
...
Esse código encontra-se em uma aba de um PagControl onde ele grava o registro e incrementa o campo. Até aqui tudo bem ao abrir o formulário tudo grava sem problemas pois já abre na aba de agendamento, ocorre que se eu fizer 10, 20, 30 agendamentos não acontece nenhum problema, mas se eu clicar em alguma outra aba que são consultas e voltar ao agendamento e tentar agendar ocorre o seguinte erro:
'O campo NUM_AGENDAMENTO necessita de um valor'.
O estranho é que só ocorre quando eu volto de uma outra aba. Alguém pode me ajudar nisso?
Pessoal, descobri que as outras abas de consulta é que contém este campo e que ao sair da consulta e voltar para o cadastro estou utilizando o mesmo cds_historico a consulta é esta:
_Sql := 'select controle_agendamento.num_agendamento,historico_agendamento.id_historicoagendamento, historico_agendamento.data_agendada, '+
'historico_agendamento.hora_agendada, historico_agendamento.valor_unitario, historico_agendamento.valor_total,'+
'historico_agendamento.codigomovimento, historico_agendamento.datafechamento, clientes.cli_nome, '+
'funcionarios.func_nome, servicos.serv_nome, historico_agendamento.id_cliente, historico_agendamento.id_servico, '+
'historico_agendamento.id_funcionario, historico_agendamento.id_formapagto, historico_agendamento.id_agendamento, '+
'historico_agendamento.quantidade, historico_agendamento.datacad, historico_agendamento.mesano FROM '+
'historico_agendamento inner join clientes on (historico_agendamento.id_cliente = clientes.cli_id) '+
'inner join controle_agendamento on (historico_agendamento.id_agendamento = controle_agendamento.num_agendamento) '+
'inner join servicos on (historico_agendamento.id_servico = servicos.serv_id) inner join funcionarios '+
'on (historico_agendamento.id_funcionario = funcionarios.func_id) ORDER BY controle_agendamento.num_agendamento';
A PROCEDURE DE GRAVAÇÃO É ESTA:
procedure T_frmAgenda.btnGravarAgendamentoClick(Sender: TObject);
var
mes_ano : string;
DataDoDia : TDate;
begin
with dm_DadosSegundo.cds_AbreAgendamento do
begin
First;
while not Eof do
begin
With DM_Pesq.qry_Cod do begin
Close;
SQL.Clear;
SQL.Add('select max(id_HistoricoAgendamento) from Historico_Agendamento');
Open;
if not IsEmpty then begin
proxNum := DM_Pesq.qry_Cod.Fields[0].AsInteger + 1;
end;
end;
//ENVIADO O PRODUTO PARA A TABELA DE HISTÓRICO
with dm_DadosSegundo.cds_HistoricoAgendamento do
begin
Append;
FieldByName('id_HistoricoAgendamento').AsInteger := proxNum;
FieldByName('id_cliente').AsInteger := dm_DadosSegundo.cds_ControleAgendamento.fieldbyname('id_cliente').AsInteger;
FieldByName('id_funcionario').AsInteger := dm_DadosSegundo.cds_ControleAgendamento.fieldbyname('id_funcionario').AsInteger;
FieldByName('id_servico').AsInteger := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('id_servico').AsInteger;
FieldByName('id_formapagto').AsInteger := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('id_formapagto').AsInteger;
FieldByName('id_agendamento').AsInteger := dm_DadosSegundo.cds_ControleAgendamento.fieldbyname('num_agendamento').AsInteger;
FieldByName('Data_Agendada').AsDateTime := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('Data_Agendada').AsDateTime;
FieldByName('Hora_Agendada').AsString := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('Hora_Agendada').AsString;
FieldByName('Valor_unitario').AsFloat := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('valor_total').AsFloat;
FieldByName('quantidade').AsInteger := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('quantidade').AsInteger;
FieldByName('Valor_Total').AsFloat := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('valor_total').AsFloat * dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('quantidade').AsInteger;
FieldByName('codigomovimento').AsString := 'AB';
FieldByName('datacad').AsDateTime := Date;
DataDoDia := FieldByName('datacad').AsDateTime;
mes_ano := IntToStr(MonthOf(DataDoDia)) + '/' + IntToStr(YearOf(DataDoDia));
FieldByName('MesAno').AsString := mes_ano;
ApplyUpdates(0);
end;
Next;
end;
dm_DadosSegundo.cds_ControleAgendamento.Edit;
dm_DadosSegundo.cds_ControleAgendamento.FieldByName('valor_total').AsFloat:= StrToFloat(db_TotalGeral.Text);
dm_DadosSegundo.cds_ControleAgendamento.ApplyUpdates(0);
permitido := False;
LimparTabelaAbreAgendamentos;
Abrir_FecharTabelas;
edt_QuantidadeDeServicos.Clear;
edt_PrecoServico.Clear;
edt_Pesquisa.Clear;
edt_PrecoDesconto.Clear;
edt_PrecoLiquido.Clear;
edt_DiaAgendado.Clear;
edt_HoraAgendada.Clear;
pnl_ItensAgendamento.Enabled := False;
pnl_DadosAgendamento.Enabled := True;
dbCLI_NOME.KeyValue := -1;
dbFUNC_NOME.KeyValue := -1;
lbl32.Caption:= 'AGENDAMENTO: '+IntToStr(dm_DadosSegundo.cds_ControleAgendamento.RecordCount + 1);
pnl_ItensAgendamento.Visible:= False;
btnGravarAgendamento.Enabled:= False;
btnCancelarGravacaoDoAgendamento.Enabled:= False;
end;
end;
Ou seja quando vou gravar o historico a sql utilizada esta sendo a que vem da consulta de outra aba tentei isso:
with dm_DadosSegundo.cds_HistoricoAgendamento do
begin
Close;
CommandText:= ('Select * from Historico_Agendamento');
Open;
end;
mas como tenho TFieds que usam a consulta o sistema me pede esses campos.
Resumindo: Preciso voltar para aba de cadastro fazendo com que o sistema não use a consulta para cadastrar, ao invés de me pedir os campos da tabela historico o cadastro esta me pedindo valores para os campos da consulta sendo que alguns nem fazem parte da tabela historico pois usei o inner join para a consulta
Pergunta
edsouzza
Tenho um procedimento que incrementa um NUM_AGENDAMENTO assim:
Esse código encontra-se em uma aba de um PagControl onde ele grava o registro e incrementa o campo. Até aqui tudo bem ao abrir o formulário tudo grava sem problemas pois já abre na aba de agendamento, ocorre que se eu fizer 10, 20, 30 agendamentos não acontece nenhum problema, mas se eu clicar em alguma outra aba que são consultas e voltar ao agendamento e tentar agendar ocorre o seguinte erro: 'O campo NUM_AGENDAMENTO necessita de um valor'. O estranho é que só ocorre quando eu volto de uma outra aba. Alguém pode me ajudar nisso? Pessoal, descobri que as outras abas de consulta é que contém este campo e que ao sair da consulta e voltar para o cadastro estou utilizando o mesmo cds_historico a consulta é esta: _Sql := 'select controle_agendamento.num_agendamento,historico_agendamento.id_historicoagendamento, historico_agendamento.data_agendada, '+ 'historico_agendamento.hora_agendada, historico_agendamento.valor_unitario, historico_agendamento.valor_total,'+ 'historico_agendamento.codigomovimento, historico_agendamento.datafechamento, clientes.cli_nome, '+ 'funcionarios.func_nome, servicos.serv_nome, historico_agendamento.id_cliente, historico_agendamento.id_servico, '+ 'historico_agendamento.id_funcionario, historico_agendamento.id_formapagto, historico_agendamento.id_agendamento, '+ 'historico_agendamento.quantidade, historico_agendamento.datacad, historico_agendamento.mesano FROM '+ 'historico_agendamento inner join clientes on (historico_agendamento.id_cliente = clientes.cli_id) '+ 'inner join controle_agendamento on (historico_agendamento.id_agendamento = controle_agendamento.num_agendamento) '+ 'inner join servicos on (historico_agendamento.id_servico = servicos.serv_id) inner join funcionarios '+ 'on (historico_agendamento.id_funcionario = funcionarios.func_id) ORDER BY controle_agendamento.num_agendamento'; A PROCEDURE DE GRAVAÇÃO É ESTA:Ou seja quando vou gravar o historico a sql utilizada esta sendo a que vem da consulta de outra aba tentei isso:
with dm_DadosSegundo.cds_HistoricoAgendamento do
begin
Close;
CommandText:= ('Select * from Historico_Agendamento');
Open;
end;
mas como tenho TFieds que usam a consulta o sistema me pede esses campos.
Resumindo: Preciso voltar para aba de cadastro fazendo com que o sistema não use a consulta para cadastrar, ao invés de me pedir os campos da tabela historico o cadastro esta me pedindo valores para os campos da consulta sendo que alguns nem fazem parte da tabela historico pois usei o inner join para a consulta
Desde já agradecido.
Editado por edsouzzaLink para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.