我有一个我管理的项目的数据库。在此数据库中,我有一个项目表 (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 中显示不同的结果?
谢谢!
从文本框ControlSource调用函数,不要使用VBA设置文本框值。
=CONCAT_SQL("SELECT [ProjectName], tblHotNotes.HotNote, tblHotNotes.HotNoteDate FROM tblProjects INNER JOIN tblHotNotes ON tblProjects.ProjectID = tblHotNotes.ProjectID WHERE tblHotNotes.ProjectID = " & txtProjectID)