|
|
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
Допустим есть глобальный рекордсет Код: plaintext При загрузке формы мы его инициализируем Код: plaintext И далее в одной функции гоним рекурсию Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Не опасно ли так работать с рекордсетом и не получится ли в памяти каша? Или в каждой рекурсии объявлять свой рекодсет, а не держать его глобальным? Нужно ли его закрывать в рекурсии или не страшно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2005, 13:21:13 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
При каждом использовании Set rstWork = New ADODB.Recordset после выполнения используй оператор Set rstWork = NOTHING что бы освободить память от объекта по мне так лучше использовать локальные переменные поскольку при ошибке с рекордсетом он остается открытым и использовать его еще раз будет проблеммой Еще не мешало бы ввести On Error GoTo Er .......................... .......................... Exit Sub er: Set rstWork = NOTHING ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2005, 13:33:41 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
Думаю что в теле рекурсивной процедуры надо держать только простые переменные. А рекордсет объявить на уровне модуля. Иначе на создание экземпляров рекордсета будет тратиться много времени. И сборщик мусора добавит тормозов собирая остатки от каждого рекордсета. Есть смысл использовать adLockBatchOptimistic-рекордсет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2005, 15:38:08 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
Есть смысл использовать adLockBatchOptimistic-рекордсет.[/quot] Можно немного подробнее? Кстати, рекордсет на уровне модуля объявить не получится, иначе функция выдает ошибку что он уже открыт, действительно он же открыт в предыдущем вызове функции по рекурсии, а последующие вызывы пытаются открыть его же, так что придется видимо в каждом вызове рекурсии. Придется в каждом вызове фенкции создавать свой рекордсет, а это тормоза... Что примечательно, в Access при такой схеме собственных рекордсетов в каждой функции скорость выполнения сильно превосходит скорость в VB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2005, 18:05:48 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
А нельзя никак такой вот альгоритм Код: plaintext 1. 2. 3. 4. 5. провернуть без рекордсета? Т.е. нужно добавить запись в таблицу и получить ее ID. База MDB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2005, 18:15:25 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
Как ускорить открытие рекодсета на добавление одной записи? Юаза однопользовательская MDB. Пока открываю так: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2005, 19:06:52 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
Почему бы тебе не использовать commands для изменения удаления и обнавтения записей, рекордсеты больше предназначена на выборку данных а для изменения данных они медленее работают вот пример Dim s As New Command With s .ActiveConnection = conn .CommandType = adCmdText .CommandText = "INSERT INTO TABLE(T1,T2,T3) VALUES('привет',150,'пока')" .Execute End With если нужно использовать переменные VB для ввода то можно зделать так "INSERT INTO TABLE(T1,T2,T3) VALUES('" & Техт1.Text &"'," & Техт2.Text & ",'" & Техт2.Text & "')" или через конструктор Command (DE) использовать параметры для ввода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2005, 07:08:54 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
With RST .AddNew .Fields("Text") = "bla-bla-bla" .Update .MoveFirst lngID= RST!ID End With может так сработает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2005, 07:14:19 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
Напишите что конкретно хотите сделать этой рекурсивной процедурой, может решение какое-нибудь найдется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2005, 08:48:17 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
TIKOПочему бы тебе не использовать commands для изменения удаления и обнавтения записей, рекордсеты больше предназначена на выборку данных а для изменения данных они медленее работают вот пример Dim s As New Command With s .ActiveConnection = conn .CommandType = adCmdText .CommandText = "INSERT INTO TABLE(T1,T2,T3) VALUES('привет',150,'пока')" .Execute End With если нужно использовать переменные VB для ввода то можно зделать так "INSERT INTO TABLE(T1,T2,T3) VALUES('" & Техт1.Text &"'," & Техт2.Text & ",'" & Техт2.Text & "')" или через конструктор Command (DE) использовать параметры для ввода Я пользуюсь рекордсетом только потому что мне нужно получить ID добавляемой записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2005, 13:09:52 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
TIKOWith RST .AddNew .Fields("Text") = "bla-bla-bla" .Update .MoveFirst lngID= RST!ID End With может так сработает Не понял, что сработает и к чему тут MoveFirst? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2005, 13:10:42 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
WorobjoffНапишите что конкретно хотите сделать этой рекурсивной процедурой, может решение какое-нибудь найдется. Перебор файлов и папок на диске и занесение их в базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2005, 13:11:17 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
А надо ли синхронизовать то что в базе с тем что на диске? Или достаточно убить все записи и создать снова? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2005, 13:31:18 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
Pantalone Я пользуюсь рекордсетом только потому что мне нужно получить ID добавляемой записи ID- можно формировать в басикеи заносить уже с готовым ID, тогда и не будет проблем с вложенным рекордсетом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2005, 14:13:32 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
HandKot Pantalone Я пользуюсь рекордсетом только потому что мне нужно получить ID добавляемой записи ID- можно формировать в басикеи заносить уже с готовым ID, тогда и не будет проблем с вложенным рекордсетом Или использовать Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2005, 14:42:48 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
WorobjoffА надо ли синхронизовать то что в базе с тем что на диске? Или достаточно убить все записи и создать снова? Убить и создать снова. HandKot Pantalone Я пользуюсь рекордсетом только потому что мне нужно получить ID добавляемой записи ID- можно формировать в басикеи заносить уже с готовым ID, тогда и не будет проблем с вложенным рекордсетом Спасибо, попробую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2005, 15:17:12 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
Еще мысль есть, если уж формировать ID без счетчика самому, а записи только добавлять, то не сделать ли это по схеме: все данные по рекурси в массив запихать, а уже по окончании прохода всех рекурсий все это скинуть в базу, по идее скорость быстрее будет в разы, а? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2005, 15:19:40 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
...Если у компьютера мозгов хватит под этот массив. А если винды начнут этот массив сбрасывать в файл подкачки, то алес капут. :(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2005, 15:47:34 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
А если планируется только добавлять данные в базу, каким образом это получится наиболее быстро? Код: plaintext 1. 2. 3. 4. 5. 6. или Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 00:17:53 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
Быстрее всего получится так: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 08:30:47 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
А если использовать Command, то надо написать в mdb запрос на добавление и его исопльзовать как основу Command. Тогда быстрее будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 08:33:53 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
PantaloneЕсть смысл использовать adLockBatchOptimistic-рекордсет. Можно немного подробнее? Кстати, рекордсет на уровне модуля объявить не получится, иначе функция выдает ошибку что он уже открыт, действительно он же открыт в предыдущем вызове функции по рекурсии, а последующие вызывы пытаются открыть его же, так что придется видимо в каждом вызове рекурсии. Придется в каждом вызове фенкции создавать свой рекордсет, а это тормоза...[/quot] Вообще-то открыть его можно до первого вызова функции . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 13:52:12 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
PantaloneЯ пользуюсь рекордсетом только потому что мне нужно получить ID добавляемой записи. Можно создать свою процедуру, на добавление одним из параметром (OUTPUT) которой будет новая ID-шка. Ну или так: Код: plaintext 1. 2. Тогда в r(0) и будет новая ID_Шка... Но с процедурой в данном случае все-же лучше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 14:02:17 |
|
||
|
Как правильно работать с ADO рекордсетом в рекурсиях?
|
|||
|---|---|---|---|
|
#18+
AndreyF Вообще-то открыть его можно до первого вызова функции . Уже попробовал, все равно медленно все это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 14:11:20 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=33358954&tid=2166918]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 361ms |

| 0 / 0 |
