|
|
|
Set rst = ... в цикле. А по-другому можно?
|
|||
|---|---|---|---|
|
#18+
2 АндрейК Млин, написали, как создаются 2 рекордсета и второй фильтруется в цикле на основе первого. Млин, ну я написал рабочий пример, трудно найти 10 отличий - вот эту строку rs_filt.Filter = "" куда дели? В моём примере подсчёт количество записей я для своего удовольствия делал - нет, оъясню для чего, чтобы такие как вы запустили и посмотрели. Я ж уже 2 раза описал ход работы - А вам 20 раз всё разжевали - МАЛО? Как же вы работаете-то у себя на работе, если вы мало того, что слушать не хотите, о чём вам люди говорят, так ещё и нормальные примеры не верно переписываете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2003, 17:30 |
|
||
|
Set rst = ... в цикле. А по-другому можно?
|
|||
|---|---|---|---|
|
#18+
К Hummer: Я использовал совет АлексеяК. Цитата: Код: plaintext 1. 2. Вашем советом воспользоваться не смог - каких-то библиотек не хватает, например не воспринимается "CurrentProject", "rs.Open". А может не только библиотек, а и Access у меня "не такой" - 97? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2003, 18:44 |
|
||
|
Set rst = ... в цикле. А по-другому можно?
|
|||
|---|---|---|---|
|
#18+
Либо человек *** либо это навсегда. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2003, 18:48 |
|
||
|
Set rst = ... в цикле. А по-другому можно?
|
|||
|---|---|---|---|
|
#18+
Да можете изгаляться хоть со ***, хоть с ###, но не работает! Разница в моём коде и коде Hummer-a в одной строке, где фильтр приравнивается к ""? Ну добавил я ёё - результат тот же. Из справки по Filter: Задает или возвращает значение, определяющее записи, которые будут включены в открываемый объект Recordset Т.е. вроде сначала задают Filter, а потом уже открывают Recordset. А у меня (и у Hammer) все Recordset-ы уже открыты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 12:44 |
|
||
|
Set rst = ... в цикле. А по-другому можно?
|
|||
|---|---|---|---|
|
#18+
хочешь сказать что изменение фильтра на уже открытом DAO рекордсете не изменит набор записей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 13:34 |
|
||
|
Set rst = ... в цикле. А по-другому можно?
|
|||
|---|---|---|---|
|
#18+
Я не буду больше изголяться - если понимания нет, то это навсегда. Вот рабочий код - передалать под себя (и на дао рекордсеты) и всё будет работать. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 13:37 |
|
||
|
Set rst = ... в цикле. А по-другому можно?
|
|||
|---|---|---|---|
|
#18+
2 АлексейК хочешь сказать что изменение фильтра на уже открытом DAO рекордсете не изменит набор записей? Именно так. Для DAO . Придется делать примерно следующее Код: plaintext 1. 2. 3. Это, в общем-то, тоже самое что и пресловутые "Set rst = ... в цикле" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 13:44 |
|
||
|
Set rst = ... в цикле. А по-другому можно?
|
|||
|---|---|---|---|
|
#18+
да, действительно .... но ускори ли процесс такой способ? почему бы не использовать ADO? там фильтр работает "правильно" Public Sub tst2() Dim rs As New adodb.Recordset 'из Set rs = CurrentDb.OpenRecordset("select * from t1", dbOpenDynaset) rs.Open "select * from t1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic rs.MoveLast Debug.Print rs.AbsolutePosition rs.MoveFirst rs.Filter = "id =1 " rs.MoveLast Debug.Print rs.AbsolutePosition rs.Close Set rs = Nothing End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 13:52 |
|
||
|
Set rst = ... в цикле. А по-другому можно?
|
|||
|---|---|---|---|
|
#18+
Да, для дао фильтр не изменяет кол-во записей - просто всё делал на адо - там в порядке. Извиняюсь:) Сейчас проверил всё на дао просто... Всё-таки, думаю что в этой ситуации можно написать запрос на обновление записей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 14:01 |
|
||
|
Set rst = ... в цикле. А по-другому можно?
|
|||
|---|---|---|---|
|
#18+
но ускори ли процесс такой способ? Сомнения почему бы не использовать ADO? там фильтр работает "правильно" Тоже сомнения В ADO фильтр не только устанавливать нужно, но еще и сбрасывать. С другой стороны рекордсеты не надо создавать/убивать. Я еще раз предлагаю скидывать результаты во временную таблицу (дабы бороться с необновляемостью рекордсета) И еще один вариант. Открываем набор-источник отсортированный по ID. Открываем набор приемник отсортированный по ID. И бежим сразу по обоим отслеживая ключевые поля. 1. Если ключи совпадают - апдейтим приемник, перемещаем приемник на следующую запись. 2. Если не ключ в применике больше, чем в источнике - то перемещаем источник на след. запись, и, если ключи все еще отличаются - то перемещаем приемник до тех пор, пока ключ в приемнике не больше ключа в источнике. 3. Если ключ в приемнике меньше, чем в источнике - бежим по приемнику до тех пор, пока ключ в приемнике не меньше чем ключ в источнике Такой вот Client-side VBA-based INNER JOIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 14:07 |
|
||
|
Set rst = ... в цикле. А по-другому можно?
|
|||
|---|---|---|---|
|
#18+
В каком смысле сбрасывать ? Нарастающих итогов в фильтре рекордсета нет t1 = 13 записей id - ключ Public Sub tst2() Dim rs As New adodb.Recordset 'Set rs = CurrentDb.OpenRecordset("select * from t1", dbOpenDynaset) rs.Open "select * from t1", CurrentProject.Connection, adOpenKeyset, adLockOptimistic rs.PageSize = 1 Debug.Print rs.PageCount ' = 13' rs.Filter = "id =1 " Debug.Print rs.PageCount ' = 1' rs.Filter = "id =3" Debug.Print rs.PageCount ' = 1' rs.Filter = "" Debug.Print rs.PageCount ' = 13' rs.Close Set rs = Nothing ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 14:29 |
|
||
|
Set rst = ... в цикле. А по-другому можно?
|
|||
|---|---|---|---|
|
#18+
2 АлексейК Был неправ. Туплю что-то Проверил скорость в DAO-шном варианте (наложить фильтр и сделать OpenRecordset) и в ADO-шном (просто наложить фильтр) Результат... гм... мягко говоря... шокирующий. Разница в 14 раз. В пользу DAO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2003, 14:58 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32363065&tid=1677445]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
161ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 463ms |

| 0 / 0 |
