Извинете кода по-долу. Аз съм новак на VBA. Очаквам, след като щракна върху бутон за формуляри, да информирам клиентите, че трябва да направят друг избор на библиотека, ако елементът, който са избрали, е проверен. Определям, че нещо се проверява, ако "Датата за влизане" за последната дата в таблицата "1Transaction" е NULL. Забележка за всяко регистриране и напускане, в таблицата 1Transaction се създава нов запис, като всеки запис (независимо дали се проверява или излиза) ще има информация за дата на проверка. Така че логиката, вземете най-скорошната дата за номера на лизинг (книга) и ако няма дата на връщане, тогава тя все още се проверява. Кодът по-долу е предназначен да направи препратките и да върне кутия за съобщения в VBA, но аз съм заклещен. Аз логично разбирам какво изисквам, но знам, че моят VBA синтаксис е много изключен. Благодаря.
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
Забележка:
- 1Transactions = Таблица, съдържаща всички данни за влизане / излизане
- Me.Lease_Num = стойност, изтеглена от комбинирано поле, което потребителят попълва, за да предостави "номер на лизинг" (код на книга), който те интересуват.
Отговори:
1 за отговор № 1Добре - вместо да се опитвате да променяте всеки ред от кода си, мисля, че е по-добре да използвате заявка за параметри, за да проверите дали елемента вече не е в момента
Първо създайте заявка, използвайки таблицата за транзакции - променете SQL по-долу и го запазете като "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;
Променете кода в подпрограмата си на:
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 за отговор № 2
Ти имаш [1Transactions].[Check Out Date].Value = Me.Lease_Num
Това ли искате да сравните с lease_num? Изглежда, че трябва да е различно име на поле в [1Transactions]
Бих променил това
[Tables]![1Transactions].[Check In Date] = NULL
до това
IsNull([Tables]![1Transactions].[Check In Date])
Какво се опитвате да сравните тук
DMax([Tables]![1Transactions].[Check Out Date])