请原谅下面的代码。我是VBA新手。我希望点击一个表单按钮,告知客户如果他们选择的项目被签出,他们必须选择另一个库。如果"签入日期"我确定检查了一些内容。对于" 1Transaction"中的最近日期table为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
答案 0 :(得分:1)
您有[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])
答案 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