Distinct в работе с рекордсетом

z0dium

Подскажите, пожалуйста, как можно реализовать подобие SELECT DISTINCT в recordset через vba. Требуется посчитать количество неповторяющихся ID в рекордсете (Рекордсет берется из SQL строки, после чего проходится целиком и редактируется поле следующим кодом.
Set rs = CurrentDb.OpenRecordset("SELECT all from qrdf_union2") rs.MoveFirst Do Until rs.EOF If Right(rs("nomer_dogovora"), 3) = "-Br" Then rs.Edit rs("nomer_dogovora") = Left(rs("nomer_dogovora"), Len(rs("nomer_dogovora")) - 3) rs.update End If rs.MoveNext Loop
Требуется сделать SELECT DISTINCT [nomer_dogovora]... в получившемся рекордсет (rs). Пока на ум приходит только множественный перебор, с удалением повторяющихся номеров и count в конце. Наверняка существует более изящный способ.
7 ответов

z0dium

Требуется сделать SELECT DISTINCT [nomer_dogovora]... в получившемся рекордсет (rs). Пока на ум приходит только множественный перебор, с удалением повторяющихся номеров и count в конце. Наверняка существует более изящный способ.
что такое "множественный перебор" ?--рекордсет можно отсортировать, и, потом, пройтись по нему, фиксируя кол-во изменений нужного поляно, имхо, и проще и быстрее, будет просто в основном цикле (в приведенном коде)"кидать" значение поля в Dictionary, устанавливая его ключом записи и "игноря" ошибку не уникальности этого ключа,а потом - просто вывести кол-во "статей" в Dictionary


z0dium

qwerty112,Эмм.. можете привести пример кода?


z0dium

qwerty112,Эмм.. можете привести пример кода?
1могу,по какому из 2-х предложенных вариантов ?2вы не ответили на мой вопрос


z0dium

Даю ссылку на еще один топик с ответами по теме:http://www.sql.ru/forum/actualthread.aspx?tid=990230


z0dium

qwerty112,под множественным перебором я имел ввиду то, что придется пройти n*n по рекордсету из n строк. Но на данный момент я вижу, что этого не требуется.А меня интересует вариант с Dictionary. Привидите пример, пожалуйста.


z0dium

А меня интересует вариант с Dictionary. Привидите пример, пожалуйста.
Sub test() Dim dct As Object ' Dictionary Dim rs As Object ' ADODB.Recordset ' Set rs = CreateObject("ADODB.Recordset") rs.Fields.Append "id", adInteger rs.Open rs.AddNew "id", 1 rs.AddNew "id", 1 rs.AddNew "id", 1 rs.AddNew "id", 2 rs.AddNew "id", 3 ' Set dct = CreateObject("Scripting.Dictionary") ' rs.MoveFirst
On Error Resume Next Do While Not rs.EOF dct.Add rs.Fields("id").Value, "haba-haba !" rs.MoveNext Loop
On Error GoTo 0 ' Debug.Print "distinct id count:" & dct.Count
End Sub
test
distinct id count:3


z0dium

qwerty112,запоздалое спасибо =)