Sql 基于不同表的表和表单-查看表中是否存在公共记录,并插入一个“";是”;或;否";形式价值

Sql 基于不同表的表和表单-查看表中是否存在公共记录,并插入一个“";是”;或;否";形式价值,sql,ms-access,vba,Sql,Ms Access,Vba,我有一个access数据库,我的团队用它来跟踪项目。我们把它用作VCB 在主窗体(项目)上,我们查看它并对项目的窗体进行更新,从而更新链接到该窗体的表 但是,我们还有一个单独的表(Comments),用于存储与项目相关的注释。两个表的主键都是projectd 项目表单上只有1个项目条目,但注释表上的注释可以是0到多个 我试图实现的是让项目表单(我们的VCB)查看注释表,看看表中是否有具有相同项目ID的记录-如果在项目表单上的我的文本框中插入“是”值,但如果没有,则插入“否” 查看VCB上的项目是

我有一个access数据库,我的团队用它来跟踪项目。我们把它用作VCB

在主窗体(项目)上,我们查看它并对项目的窗体进行更新,从而更新链接到该窗体的表

但是,我们还有一个单独的表(Comments),用于存储与项目相关的注释。两个表的主键都是projectd

项目表单上只有1个项目条目,但注释表上的注释可以是0到多个

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

查看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
我在字段中得到的每个条目都是“否”,它会出错,因为ProjectID不在comments表中(可能不在),所以它表示找不到记录。

DCount()
可以使代码更简单

Dim lngComments尽可能长
作为字符串的Dim strComments
lngComments=DCount(“*”、“COMMENTS”、“[PROJECTID]=”&Me.PROJECTID)
如果lngComments>0,则
strComments=“是”
其他的
strComments=“否”
如果结束
Me.CommentTxtBox.Value=strComments
请注意,通过将值指定给文本框的
.value
属性(而不是它的
.text
属性),您不必担心
设置焦点

我认为这是你目前做法的一个简单版本。然而,我不确定这是否是最好的方法。也许您可以通过将文本框的控件源属性设置为使用
IIf
计算
DCount
的表达式来获得所需的内容:

=IIf(数据计数(“*”、“注释”、“[PROJECTID]=”、[PROJECTID])>0、“是”、“否”)

设置控制源非常有效!谢谢你,汉斯。我甚至没想过要尝试那条路线。