/ / Справочна таблица и текстово поле за формуляр MS Access VBA - vba, access-vba, ms-access-2010, достъп

Справочна таблица и текстово поле за формуляр MS Access VBA - vba, access-vba, ms-access-2010, достъп

Извинете кода по-долу. Аз съм новак на 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])