powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа с Recordset быстро
18 сообщений из 18, страница 1 из 1
Работа с Recordset быстро
    #32872057
AnTT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, гляньте пожалуйста моё решение по поводу частого использования recordset.

Я сделал пару функций и всегда использую только их:

посоветуйте, может это уже каменный век?
может что можно улучшить?

Код: plaintext
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.
Option Compare Database

Public RST As Recordset

Public Function SelectRST(TargetTable, Condition As String)
Set RST = CurrentDb.OpenRecordset(TargetTable, dbopendynaset)
RST.FindFirst Condition
End Function

Public Function SelectRST2(TargetTable As String)
Set RST = CurrentDb.OpenRecordset(TargetTable, dbopendynaset)
End Function

Public Function DeleteRST(TargetTable, Condition As String)
Set RST = CurrentDb.OpenRecordset(TargetTable, dbopendynaset)
RST.FindFirst Condition
RST.Delete
End Function


Public Function CloseRST()
If Not RST Is Nothing Then
 RST.Close
 Set RST = Nothing
Else: End If
End Function
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32872086
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если одновременно два рекордсета понадобится, тогда что?
IMHO:
вообщем я особого смысла в этих ф-иях не вижу
--------------
crazy about...
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32872115
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если уж хочется такие обёртки писать - нужно классы делать
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32872220
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только в данном случае, классы можно и не писать, это достаточно тривиально и не объёмно.
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32872915
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обертывать в классы имеет смысл адошные рекордсеты. Из их вызивентс можно много полезного использовать. А даошные - по-моему ненада!

Потом еще вопрос - эта обертка для чего ? Как использоваться будет ?
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32873007
Фотография AlexJuice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnTT
Код: plaintext
1.
2.
3.
4.
5.
Public Function DeleteRST(TargetTable, Condition As String)
Set RST = CurrentDb.OpenRecordset(TargetTable, dbopendynaset)
RST.FindFirst Condition
RST.Delete
End Function

То есть открывается таблица, чтобы удалить в ней одну запись?
Оригинальный подход к повышению производительности...
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32873084
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и я о том же!!!!!!!
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32873106
Фотография RuslanLisovenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexJuice AnTT
Код: plaintext
1.
2.
3.
4.
5.
Public Function DeleteRST(TargetTable, Condition As String)
Set RST = CurrentDb.OpenRecordset(TargetTable, dbopendynaset)
RST.FindFirst Condition
RST.Delete
End Function

То есть открывается таблица, чтобы удалить в ней одну запись?
Оригинальный подход к повышению производительности...

а что не производительне разве будет кинуть строку с условием на сервак..........он же все быстрее удалить....если условие..............
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32873133
Фотография RuslanLisovenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RST.FindFirst - помоему сначала сортирует, а потом находит нужную запись......
быстрее выполнить поиск по индексу и удаление таким образом потом

----------------------------------------
1. Если через Recordset тогда использование индексов.......
2. А так разве не производительнее будет кинуть строку с условием на сервак..........он же все быстрее удалить....если условие..............если касается только Update или delete

С ув. к участникам форума, Руслан.
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32873145
Proga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во извращенцы, вам что заняться нечем,
Currentproject.Connection.Execute "Delete блаблаблабла", вот и всё.
Я просто фигею.
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32873191
Фотография RuslanLisovenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgaВо извращенцы, вам что заняться нечем,
Currentproject.Connection.Execute "Delete блаблаблабла", вот и всё.
Я просто фигею.

Человек же спрашивает пути оптимизации его процедур?
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32873205
Фотография RuslanLisovenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я напрмер поиск по индеску в Рекордсетах использую только где база не на Sql ...........в программах под моб устройства.........знаете индексы здоровая штука поверте......только вот индексы на текстовые поля иногда могут быть больше самой таблички :)

А в Аксесе досточно передать строку на сиквел и все в его случае, что ту извращенестого................

С ув. к участникам форума, Руслан.
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32873361
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прямой поиск по индексу (seek) и в аксессе (mdb) даёт неплохие результаты, в частности при работе с деревьями
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32873367
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
AnTTRST.FindFirst Condition
RST.Delete
А если не найдено, то сотрется произвольная запись? Не хотел бы я быть этой записью...
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32873975
N_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Неплохо бы привыкнуть явно указывать библиотеку
Public RST As DAO.Recordset
А заодно и Set RST = CurrentDb.OpenRecordset(TargetTable, DAO.dbopendynaset)
2. -/- указывать тип аргументов
Public Function SelectRST(TargetTable As String, Condition As String)
3.
Код: plaintext
If Not RST Is Nothing Then
не означает что можно можно смело вызывать метод close . Если вы попытаетесь закрыть рекордсет повторно, то получите Run-time error '3420':
Указан недопустимый объект, или объект более не задан.
4. Использование глобальных переменных - плохой стиль программирования т.к. череват трудноуловимыми ошибками (особенно в случае объектов с динамическим выделением памяти (как рекордсет)) и ухудшает читабельность кода программы. Но бывает оправдан в некоторых ситуациях (например, увеличение производительности или отсутствие возможности сделать иначе).
5.
Код: plaintext
Else: End If
???
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32874007
Фотография RuslanLisovenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
N_A1. Неплохо бы привыкнуть явно указывать библиотеку
Public RST As DAO.Recordset
А заодно и Set RST = CurrentDb.OpenRecordset(TargetTable, DAO.dbopendynaset)
2. -/- указывать тип аргументов
Public Function SelectRST(TargetTable As String, Condition As String)
3.
Код: plaintext
If Not RST Is Nothing Then
не означает что можно можно смело вызывать метод close . Если вы попытаетесь закрыть рекордсет повторно, то получите Run-time error '3420':
Указан недопустимый объект, или объект более не задан.
4. Использование глобальных переменных - плохой стиль программирования т.к. череват трудноуловимыми ошибками (особенно в случае объектов с динамическим выделением памяти (как рекордсет)) и ухудшает читабельность кода программы. Но бывает оправдан в некоторых ситуациях (например, увеличение производительности или отсутствие возможности сделать иначе).
5.
Код: plaintext
Else: End If
???

Я везде по коду ставил всегда DAO.Recordset , но сейчас сделал .....чтобы можно было выборку данных делать, как через Адо так и через ДАО поэтому сдеал как object...........иногда если рекордсет по каким-то причинам не был инициаллизирован метод close и не было проверки rs.REcordCount > 0 может выдать ошибку.......я переделал вчера все на set rs = nothing
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32874053
N_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
RST.FindFirst Condition
Set RST = CurrentDb.OpenRecordset(TargetTable, dbopendynaset)
Не будет работать в АДО

Для ADO вообще желательно использовать NEW при инициализации.
Позднее связывание отрицательно сказывается на производительности.
...
Рейтинг: 0 / 0
Работа с Recordset быстро
    #32876057
Kolik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня тоже была как-то идея такой беды намутить, но поразмыслив - я от нее отказался :)
Открыть/закрыть рекордсет все-таки удобнее на месте использования.

К томуже, для операций вставки и удаления рекордсет и вовсе не нужен - обьект command значительно лучше.

кстати, если не уверены что рекордсет открыт или закрыт (хотя лучше писать программу так, чтобы такого вопроса не возникало :)
удобно использовать такую штуку:

If rstW.State = adStateOpen Then rstW.Close
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа с Recordset быстро
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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