Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа с Recordset быстро / 18 сообщений из 18, страница 1 из 1
19.01.2005, 12:30:08
    #32872057
AnTT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
Господа, гляньте пожалуйста моё решение по поводу частого использования 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
19.01.2005, 12:36:13
    #32872086
Kelme
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
а если одновременно два рекордсета понадобится, тогда что?
IMHO:
вообщем я особого смысла в этих ф-иях не вижу
--------------
crazy about...
...
Рейтинг: 0 / 0
19.01.2005, 12:42:00
    #32872115
Alexey Sh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
Ну если уж хочется такие обёртки писать - нужно классы делать
...
Рейтинг: 0 / 0
19.01.2005, 13:12:45
    #32872220
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
Только в данном случае, классы можно и не писать, это достаточно тривиально и не объёмно.
...
Рейтинг: 0 / 0
19.01.2005, 16:41:49
    #32872915
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
Обертывать в классы имеет смысл адошные рекордсеты. Из их вызивентс можно много полезного использовать. А даошные - по-моему ненада!

Потом еще вопрос - эта обертка для чего ? Как использоваться будет ?
...
Рейтинг: 0 / 0
19.01.2005, 17:14:47
    #32873007
AlexJuice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
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
19.01.2005, 17:42:27
    #32873084
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
Так и я о том же!!!!!!!
...
Рейтинг: 0 / 0
19.01.2005, 17:51:20
    #32873106
RuslanLisovenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
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
19.01.2005, 17:59:53
    #32873133
RuslanLisovenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
RST.FindFirst - помоему сначала сортирует, а потом находит нужную запись......
быстрее выполнить поиск по индексу и удаление таким образом потом

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

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

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

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

С ув. к участникам форума, Руслан.
...
Рейтинг: 0 / 0
19.01.2005, 20:03:24
    #32873361
Alexey Sh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
Прямой поиск по индексу (seek) и в аксессе (mdb) даёт неплохие результаты, в частности при работе с деревьями
...
Рейтинг: 0 / 0
19.01.2005, 20:13:24
    #32873367
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
AnTTRST.FindFirst Condition
RST.Delete
А если не найдено, то сотрется произвольная запись? Не хотел бы я быть этой записью...
...
Рейтинг: 0 / 0
20.01.2005, 10:52:25
    #32873975
N_A
N_A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
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
20.01.2005, 11:01:22
    #32874007
RuslanLisovenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
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
20.01.2005, 11:11:46
    #32874053
N_A
N_A
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Recordset быстро
Код: plaintext
1.
RST.FindFirst Condition
Set RST = CurrentDb.OpenRecordset(TargetTable, dbopendynaset)
Не будет работать в АДО

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

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

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

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


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