【发布时间】:2020-02-24 01:50:31
【问题描述】:
我正在学习 Access 几天,我遇到了一些问题,进入了双循环。我做错了什么,因为我不是 Access 专家。看来我陷入了无限循环(或其他一些错误)。我的目标是从同一个表中检索一些数据。这是一个例子:
Table1
Field1 Field2
AAA 1
BBB 2
CCC 3
CCC 4
AAA 5
BBB 6
我想检索字段 2 中 Field1= x 的所有记录(但如果找到相同的记录,则不重复该操作)
这是我的代码:
Dim strSQL as String, rs as DAO.Recordset, rs2 as Dao.Recordset, result as String
strSQL = "SELECT * FROM Table1"
strSQL2 = "SELECT DISTINCT Field1 FROM Table1"
Set rs = Currentdb.OpenRecordset(strSQL)
Set rs2 = Currentdb.OpenRecordset(strSQL2)
rs2.movefirst
While not rs2.EOF
rs.movefirst
result = ""
While not rs.EOF
If rs.Fields("Field1") = rs2.Fields("Field1") Then
result = result & rs.fields("Field2") & " "
rs.movenext
End if
Wend
rs2.movenext
Debug.print result
Wend
Set rs=Nothing
Set rs2 = Nothing
我想要的结果应该是:
结果(第一个循环)= 1 5
结果(第二个循环)= 2 6
结果(第三个循环)= 3 4
编辑: 我正在运行循环,因为我需要使用我找到的数据生成电子邮件。我知道如何生成电子邮件,但我只是堆在这个循环中。电子邮件示例应如下所示:
电子邮件数量 = [table1].[field1] 中唯一值的数量(在前面提到的示例中为 3)
对于每封电子邮件,字段 2 中所有记录的列表在字段 1 中具有循环值。
【问题讨论】:
-
当你开始需要代码中的嵌套块时,你就开始需要consistent indentation。
-
您的需求似乎可以通过一条 SQL 语句来解决。你能分享一些样本数据和你想要的结果吗?您的解决方案感觉非常笨拙。
-
@JNevill 我需要生成不同的电子邮件(电子邮件数量=字段 1 中唯一值的数量)。在每封电子邮件中,正文应该是我在字段 2 中找到的所有记录的列表,这些记录在字段 1 中具有相同的记录,这就是我运行循环的原因。
-
那么您可能希望为 Field1 中的每个值创建一个包含 Field2 中所有值的字符串。这需要一个 VBA 过程。一个常用的代码示例是 Allen Browne 的 ConcatRelated。
标签: sql database vba loops ms-access