参考表和表单文本框MS Access VBA

时间:2016-06-06 22:34:08

标签: vba access-vba ms-access-2010 access

请原谅下面的代码。我是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

注意:

  • 1Transactions =包含所有签入/签出数据的表
  • Me.Lease_Num =从用户填写的组合框中提取的值,以提供"租约号码" (书籍代码)他们有兴趣退房。

2 个答案:

答案 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