• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

hyperbolic

[Resolvido] Access - Datas e horas

12 mensagens neste tópico

Estou com um problema com o Access 2003. Preciso de fazer uma base de dados de motoristas e serviços de transporte. O problema é o seguinte: é necessário validar para que um motorista, SÓ faça um serviço no mesmo período de tempo. Se alguém tiver uma dica que dê um empurrãozinho, agradecia muito. Não sei se me fiz explicar bem.

Exemplo: O motorista A faz um serviço hoje das 11h às 13h, no formulário onde entro os serviços, este motorista não deverá "aparecer" na combo box, SE as horas coincidirem, não sei pra onde me hei-de virar...

Obrigado,

H.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

este motorista não deverá "aparecer" na combo box, SE as horas coincidirem

Olá,

Explica lá melhor isto!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o que ele quer, é uma condição associada ao a combobox que ele quer, são instruções diferentes uma que faça a comparação, e outra que meta os registos na combo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Talvez tenha que mudar a estrutura disto, não sei, mas o que tenho é um formulário para os serviços, onde descrevo o serviço, o condutor, viatura, a localidade de destino, o dia do serviço, hora de inicio e hora do final. Neste form tenho 2 combo boxes com o nome do condutor e a viatura respectivamente. O que pretendo é não deixar o mesmo condutor/viatura realizar um serviço no mesmo dia, entre a hora de inicio e a de fim dos serviços anteriormente gravados.

Espero ter sido claro...

Obrigado jpaulino pela rápida resposta!

H.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim, o que tens de fazer de fazer é ir buscar a informação pretendida ao respectivo campo, fazer a condiçaõ, e executar um codigo diferente dependendo do resultado da condição...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu inseres a data/hora do serviço manualmente e o que podes fazer, no botão gravar (caso tenhas) é verificar se já existe na base de dados alguma coisa nesse horário (com o DLOOKUP por exemplo) e caso exista não deixar gravar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigadíssimo pelas vossas rápidas e úteis dicas.

Vou tentar e ver o que consigo fazer...

um abraço,

H.

EDIT:

PS: será que devia tentar fazer isto noutra linguagem, tipo VB?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

imaginemos o condutor A faz um serviço das 9h às 12h. no mesmo dia vamos tentar atribuir outro serviço ao condutor A das 10h às 11h.

A Hora_Inicio do primeiro serviço seria 9:00, a Hora_Fim seria 12:00.

O que tinha que verificar era se a hora do segundo serviço pertenceria a este intervalo (>= Hora_Inicio e <= Hora_Fim), se assim fosse o programa avisava.

A minha questão é a seguinte: qual a forma mais eficaz de fazer isto? consigo fazer uma consulta que vá buscar os dados às textboxes do formulário em questão, de modo a usar este critério? O DLookUp só "liga" valores entre tabelas...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O DLookUp só "liga" valores entre tabelas...

O Dlookup pesquisa em tabelas.

Estás a usar VBA ? Mostra lá o que tentaste.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O que tenho não é grande coisa, fiz um botão "Validar" que deverá checkar o dia e a hora se se encontra nalgum intervalo já registado:

Private Sub cmdvalidar_Click()

Dim tempInicio, tempFim As Date
Dim vInicio, vFim As Date
Dim vDia As Date
Dim vCondutor As String

tempInicio = "11:00:00"
tempFim = "13:00:00"

vInicio = txtHoraInicio.Value
vFim = txtHoraFim.Value
vDia = txtData.Value


vCondutor = DLookup("[Nome]", "tblCondutor", "[iD_Condutor] =" & Me.txtCondutor)
MsgBox ("Condutor: " & vCondutor & "  Dia: " & vDia & "  Inicio: " & vInicio & "   Fim: " & vFim)

If vInicio >= tempInicio Then
    MsgBox ("vInicio >= tempInicio")
    If vInicio <= tempFim Then
        MsgBox ("vInicio <= tempFim")
        MsgBox ("Inicio do serviço: " & vInicio & " coincide com outro serviço!")
    End If
End If

If vFim >= tempInicio Then
    MsgBox ("vFim >= tempInicio")
    If vFim <= tempFim Then
        MsgBox ("vFim <= tempFim")
        MsgBox ("Fim do serviço: " & vFim & " coincide com outro serviço!")
    End If
End If

End Sub

as variáveis vInicio e vFim vão buscar os dados á textbox do formulario, as tempInicio e tempFim são só pra simular as horas dos registos já introduzidos...O primeiro IF não funciona muito bem, não sei porquê, o segundo funciona 100%.

Obrigado,

H.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Vi o teu exemplo mas tive de criar um novo para testar. Fiz mais ou menos isto e, parece-me que está a funcionar:

If Not IsNull(DLookup("id", "servicos", "(data = #11/19/2008#) AND ((horainicio Between #9:00# AND #12:00#) OR (horafim Between #9:00# AND #12:00#))")) Then
    Debug.Print "Atenção: já existem serviços marcados"
Else
    Debug.Print "Sem serviços marcados"
End If

Basicamente vou buscar qualquer campo, na tabela serviço e tenho depois um filtro que verifica a data e se a horainicial está dentro de um periodo (inicio e fim) ou se a hora final está dentro desse mesmo inicio e fim.

Acho que está simples e é só para teres a ideia. Tenta adaptar ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Por falta de informação do utilizador e por existirem respostas aceitáveis à pergunta efectuada, esta questão foi marcada como resolvida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora