基于不同表的表和表单 - 查看表中是否存在公共记录并在表单中插入“是”或“否”值

时间:2015-02-23 15:04:50

标签: sql vba ms-access access-vba

我有一个我的团队用来跟踪项目的访问数据库。我们将它用作VCB。

在主窗体(Projects)上,我们查看它并在项目的表单上进行更新 - 这反过来更新链接到该表单的表。

但是,我们还有一个单独的表(评论),我们存储与项目相关的评论。两个表的主键是ProjectID。

项目表单上只有一个项目条目,但评论表上的评论可以有0到多个。

我想要实现的是让项目表单(我们的VCB)查看注释表并查看表中是否有相同ProjectID的记录 - 如果在我的文本框中插入“是”值在项目表格上,但如果没有,则插入“否”。

它只是一个简单的视觉辅助,看看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不在评论表中(它可能不是),因此它表示没有找到记录。

1 个答案:

答案 0 :(得分:2)

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

我认为这是您当前方法的简单版本。但是我不确定这是否是最好的方法。也许您可以通过将文本框的控件来源属性设置为使用IIf来评估DCount的表达式来获得所需内容:

=IIf(DCount("*", "COMMENTS", "[PROJECTID] = " & [PROJECTID]) > 0, "YES", "NO")