Wybacz poniższy kod. Jestem nowicjuszem VBA. Po kliknięciu przycisku formularza chcę poinformować klientów, że muszą dokonać innego wyboru biblioteki, jeśli wybrany element zostanie sprawdzony. Stwierdzam, że coś jest wyewidencjonowane, jeśli „Data zameldowania” ostatniej daty w tabeli „1Transaction” ma wartość NULL. Uwaga: przy każdym zameldowaniu i wymeldowaniu w tabeli 1Transaction tworzony jest nowy rekord, a każdy rekord (niezależnie od tego, czy jest zameldowany czy wymeldowany) będzie zawierał informacje o dacie wymeldowania. Więc logika, weź najnowszą datę dzierżawy (książki), a jeśli nie ma daty powrotu, to nadal jest sprawdzana. Poniższy kod służy do tworzenia odniesień i zwracania okna komunikatu w języku VBA, ale utknąłem. Rozumiem logicznie, czego potrzebuję, ale wiem, że moja składnia VBA jest bardzo zła. Dzięki.
Private Sub Check_Out()
If [1Transactions].[Asset].Value = Me.Lease_Num
And DMax([Tables]![1Transactions].[Check Out Date])
And [Tables]![1Transactions].[Check In Date] = NULL
Then MsgBox "The requested documents are currently checked out"
End If
DoCmd.OpenForm "Check In"
End Sub
Uwaga:
- 1 Transakcje = Tabela zawierająca wszystkie dane wejściowe / wyjściowe
- Me.Lease_Num = wartość pobrana z pola kombi, które użytkownik wypełnia, aby podać „numer najmu” (kod książki), który jest zainteresowany wypisaniem.
Odpowiedzi:
1 dla odpowiedzi № 1Okay - zamiast próbować modyfikować każdy wiersz kodu, myślę, że lepiej jest użyć zapytania o parametry, aby po prostu sprawdzić, czy element jest obecnie niedostępny
Najpierw utwórz zapytanie przy użyciu tabeli transakcji - zmodyfikuj kod SQL poniżej i zapisz jako „qdfLease"
PARAMETERS [What Lease Num] Text ( 255 ); SELECT TOP 1
[1Transactions].Asset, [1Transactions].[Check Out Date],
[1Transactions].[Check In Date] FROM 1Transactions WHERE
([1Transactions].Asset = [What Lease Num]) And ([1Transactions].[Check
In Date] Is Null) ORDER BY [1Transactions].[Check Out Date] DESC;
Zmodyfikuj kod w swoim subwooferze, aby:
Dim qdf As DAO.QueryDef
Dim rs As DAO.Recordset
Dim strLeaseNum As String
strLeaseNum = nz(Me.Lease_Num,"")
Set qdfLease = CurrentDb.QueryDefs("qdfLease")
qdfLease.Parameters("What Lease Num") = strLeaseNum
Set rs = qdfLease.OpenRecordset(dbOpenDynaset, dbReadOnly)
If rs.EOF Then
" Item is Checked In
Else
" Item is Checked Out
End If
rs.Close
Set rs = Nothing
1 dla odpowiedzi nr 2
Ty masz [1Transactions].[Check Out Date].Value = Me.Lease_Num
Czy z tym chcesz porównać wartość leasingu? Wygląda na to, że w [1Transactions] powinna to być inna nazwa pola
Zmieniłbym to
[Tables]![1Transactions].[Check In Date] = NULL
do tego
IsNull([Tables]![1Transactions].[Check In Date])
Co próbujesz tutaj porównać?
DMax([Tables]![1Transactions].[Check Out Date])