я разобрался скорей всего где у меня бага:
дело в том, что я постранично заполняю листвью. (ещё незнал про абсолютпейдж). Делал примерно так:
1. Запросил данные
2. Переменная iStep * 50 указывала на положение в данных
3. Делал при каждом обновлении листвью инкремент или уменьшение iStep +/- 1
4. Смещался на
rs.MoveFirst
rs.MoveNext на (iStep * 50) - 50
(это всё примерно, код сам не такой, но суть такая)
5. Заливал листвью 50 записями
и...
закрывал рекордсет!
следущий инкремент заново открывал rs (отсюда и тормоза) и всё по новому. Работало без проблем, пока я не прикрутил реальную БД. Изначально я тренировался на 200 записей примерно, а на 30.000 уже пошло тормозить.
Теперь я объявляю рекордсет как паблик в отдельном модуле:
- Код: Выделить всё
Public vRS As New ADODB.Recordset
Однако, не смотря на то, что я нашёл причину тормозов, у меня есть несколько вопросов "пунктуации" кода.
1. Правильно ли я делаю, когда уничтожаю rs при закрытии child окна, таким образом:
- Код: Выделить всё
Set vRS = Nothing
, или его желательно прибивать иначе и/или где-то в ином месте?
2. В приложении 4 окна, каждое предназначено для своих целей, поэтому, мне требуется четыре независимых rs но, работающих с одной и той же базой (отличаются запросами). Как правильно объявить recordsets в этом случае?
- Код: Выделить всё
Public vRS As New ADODB.Recordset
Public vRS1 As New ADODB.Recordset
Public vRS2 As New ADODB.Recordset
Public vRS3 As New ADODB.Recordset
дело в том, что не факт, что окно откроют, а рекордсет уже проинициализируется и займёт место в памяти... может его как-то динамически создавать, (и как это делается), или его создавать только при загрузке чайлд-окна?
3. Если, к примеру, в четырех rs будет примерно 30.000, 15.000, 10.000, 2.000 записей соответственно, не сильно ли это скажется на подвисании компьютера?