【发布时间】:2020-12-02 02:31:46
【问题描述】:
我的 access 数据库中有一个名为 Table_Example_1 的表。目前,我有一个循环,该循环根据表中的 [Flag] 字段循环执行代码,因此如果所有内容都设置为“Flag_1”,它会循环遍历这些记录并执行代码以创建字符串输出。
但是,有些项目具有相同的标志,例如“Flag_1”,但它们需要与具有相同值的其他记录分开执行。我添加了一个名为 [Grouped] 的字段,我想做的是使用该字段循环遍历该分组中的所有内容以获取相同的标志。
因此,如果有 2 条记录设置为 Flag_1 并且都是第 1 组,它们将在同一个循环中运行。第 2 组中带有 Flag_1 的记录将在单独的循环中运行。 (这些结果将在最后合并)
我的相关数据表如下:
Business Type TableName FieldName Flag Grouped
Red Residential RedTable [Field_1] Flag_1 1
Red Residential RedTable [Field_1] Flag_1 1
Red Residential RedTable [Field_1] Flag_1 1
Red Residential RedTable [Field_2] Flag_1 2
Red Residential RedTable [Field_2] Flag_1 2
我当前的代码如下,该代码目前只循环遍历具有相同标志的记录,不考虑它们的分组。
- 它使用 Flag_1 为所有内容设置记录集和过滤器
- 然后循环遍历记录集并执行代码来设置结果变量。
所以我想要对下面的代码做的是以某种方式添加一个检查分组并查看所有组的部分,然后我的下面的循环将嵌套在其中。
我首先需要从记录集中获取不同数量的组。我提供的示例只有第 1 组和第 2 组,但每次都会有所不同。
然后我想在下面的循环中嵌套。我正在考虑使用 for 循环,但我不确定如何检查记录集中的组数并为每个组执行此操作。
Public Function CreateFilterString(Business As String, Type As String, TableName As String)
'Define variables
Dim resultString_1 As String
Dim resultStringFinal As String
Dim recSet As Recordset
'Flag_1 Related Flag RecordSet
Set recSet = CurrentDb.OpenRecordset("SELECT * FROM Table_Example_1 WHERE Table_Example_1.TableName = '" & TableName & "' AND Table_Example_1.Business = '" & Business & "' AND Table_Example_1.Type = '" & Type & "' AND Table_Example_1.Flag = 'Flag_1' ")
'If there is no data in the recordset, then set the resultString_1 to blank
If recSet.RecordCount = 0 Then
resultString_1 = ""
'Otherwise execut the following
Else
'If there is data in the recordset and the Flag field is Flag_1
If recSet.RecordCount > 0 And recSet.Fields(7).Value = "Flag_1" Then
'Set the resultString variable
recSet.MoveFirst ' recSet now contains first record from the query
While Not (recSet.EOF)
'If it is the first case in the recordset
If recSet.RecordCount = 1 Then
'code executed here that sets value of resultString_1
Else
'code executed here that sets value of resultString_1
End If
'moves to next record
recSet.MoveNext
Wend 'end while
recSet.Close 'close recordset when done
'End of Flag_1 Related Flag
End If
End If
'Set the result variable returned by the function
CreateFilterString = resultStringFinal
End Function
编辑: 因此,总结并希望澄清我想要的:
我希望能够从 GROUPING 字段中获取不同的值,然后遍历这些值中的每一个。 我需要一个遍历“分组”字段中每个唯一值的循环。因此它将对分组为 1 的任何记录执行一次,然后到达循环的末尾并为分组为 2 的任何记录重新运行。
我知道我可以使用CurrentDb.OpenRecordset("SELECT DISTINCT Grouped FROM Table_Example_1 WHERE ... 创建一个记录集以获取唯一值,但我不知道如何使用此信息来创建一个循环来遍历其中的每个值GROUPED 字段。
提前致谢
【问题讨论】:
-
您可以使用
SELECT DISTINCT Grouped FROM Table_Example_1 WHERE ...获得唯一组的数量。不同组的数量将是recSet.RecordCount。我不太明白,你想用这些信息做什么 -
我不完全确定如何获得不同数量的组并遍历每个值。我知道我可以使用 SELECT DISTINCT Grouped FROM Table_Example_1 WHERE 创建记录集以获取唯一值,但我不知道如何使用此信息来创建循环以遍历 GROUPED 字段中的每个值.但我基本上想要的是创建一个循环,遍历“分组”字段中的每个唯一值。因此,它将对分组为 1 的任何记录运行一次,然后到达末尾并为分组为 2 的任何记录重新运行