MS Access:使用连续表单时,如何运行按每条记录的 ID 进行筛选并在文本框中显示结果的查询?

问题描述 投票:0回答:1

这是我的场景:

我有一个我管理的项目的数据库。在此数据库中,我有一个项目表 (tblProjects) 和一个热门注释表 (tblHotNotes),如下所示:

tbl项目:

  • 项目ID
  • 项目名称

tblHotNotes:

  • HotNoteID
  • 项目ID (fk)
  • 热门笔记
  • 热门笔记日期

我还有一个名为 frmProjectList 的连续表单,它列出了所有项目并显示其信息。在此表单中,我在名为 txtProjectID 的文本框中显示 ProjectID,并且有另一个名为 HotNotes_Textbox 的文本框,我想在其中显示 CONCAT_SQL 函数返回。

我找到并改编了一个 VBA 函数,该函数运行查询、格式化结果并将其作为字符串返回:

Public Function CONCAT_SQL(strSQL As String) As String

   Dim r As ADODB.Recordset
   Dim a1 As Variant
   Set l = CreateObject("System.Collections.ArrayList")
   Dim s As String
   Dim outer As Long

   Set r = New ADODB.Recordset
   r.Open strSQL, CurrentProject.Connection, 1

   a1 = r.GetRows()
       
   For outer = LBound(a1, 2) To UBound(a1, 2)
        s = s + CStr("<b>" & a1(2, outer) & "</b>: " & a1(1, outer) & "<br>")
   Next

   CONCAT_SQL = s

End Function

加载 frmProjectList 时,将调用下面的 Sub 并在其中调用 CONCAT_SQL 函数。 SQL 查询定义如下:

Private Sub Form_Load()

    Me.HotNotes_Textbox = CONCAT_SQL("SELECT [ProjectName], tblHotNotes.HotNote, tblHotNotes.HotNoteDate FROM tblProjects INNER JOIN tblHotNotes ON tblProjects.ProjectID = tblHotNotes.ProjectID WHERE tblHotNotes.ProjectID = " & Me.txtProjectID)
     
End Sub

问题

当我打开 frmProjectList 时,它会按预期显示所有记录,但 HotNotes_Textbox 文本框在所有记录中仅显示 第一条记录的查询结果。即 tblHotNotes.ProjectID = 1,而不是为每个记录更改 tblHotNotes.ProjectID。

有没有办法解决这个问题并在 HotNotes_Texbox 中显示不同的结果?

谢谢!

vba ms-access ms-access-2016
1个回答
0
投票

从文本框ControlSource调用函数,不要使用VBA设置文本框值。

=CONCAT_SQL("SELECT [ProjectName], tblHotNotes.HotNote, tblHotNotes.HotNoteDate FROM tblProjects INNER JOIN tblHotNotes ON tblProjects.ProjectID = tblHotNotes.ProjectID WHERE tblHotNotes.ProjectID = " & txtProjectID) 

© www.soinside.com 2019 - 2024. All rights reserved.