Ir para conteúdo
Fórum Script Brasil
  • 0

Chave Primaria


edsouzza

Pergunta

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

Desde já agradecido.

Editado por edsouzza
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Pessoal RESOLVIDO achei o erro clássico, estava usando apenas um clientdataset para fazer duas coisas distintas, cadastrar e pesquisar a solução foi apenas criar um clientdataset para as consultas e Zefiniii.

Editado por edsouzza
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...