Table 和基于不同 table 的表格 - 查看 table 中是否存在共同记录并在表格中插入 "yes" 或 "no" 值
Table and form based off a different table - see if a common record exists in the table and insert a "yes" or "no" value in the form
我有一个访问数据库,我的团队使用它来跟踪项目。我们将其用作 VCB。
在主窗体(项目)上,我们查看它并更新项目的窗体 - 进而更新链接到该窗体的 table。
但是,我们还有一个单独的 table(评论),用于存储与项目相关的评论。两个 table 的主键都是 ProjectID。
“项目”表单上只有 1 个项目条目,但评论 table 上的评论可以有 0 到多个。
我想要实现的是让项目表单(我们的 VCB)查看注释 table 并查看 table 中是否有具有相同 ProjectID 的记录 - 如果有将 "Yes" 值插入项目表单上的文本框中,但如果没有,则插入 "NO"。
它只是一个简单的视觉辅助工具,用于查看 VCB 上的项目是否存在评论(我们以单独的形式处理评论输入和查看)
我不知道该走哪条路。我尝试了一些东西并陷入了循环。感谢任何帮助
Dim strSQL As String
Dim rs As Dao.Recordset
Dim db As Dao.Database
strSQL = "SELECT * FROM COMMENTS WHERE [PROJECTID] = " & Me.PROJECTID & ""
Set db = CurrentDb
Set rs = db.OpenRecordset("COMMENTS")
rs.MoveFirst
Do Until rs.EOF = True
Set rs = db.OpenRecordset(strSQL)
If rs.RecordCount = 0 Then
Me.CommentTxtBox.SetFocus
Me.CommentTxtBox.Text = "NO"
Else
Me.CommentTxtBox.SetFocus
Me.CommentTxtBox.Text = "YES"
End If
rs.MoveLast
Loop
rs.Close
Set rs = Nothing
我在该字段中为每个条目都设置了一个 NO 并且它出错了,因为 ProjectID 不在评论中 table(它可能不在)所以它说没有找到记录。
DCount()
可以使您的代码更简单。
Dim lngComments As Long
Dim strComments As String
lngComments = DCount("*", "COMMENTS", "[PROJECTID] = " & Me.PROJECTID)
If lngComments > 0 Then
strComments = "YES"
Else
strComments = "NO"
End If
Me.CommentTxtBox.Value = strComments
注意,通过将值分配给文本框的 .Value
属性(而不是其 .Text
属性),您不必为 SetFocus
.
我认为这是您当前方法的更简单版本。但是我不确定这是否是最好的方法。也许您可以通过将文本框的 Control Source 属性 设置为使用 IIf
来评估 DCount
:[=18 的表达式来获得所需的内容=]
=IIf(DCount("*", "COMMENTS", "[PROJECTID] = " & [PROJECTID]) > 0, "YES", "NO")
我有一个访问数据库,我的团队使用它来跟踪项目。我们将其用作 VCB。
在主窗体(项目)上,我们查看它并更新项目的窗体 - 进而更新链接到该窗体的 table。
但是,我们还有一个单独的 table(评论),用于存储与项目相关的评论。两个 table 的主键都是 ProjectID。
“项目”表单上只有 1 个项目条目,但评论 table 上的评论可以有 0 到多个。
我想要实现的是让项目表单(我们的 VCB)查看注释 table 并查看 table 中是否有具有相同 ProjectID 的记录 - 如果有将 "Yes" 值插入项目表单上的文本框中,但如果没有,则插入 "NO"。
它只是一个简单的视觉辅助工具,用于查看 VCB 上的项目是否存在评论(我们以单独的形式处理评论输入和查看)
我不知道该走哪条路。我尝试了一些东西并陷入了循环。感谢任何帮助
Dim strSQL As String
Dim rs As Dao.Recordset
Dim db As Dao.Database
strSQL = "SELECT * FROM COMMENTS WHERE [PROJECTID] = " & Me.PROJECTID & ""
Set db = CurrentDb
Set rs = db.OpenRecordset("COMMENTS")
rs.MoveFirst
Do Until rs.EOF = True
Set rs = db.OpenRecordset(strSQL)
If rs.RecordCount = 0 Then
Me.CommentTxtBox.SetFocus
Me.CommentTxtBox.Text = "NO"
Else
Me.CommentTxtBox.SetFocus
Me.CommentTxtBox.Text = "YES"
End If
rs.MoveLast
Loop
rs.Close
Set rs = Nothing
我在该字段中为每个条目都设置了一个 NO 并且它出错了,因为 ProjectID 不在评论中 table(它可能不在)所以它说没有找到记录。
DCount()
可以使您的代码更简单。
Dim lngComments As Long
Dim strComments As String
lngComments = DCount("*", "COMMENTS", "[PROJECTID] = " & Me.PROJECTID)
If lngComments > 0 Then
strComments = "YES"
Else
strComments = "NO"
End If
Me.CommentTxtBox.Value = strComments
注意,通过将值分配给文本框的 .Value
属性(而不是其 .Text
属性),您不必为 SetFocus
.
我认为这是您当前方法的更简单版本。但是我不确定这是否是最好的方法。也许您可以通过将文本框的 Control Source 属性 设置为使用 IIf
来评估 DCount
:[=18 的表达式来获得所需的内容=]
=IIf(DCount("*", "COMMENTS", "[PROJECTID] = " & [PROJECTID]) > 0, "YES", "NO")