使用记录集过滤数据

时间:2014-06-02 14:24:05

标签: ms-access access-vba filtering recordset

大家好,我处于两难境地我试图通过比较记录来找到同一个人创建的多个帐户,我的主要问题是如何将当前行值与下一个值进行比较?我的意思是这样MI(i)= MI(i + 1)“MI”是我所针对的字段,我代表当前行,所以这是假设将当前值与下一个值进行比较。但它似乎在vba中不起作用是不是做了不同的方式?要过滤我应该使用rs.Filter还是应该使用Me.Filter,因为我希望过滤的表显示在我的splitform中。

我正在使用的当前示例表:

 Number       MI      First Name     Last Name      DOB 
15241543  123456789    James          Matheson    2/25/1980 
15241543  123456789    Jams           Matheson    2/25/1980 
12345679  124512451    Monroe         Matheson    3/25/1980 
12345679  124512451    Monro          Matheson    3/25/1980 
54789654  152415241    Dilan          Pumley      4/23/1970 
54789658  154215246    Michael        Lan         1/30/1989 

应该出现的最终表是:

 Number       MI      First Name     Last Name      DOB 
15241543  123456789    James          Matheson    2/25/1980 
15241543  123456789    Jams           Matheson    2/25/1980 
12345679  124512451    Monroe         Matheson    3/25/1980 
12345679  124512451    Monro          Matheson    3/25/1980 


Private Sub buttonSort_Click()

Dim i As Integer
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("deleteYo")

For i = 0 To rs.RecordCount - 1
'Comapred the current DOB cell value to the next DOB cell value and some other conditions are set such as Current First Name does not equal the next First Name value
If DOB(i) = DOB(i + 1) And [First Name](i) <> [First Name](i + 1) Or [Last Name](i) <>  [Last Name](i + 1) And Number(i) = Number(i + 1) Or MI(i) = MI(i + 1) Then
'Filters the current value if the conditon is passed
Me.Filter = "[First Name]" & [First Name](i).Value & "'"
'Filter the next value also to append the filtered values so that they will not be overwritten.
Me.Filter = Me.Filter & "[First Name]" & [First Name](i + 1).Value & "'"
Else

End If
rs.MoveNext
Next i
Me.FilterOn = True
rs.Close
Set rs = Nothing
db.Close

End Sub

请注意我已尝试使用带有SQl语句的查询,但这可能无法正常工作,因为这些数据实际上是数百万条记录,而且因为UI在表单中,当应用过滤后的值时,我希望它们显示在拆分表格底部的表格中。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用核心子查询。

SELECT t.ID, t.[First Name], t.[LastName], t.MI
FROM YourTable AS t

   LEFT JOIN

          (SELECT t2.id, t2.[First Name], t2.[Last Name], t2.MI
            FROM YourTable AS t2) AS temp

   ON t.MI = temp.MI
   WHERE t.[First Name] != t2.[First Name]
       OR
         t.[Last Name] != t2.[Last Name];

这将比较具有相同MI值的每个字段,并检索名字和姓氏不相似的记录。

您可以调整字段以更好地适应您的表架构。