Autor Tópico: Duvida OnValidate  (Lida 621 vezes)

Admin

  • Novato
  • *
  • Mensagens: 11
    • Email
Duvida OnValidate
« Online: Maio 20, 2015, 10:26:55 pm »
Boa noite galera tenho um problema, revirei os tópicos porem nenhum pode me ajudar
minha duvida é a seguinte

tenho um bd

agenda
campo_hora_ini
campo_hora_fin
campo_data_ini
campo_data_fin
campo_sala

eu preciso que ao inserir um novo compromisso antes teria que verificar se ja não existe um evento no mesmo horario e na mesma sala caso tenha precisa mostra que tem e caso não tenha ele agendasse normalmente

lembrando que se o evento ocorre por exemplo
data inicial 21/05/2015 data final 21/05/2015
hora inicial 10:00 hora final 11:00
sala 01

se alguem tentar incluir um evento na mesma sala porem das 11:00 ao 12:00 a sala tem que estar disponivel

galera se puder me ajudar agradeço um grande abraço


Haroldo

  • Expert
  • *****
  • Mensagens: 6274
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Duvida OnValidate
« Responder #1 Online: Maio 20, 2015, 10:29:23 pm »
sua questão é de como usar no sc, ou de coo fazer a pesquisa para saber se ja existe?

Admin

  • Novato
  • *
  • Mensagens: 11
    • Email
Re:Duvida OnValidate
« Responder #2 Online: Maio 20, 2015, 10:31:41 pm »
Como fazer este script
obrigado pela resposta

Haroldo

  • Expert
  • *****
  • Mensagens: 6274
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Duvida OnValidate
« Responder #3 Online: Maio 20, 2015, 10:34:17 pm »
qual instrução sql vc usaria para fazer a pesquisa no banco para saber se já existe o registro ou não?

Admin

  • Novato
  • *
  • Mensagens: 11
    • Email
Re:Duvida OnValidate
« Responder #4 Online: Maio 20, 2015, 10:37:35 pm »
eu daria um SELEC pore exemplo
não sei se esta correto
SELECT campo_hora_ini,
campo_hora_fin,
campo_data_ini,
campo_data_fin,
campo_sala
FROM agenda

Admin

  • Novato
  • *
  • Mensagens: 11
    • Email
Re:Duvida OnValidate
« Responder #5 Online: Maio 20, 2015, 10:38:53 pm »
o Campo chave unica resolveria pra mim porem como o proprio nome diz unica eu não vou conseguir inserir em horarios diferente na mesma sala caso ela ja tenho sido escolhida

Haroldo

  • Expert
  • *****
  • Mensagens: 6274
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Duvida OnValidate
« Responder #6 Online: Maio 21, 2015, 08:34:37 am »
Entendi, a sua duvida é como montar o sql.
Disponha a estrutura da sua tabela aqui para que possamos lhe ajudar.

Admin

  • Novato
  • *
  • Mensagens: 11
    • Email
Re:Duvida OnValidate
« Responder #7 Online: Maio 21, 2015, 09:22:38 am »
Bom dia Haroldo

Minha tabela esta assim

agenda
campo_id int pk
campo_hora_ini = time
campo_hora_fin = time
campo_data_ini = date
campo_data_fin = date
campo_sala = int

acredito que não estou conseguindo achar a logica
não necessita dar diretamente a resposta mas se puder me ajudar onde acha-la ou o que estudar eu ja agradeceria

Haroldo

  • Expert
  • *****
  • Mensagens: 6274
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Duvida OnValidate
« Responder #8 Online: Maio 21, 2015, 09:23:16 am »
e os indices?

Admin

  • Novato
  • *
  • Mensagens: 11
    • Email
Re:Duvida OnValidate
« Responder #9 Online: Maio 21, 2015, 09:28:34 am »
indice esta no campo sala

michel

  • Novato
  • *
  • Mensagens: 33
Re:Duvida OnValidate
« Responder #10 Online: Maio 22, 2015, 09:42:03 am »
Formulei a query abaixo. Espero que lhe ajude. Montei essa query no banco Oracle. Os comandos podem variar conforme o banco, mas a lógica é a mesma:

select *
  from (
        /* Essa SubQuery serve apenas para simular a sua tabela*/
        select 1 agenda
             , 1 campo_id
             , to_date('08:00','hh24:mi') campo_hora_ini
             , to_date('11:00','hh24:mi') campo_hora_fin
             , to_date('22/05/2015','dd/mm/rrrr') campo_data_ini
             , to_date('22/05/2015','dd/mm/rrrr') campo_data_fin
             , '01' campo_sala
        from dual
      )
 where to_date('22/05/2015','dd/mm/rrrr') between campo_data_ini and campo_data_fin /* verifica se há registro para essa data */
   and (
        (
             to_date('14:00','hh24:mi') > campo_hora_ini  /* comparando se a data inicial do agendamento é maior que algum outro campo_hora_ini existente */
         and to_date('14:00','hh24:mi') < campo_hora_fin  /* comparando se a data inicial do agendamento é menor que algum outro campo_hora_fin existente */
        )
        or
        (
             to_date('16:00','hh24:mi') > campo_hora_ini  /* comparando se a data final do agendamento é maior que algum outro campo_hora_ini existente */
         and to_date('16:00','hh24:mi') < campo_hora_fin  /* comparando se a data final do agendamento é maior que algum outro campo_hora_ini existente */
        )
        or
        (
             campo_hora_ini between to_date('14:00','hh24:mi') and to_date('16:00','hh24:mi')  /* comparando se existe algum campo_hora_ini dentro do período de agendamento informado pelo usuário */
         and campo_hora_fin between to_date('14:00','hh24:mi') and to_date('16:00','hh24:mi')  /* comparando se existe algum campo_hora_fin dentro do período de agendamento informado pelo usuário */
        )
       )




Faça testes trocando os valores das horas / datas. Do jeito que está acima, a query não retornará dados e isso significa que não existe compromissos existentes para esse período, permitindo que seja agendado esse horário.

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Duvida OnValidate
« Responder #11 Online: Junho 01, 2015, 03:50:05 pm »
Considere alterar o tipo dos teus campos para datetime.
Se fossem tipo datetime, bastaria fazer o seguinte SQL para determinar se há algum agendamento dando choque:
SELECT count(*)
FROM Tabela
WHERE CampoDataDoFormulario BETWEEN Campo_data_ini AND Campo_data_fim
AND CampoSalaDoFormulario = campo_sala

[]s
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br