Alexandre Neves 12/9/2012, 14:50
Boa tarde, field
Nomeie normalizadamente os controlos. Declare as variáveis.
Elimine a consulta e substitua o código no módulo por este
Option Compare Database
Option Explicit
Function ListaCarros(NomeControlo As String)
Dim strNaoListar
strNaoListar = ""
Select Case NomeControlo
Case "Carro1"
If carro2 <> "" Then strNaoListar = "'" & carro2 & "'"
If carro3 <> "" Then strNaoListar = strNaoListar & ",'" & carro3 & "'"
If strNaoListar <> "" Then strNaoListar = " WHERE Veiculo NOT IN (" & strNaoListar & ")"
Case "Carro2"
If carro1 <> "" Then strNaoListar = "'" & carro1 & "'"
If carro3 <> "" Then strNaoListar = strNaoListar & ",'" & carro3 & "'"
If strNaoListar <> "" Then strNaoListar = " WHERE Veiculo NOT IN (" & strNaoListar & ")"
Case "Carro3"
If carro1 <> "" Then strNaoListar = "'" & carro1 & "'"
If carro2 <> "" Then strNaoListar = strNaoListar & ",'" & carro2 & "'"
If strNaoListar <> "" Then strNaoListar = " WHERE Veiculo NOT IN (" & strNaoListar & ")"
End Select
Me(NomeControlo).RowSource = "SELECT Veiculo FROM Veiculo" & strNaoListar & ";"
End Function
Private Sub carro1_AfterUpdate()
Dim caminho As String
If Me.carro1 = Me.carro2 Or Me.carro1 = Me.carro3 Then
MsgBox "Esse carro já foi escolhido, não escolha carros repetidos", vbCritical
Me.img1.Picture = ""
Me.carro1 = Null
Else
caminho = CurrentProject.Path & "\Img\"
Me.img1.Picture = caminho & Me.carro1 & ".bmp"
End If
End Sub
Private Sub carro1_Enter()
Call ListaCarros("Carro1")
End Sub
Private Sub carro2_AfterUpdate()
Dim caminho As String
If Me.carro2 = Me.carro1 Or Me.carro2 = Me.carro3 Then
MsgBox "Esse carro já foi escolhido, não escolha carros repetidos", vbCritical
Me.img2.Picture = ""
Me.carro2 = Null
Else
caminho = CurrentProject.Path & "\Img\"
Me.img2.Picture = caminho & Me.carro2 & ".bmp"
End If
End Sub
Private Sub carro2_Enter()
Call ListaCarros("Carro2")
End Sub
Private Sub carro3_AfterUpdate()
Dim caminho As String
If Me.carro3 = Me.carro1 Or Me.carro3 = Me.carro2 Then
MsgBox "Esse carro já foi escolhido, não escolha carros repetidos", vbCritical
Me.img3.Picture = ""
Me.carro3 = Null
Else
caminho = CurrentProject.Path & "\Img\"
Me.img3.Picture = caminho & Me.carro3 & ".bmp"
End If
End Sub
Private Sub carro3_Enter()
Call ListaCarros("Carro3")
End Sub
Private Sub Comando14_Click()
Dim strCampos As String, strCarros As String
If IsNull(cliente) Then
MsgBox "Tem de escolher o cliente."
Exit Sub
ElseIf IsNull(carro1) And IsNull(carro2) And IsNull(carro3) Then
MsgBox "Tem de escolher algum carro."
Exit Sub
Else
strCampos = "": strCarros = ""
If Not IsNull(carro1) Then
strCampos = strCampos & ",carro1": strCarros = strCarros & ",'" & carro1 & "'"
End If
If Not IsNull(carro2) Then
strCampos = strCampos & ",carro2": strCarros = strCarros & ",'" & carro2 & "'"
End If
If Not IsNull(carro3) Then
strCampos = strCampos & ",carro3": strCarros = strCarros & ",'" & carro3 & "'"
End If
strCampos = Mid(strCampos, 2): strCarros = Mid(strCarros, 2)
CurrentDb.Execute "INSERT INTO Reservas (Cliente," & strCampos & ") VALUES ('" & cliente & "'," & strCarros & ");"
MsgBox "Carros reservados com sucesso"
Me.cliente = Null: Me.carro1 = Null: Me.carro2 = Null: Me.carro3 = Null
Me.img1.Picture = "": Me.img2.Picture = "": Me.img3.Picture = ""
End If
End Sub
veja se as caixas de combinação, funcionam como pretende. coloquei para que cada uma não seleccione nenhum dos carros já seleccionados