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

должно получиться:
Id1
Id2
Id3 (последняя из трех)
Id4
...
Рейтинг: 0 / 0
Задача перебор рекордсета определенным образом
    #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
Задача перебор рекордсета определенным образом
    #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
Задача перебор рекордсета определенным образом
    #37727160
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну либо можно это сделать, перестроив сам SQL-запрос - источник рекордсета.
...
Рейтинг: 0 / 0
Задача перебор рекордсета определенным образом
    #37727174
DrunkWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBka,

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

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

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

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

ну млин я имел ввиду, что если рекордсет не пустой и он стоит на первой записи то его позиция=1 а не 0
он в смысле курсор
...
Рейтинг: 0 / 0
Задача перебор рекордсета определенным образом
    #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
Задача перебор рекордсета определенным образом
    #37727250
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBkaDrunkWolf,

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

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

LVal = rs("id")

rs.MoveNext

А если она одна с таким id?
...
Рейтинг: 0 / 0
Задача перебор рекордсета определенным образом
    #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
Задача перебор рекордсета определенным образом
    #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
Задача перебор рекордсета определенным образом
    #37727340
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

Пардон на print случайно вывел rsClone
...
Рейтинг: 0 / 0
Задача перебор рекордсета определенным образом
    #37727768
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DrunkWolf, "выводим" замени на метод, который принимает id в качестве фильтра рекордсета и фперёд.
...
Рейтинг: 0 / 0
Задача перебор рекордсета определенным образом
    #37728559
Диклевич Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если рекордсет основан на SQL запросе, то почему бы не решить эту задачу в SQL?
SUM + GROUP BY?
Это я к 12326947
...
Рейтинг: 0 / 0
Задача перебор рекордсета определенным образом
    #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
Задача перебор рекордсета определенным образом
    #37729367
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Она сделала свое дело на предпоследней записи основной копии и больше не нужна.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Задача перебор рекордсета определенным образом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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