Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск в рекордсете по Seek от DAO / 10 сообщений из 10, страница 1 из 1
05.09.2017, 02:05
    #39515415
DAO Seek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в рекордсете по Seek от DAO
Делаю поиск сиком в рекордсете. Проблема в поиске всех записей, удовлетворяющих условию. Не получается. Находит только первую из множества возможных в бесконечном цикле. Подскажите, что я делаю не так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        Do While True
            rst.Seek ">=", "значение"
            If Not rst.NoMatch Then
                If rst!oldid <= g1 Then
                    'некоторые действия
                    k = k + 1
                End If
            Else
                Exit Do
            End If
         Loop
...
Рейтинг: 0 / 0
05.09.2017, 05:46
    #39515424
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в рекордсете по Seek от DAO
Так Сик только первую запись находит. Пользуйтесь FindFirst-FindNext
...
Рейтинг: 0 / 0
05.09.2017, 10:38
    #39515536
DAO Seek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в рекордсете по Seek от DAO
MrShinТак Сик только первую запись находит. Пользуйтесь FindFirst-FindNextДык рад бы. Но таблица уж больно огромная. Запрос сложностью N*N может идти несколько суток. Сик спас бы. Но вот незадача...

Впрочем, все равно спасибо. Ваш ответ натолкнул на мысль о временной таблице с правильной сортировкой, где сик точно поможет. Наверное (???)
...
Рейтинг: 0 / 0
05.09.2017, 12:04
    #39515587
Поиск в рекордсете по Seek от DAO
quot DAO Seek, если нужно получить все записи для конкретного значения, то, может, лучше применить фильтр (это лучше делать в ADODB.Recordset-е) или открыть Recordset с отбором по конкретному значению и с минимальным количеством необходимых полей. Отбор по индексированному полю выполняется быстро.
Если значений несколько, то эти действия выполнять в цикле для каждого значения.
...
Рейтинг: 0 / 0
05.09.2017, 12:58
    #39515620
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в рекордсете по Seek от DAO
DAO Seekв бесконечном цикле
не вижу, где вы выходите из цикла, если запись не найдена
...
Рейтинг: 0 / 0
05.09.2017, 13:24
    #39515645
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в рекордсете по Seek от DAO
DAO Seek,
а зачем вообще Seek?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Set rs = CurrentDb.OpenRecordset("SELECT ..FROM..WHERE..")
Do Until rs.EOF
        If rs!ctl<=5 then
               rs.Edit
                   'действия
              rs.Update
        end if
rs.MoveNext
Loop
...
Рейтинг: 0 / 0
05.09.2017, 16:39
    #39515885
DAO Seek
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в рекордсете по Seek от DAO
Анатолий ( Киев )если нужно получить все записи для конкретного значения, то, может, лучше применить фильтр
Замучаюсь открывать. Таблица порядка 10 миллионов записей. Для каждой записи надо найти совмещение по интервалам (ValueStart, ValueFinis) с другими записями. Простой запрос типа считает невыразимо долго, дождаться завершения так и не удалось.
Код: sql
1.
2.
3.
4.
SELECT t1.id, t1.ValueStart, t1.ValueFinis, t2.ValueStart, t2.ValueFinis
FROM tbl AS t1, tbl AS t2
WHERE t1.ValueStart<t2.ValueFinis and t1.ValueFinis>=t2.ValueStart and t1.id<t2.id
ORDER BY t1.ValueStart


Использовать Find, FindFirst, FindNext тоже очень долго
Поля конечно индексированные.
...
Рейтинг: 0 / 0
05.09.2017, 17:42
    #39515929
а так?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в рекордсете по Seek от DAO
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Option Compare Database
Option Explicit

't - таблица c полями id (счетчик) и n (лонг, с индексом idx)
Sub doit()
    Dim r As DAO.Recordset
    Dim cri&
    
    cri = 3
    Set r = CurrentDb.OpenRecordset("t")
    r.Index = "idx"
    Do
        r.seek "=", cri
        If r.NoMatch Then
            Exit Do
        Else
            Debug.Print r!id, r!n
            r.MoveNext
            Do While r!n = cri
                Debug.Print r!id, r!n
                r.MoveNext
            Loop
            Exit Do
        End If
    Loop
    
    r.Close: Set r = Nothing
End Sub


Код: vbnet
1.
2.
 3             3 
 12            3 
...
Рейтинг: 0 / 0
05.09.2017, 21:29
    #39516022
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в рекордсете по Seek от DAO
DAO Seek,
проверил на 2000000 записей(простенькая таблица из 3 полей)отрабатывает секунд за 35-40 (точно не измерял)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub my()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("tbl")
Do Until rs.EOF
rs.Edit
    If rs!ctl1 Mod 2 = 0 Then
        rs!ctl2 = "чет"
    Else
        rs!ctl2 = "нечет"
    End If
rs.Update
rs.MoveNext
Loop
End Sub
...
Рейтинг: 0 / 0
06.09.2017, 23:40
    #39516838
Nebo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в рекордсете по Seek от DAO
DAO SeekАнатолий ( Киев )если нужно получить все записи для конкретного значения, то, может, лучше применить фильтр
Замучаюсь открывать. Таблица порядка 10 миллионов записей. Для каждой записи надо найти совмещение по интервалам (ValueStart, ValueFinis) с другими записями. Простой запрос типа считает невыразимо долго, дождаться завершения так и не удалось.
Код: sql
1.
2.
3.
4.
SELECT t1.id, t1.ValueStart, t1.ValueFinis, t2.ValueStart, t2.ValueFinis
FROM tbl AS t1, tbl AS t2
WHERE t1.ValueStart<t2.ValueFinis and t1.ValueFinis>=t2.ValueStart and t1.id<t2.id
ORDER BY t1.ValueStart


Использовать Find, FindFirst, FindNext тоже очень долго
Поля конечно индексированные.

Такие вещи, наверное, лучше делать на языке Си.
Загружать таблицу в структуру и уже дальше работать средствами Си или С++
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск в рекордсете по Seek от DAO / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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