sql - 基于不同表的表和表单 - 查看表中是否存在公共(public)记录并在表单中插入 "yes"或 "no"值

标签 sql ms-access vba

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

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

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

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

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

它只是一个简单的视觉辅助工具,用于查看 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 不在评论表中(它可能不在),所以它说没有找到记录。

最佳答案

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 的表达式来获得所需的内容:

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

关于sql - 基于不同表的表和表单 - 查看表中是否存在公共(public)记录并在表单中插入 "yes"或 "no"值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28676755/

相关文章:

python - 使用 FreeTDS 读取 Debian 上的 MS Access 数据库

Excel VBA 用户窗体使用复选框将数据输入多行

c# - 如何以编程方式在 powerpoint 幻灯片放映期间调用 Action ?

php - wordpress 中的 Woocommerce - 最近售出的产品?

MySQL 临时表与 where in 子句

Sql Server FOR XML AUTO 并返回用户定义的表类型?

vba - VBA 中的时间比较 : inequal while same time

SQL:从 A 列中选择全部,并从 B 列中添加一个值(如果存在)

java - 使用 Java 自动将受密码保护的 Access 表导出到 .csv 文件

vba - Excel VBA 使用 Workbook.Open 并显示 Dir(Directory) 的结果