powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Прошу помощи, RecordSet -> Seek
11 сообщений из 11, страница 1 из 1
Прошу помощи, RecordSet -> Seek
    #32202649
Bobic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
//Sasha 1
Большое спасибо за совет по работе с двумя таблицами связанными реляцией 1-> многие через RecordSet. Вчера вечером разобрался и написал процедуру для заполнения отпускных дней в табеле. Работает по сравнению со старым выриантом сверхбыстро.

У меня еще вопрос к уважаемым знатокам Access.

Как пользоваться в рекордсете командой Seek для быстрого перехода к нужной записи.Поле должно быть индексированным. У меня поле числового типа и известно значение,по которому нужно найти запись.Как пользуясь Seek быстро перейти на нужную запись в рекордсете. Что работает быстрей в рекордсете FindFirst или Seek?

Ребята,если можно то приведите небольшой примерчик.
...
Рейтинг: 0 / 0
Прошу помощи, RecordSet -> Seek
    #32202682
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Что работает быстрей в рекордсете FindFirst или Seek?

Seek работает в несколько раз быстрее.
На таблице из 1,1 мил. Seek ищет (первый вызов) за 0,9 сек
Find - 4.5 сек. (индекс уникальный)

примерчик
[src]
Public Sub qwertr()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
'Dim t As Long
't = timeGetTime
Set cnn = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.CursorLocation=adUseServer
rs.Index = "TextField"
rs.Open "t", cnn, , , adCmdTableDirect
rs.Seek "СтрокаКоторуюИщем", adSeekFirstEQ
If rs.EOF Then
'не найдено
Else
'найдено
'можно использовать rs.Bookmark
End If
'Debug.Print (timeGetTime - t)
rs.Close: Set rs = Nothing
End Sub
[src]

курсор обязательно должен быть серверным
rs.Index = "TextField" - имя индекса
adCmdTableDirect -обязательно с этой константой (равной 512)

При последующих вызовах Seek от 0 до 10 миллисекунд
Find 4 секунды. Разы считай сам :)

===
Работaет только с Jet (Provider=Microsoft.Jet.OLEDB.4.0)
...
Рейтинг: 0 / 0
Прошу помощи, RecordSet -> Seek
    #32202705
Bobic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Senin Victor
Спасибо большое за примерчик и за ответ на вопрос. Но использую Access 97 и DAO 3.5. Как там это осуществить?
...
Рейтинг: 0 / 0
Прошу помощи, RecordSet -> Seek
    #32202713
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>adCmdTableDirect -обязательно с этой константой
т.е. Seek работает только с таблицами - для рекордсета с данными из нескольких таблиц (на основе запроса) Seek не подходит...
//на всякий случай...
...
Рейтинг: 0 / 0
Прошу помощи, RecordSet -> Seek
    #32202714
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в Ас97
set rs=openrecordset("Tab")
rs.Index="id"
Seek "=", 5

будет искать запись у которой id=5
при условии, что Tab проиндексирована по id
...
Рейтинг: 0 / 0
Прошу помощи, RecordSet -> Seek
    #32202809
Bobic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Цены Вам нет ребята !!! Спасибо Нуф-Нуф -у за ценное замечание и Шуре_1!

Моя тупая программная дохлая черепаха забегала как гепард!!!
Последний тупой вопрос, у меня индекс по текстовому полю,но могу индексированное поле преобразовать в числовой тип.Сик работать быстрей будет с числовым индексом?
...
Рейтинг: 0 / 0
Прошу помощи, RecordSet -> Seek
    #32202815
sasha_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по идее да, но вряд ли намного.
...
Рейтинг: 0 / 0
Прошу помощи, RecordSet -> Seek
    #32202828
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>т.е. Seek работает только с таблицами - для рекордсета с данными из нескольких таблиц (на основе запроса) Seek не подходит

Спорю на 7 енотов, что любой запрос основан на таблицах
откеда и можно выудить данные (даже если есть Union)
...
Рейтинг: 0 / 0
Прошу помощи, RecordSet -> Seek
    #32202945
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта, Виктор, спорить не могу, ибо енотов у меня нет совсем :) Но!
Но при попытке в приведенном же тобой коде открыть запрос (любой запрос, даже основанный полностью на таблице) вылетает:
Run-time error '-2147217867 (80040e35)' Недопустимая операция

Да и потом... Не подскажешь ли как система должна открыть запрос с несколькими таблицами через ТаблДИРЕКТ? Да и в книжках что-то на эту тему было... Хде грабли?
//может чего и не знаю, но грабли эти проходил - пытался искать Seek'ом в запросах. Дело бесполезное...
...
Рейтинг: 0 / 0
Прошу помощи, RecordSet -> Seek
    #32202955
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Нуф-нуф
>Run-time error '-2147217867 (80040e35)' Недопустимая операция
>Хде грабли?


А кто здесь сказал, что можно через запросы? :)
Когда я говорил про 7 енотов, я имел ввиду только таблицу. Не запрос, не буханку хлеба - а таблицу. С индексами.
...
Рейтинг: 0 / 0
Прошу помощи, RecordSet -> Seek
    #32202974
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ну г-о-н-и е-е-е-н-о-т-о-в!

Т.е. я сказал:
>т.е. Seek работает только с таблицами - для рекордсета с данными из нескольких таблиц ( на основе запроса ) Seek не подходит

Ты же и сказал:
>Спорю на 7 енотов, что любой запрос основан на таблицах
откеда и можно выудить данные (даже если есть Union
)
Union где может есть? Только в запросах может есть :)

Ты сказал:
>А кто здесь сказал, что можно через запросы? :)
Ну так никто и не говорил...

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


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