/ / Tabela referencyjna i pole tekstowe formularza MS Access VBA - vba, access-vba, ms-access-2010, access

Tabela referencyjna i pole tekstowe formularza MS Access VBA - vba, access-vba, ms-access-2010, dostęp

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 № 1

Okay - 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])