Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Задача перебор рекордсета определенным образом / 21 сообщений из 21, страница 1 из 1
28.03.2012, 11:24
    #37727009
DrunkWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Народ, помогите разобраться( В рекордсете n кол-во записей, упорядоченных по возрастанию номера Id. Id некоторых из них может совпадать, такие записи всегда расположены рядом.
Необхоидмо перебрать записи рекордсета и вывести так, чтобы при совпадении id выводилась только запись, стоящая последней.
Например.
Id1
Id2
Id3
Id3
Id3
Id4

должно получиться:
Id1
Id2
Id3 (последняя из трех)
Id4
...
Рейтинг: 0 / 0
28.03.2012, 12:06
    #37727086
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Do Until rs.EOF = True

LVal = rs("id")

rs.MoveNext

If rs.AbsolutePosition <> -3 Then
    If rs("id") <> LVal Then
    Debug.Print LVal
    End If
Else
    Debug.Print LVal
End If

Loop
...
Рейтинг: 0 / 0
28.03.2012, 12:15
    #37727100
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Наверно так наглядней:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Do Until rs.EOF = True

LVal = rs("id")

rs.MoveNext

If rs.AbsolutePosition <> -3 Then
    If rs("id") <> LVal Then
    Debug.Print LVal & "-" & rs.AbsolutePosition - 1
    End If
Else
    Debug.Print LVal & "-" & rs.RecordCount
End If

Loop
...
Рейтинг: 0 / 0
28.03.2012, 12:38
    #37727160
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Ну либо можно это сделать, перестроив сам SQL-запрос - источник рекордсета.
...
Рейтинг: 0 / 0
28.03.2012, 12:41
    #37727174
DrunkWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
TpaBka,

rs.AbsolutePosition <> -3
а эту строку можно пояснить? а то что-то не врубаюсь
...
Рейтинг: 0 / 0
28.03.2012, 12:51
    #37727189
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Const adPosEOF = -3 (&HFFFFFFFD)
...
Рейтинг: 0 / 0
28.03.2012, 12:54
    #37727196
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
AbsolutePosition -позиция курсора в рекордсете начинается с 1
-3 - означает, что курсор находится за последней записью
...
Рейтинг: 0 / 0
28.03.2012, 12:59
    #37727206
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Что за странная логика? С ее точки зрения при "AbsolutePosition -позиция курсора в рекордсете начинается с 1" что тогда означают -1, -2 и -4?
...
Рейтинг: 0 / 0
28.03.2012, 13:03
    #37727214
DrunkWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
TpaBka,

If rs("id") <> LVal Then
Получается если новая запись не равна предыдущей, то она выводится. А если следующая за ней будет ей равна? Получается следующая будет пропущена. А мне нужно наоборот, чтобы выводилась ПОСЛЕДНЯЯ из дублирующихся записей, а не первая. Вот в чем проблема.
...
Рейтинг: 0 / 0
28.03.2012, 13:04
    #37727216
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Antonariy,

ну млин я имел ввиду, что если рекордсет не пустой и он стоит на первой записи то его позиция=1 а не 0
...
Рейтинг: 0 / 0
28.03.2012, 13:05
    #37727217
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
DrunkWolf,

Вы проверяли код?
...
Рейтинг: 0 / 0
28.03.2012, 13:06
    #37727222
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
TpaBkaAntonariy,

ну млин я имел ввиду, что если рекордсет не пустой и он стоит на первой записи то его позиция=1 а не 0
он в смысле курсор
...
Рейтинг: 0 / 0
28.03.2012, 13:09
    #37727234
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Set rsClone = rs.Clone
rsClone.MoveNext
while not rs.EOF
    if not rsClone.EOF then
        if rs("id")<>rcClone("id") then выводим
        rsClone.MoveNext
    else
        выводим
    end if
    rs.MoveNext
wend
...
Рейтинг: 0 / 0
28.03.2012, 13:14
    #37727250
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
TpaBkaDrunkWolf,

Вы проверяли код?Этот код работает только если нам нужно выводить лишь поле id, а не всю запись.

А если всю? Первая запись начисто игнорируется:
Код: vbnet
1.
2.
3.
4.
5.
Do Until rs.EOF = True

LVal = rs("id")

rs.MoveNext

А если она одна с таким id?
...
Рейтинг: 0 / 0
28.03.2012, 13:40
    #37727310
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
AntonariyTpaBkaDrunkWolf,

Вы проверяли код?Этот код работает только если нам нужно выводить лишь поле id, а не всю запись.

А если всю? Первая запись начисто игнорируется:
Код: vbnet
1.
2.
3.
4.
5.
Do Until rs.EOF = True

LVal = rs("id")

rs.MoveNext

А если она одна с таким id?

Ничего там не игнорируется

А насчет записи, я только показал автору идею, что бы он немного подумал, а вообще дальше можно искать запись в клоне по AbsolutePosition

кстати Antonariy ваш вариант не работает
...
Рейтинг: 0 / 0
28.03.2012, 13:45
    #37727321
DrunkWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Antonariy,

вери Спс, работает,
а если мне помимо этого, из невыведеных дублирующих записей еще нужно собрать значения определенного поля, скажем "Field" т.е. было:
Id1 Field1
id2 Field2
Id3 Field3
Id3 Field4
Id3 Field5
Id4 Field6
Id5 Field7

А станет:

Id1 Field1
id2 Field2
Id3 (Field5+Field4+Field3)
Id4 Field6
Id5 Field7
...
Рейтинг: 0 / 0
28.03.2012, 13:53
    #37727340
TpaBka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Antonariy,

Пардон на print случайно вывел rsClone
...
Рейтинг: 0 / 0
28.03.2012, 16:13
    #37727768
QValD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
DrunkWolf, "выводим" замени на метод, который принимает id в качестве фильтра рекордсета и фперёд.
...
Рейтинг: 0 / 0
28.03.2012, 23:44
    #37728559
Диклевич Александр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Если рекордсет основан на SQL запросе, то почему бы не решить эту задачу в SQL?
SUM + GROUP BY?
Это я к 12326947
...
Рейтинг: 0 / 0
29.03.2012, 12:02
    #37729162
DrunkWolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Antonariy
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Set rsClone = rs.Clone
rsClone.MoveNext
while not rs.EOF
    if not rsClone.EOF then
        if rs("id")<>rcClone("id") then выводим
        rsClone.MoveNext
    else
        выводим
    end if
    rs.MoveNext
wend



Кстати так теряется последняя строка из дублирующихся
...
Рейтинг: 0 / 0
29.03.2012, 13:28
    #37729367
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача перебор рекордсета определенным образом
Она сделала свое дело на предпоследней записи основной копии и больше не нужна.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Задача перебор рекордсета определенным образом / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]