Страницы: 1
RSS
Выгрузка данных из Акссесс на основании данных Листбокс, CREATE VIEW на основании ЛистБокс
 
Доброго времени суток уважаемые жители планеты!
С помощью SQL вывожу в Листбокс данные (двумя Комбобоксами отбираю нужное).
Сделал два варианта вывода отобраных данных. Оба рабочие, но как мне кажется не очень быстрые при больших объемах.
Вариант 1: вывод из ЛистБокс без участия SQL(можно было бы и просто массивом, но все колонки ЛистБокс в таблице не нужны).
Вариант 2: Циклом по строкам ЛистБокс (Каждая новая строка - новый запрос).
Но закралась мысль о третьем варианте с помощью создания временной, виртуальной БД (ListBox  в массив, а затем в CREATE VIEW). Суть вопроса: можно ли данные ListBox перенести в CREATE VIEW?
Заранее огромное спасибо всем!
 
Цитата
Ronin751 написал: но как мне кажется не очень быстрые при больших объемах
Так и есть.
Можно так.
Скрытый текст
Изменено: Doober - 23.02.2016 01:52:48
 
Цитата
За  не возврат курсора вам двойка
Ой! :oops:
Так и вправду в разы быстрее. Спасибо Вам огромное!
П.С. Штудирую интернет на тему, как массив ListBox перенести в CREATE VIEW, а потом от туда на лист. Но всё четно. Уже почти смирился с проблемой.  
 
Доброе время суток
А что вам мешает то же самое делать запросом к базе? Вывод Recordset на лист через Range.CopyFromRecordset Recodrset, где Recordset - это результат запроса к базе по значениям фильтров в Combobox, а не выполнено аналогично через IFF.
Успехов.
 
Цитата
Андрей VG написал:
как массив ListBox перенести в CREATE VIEW, а потом от туда на лист
А сразу на лист нельзя?
 
Цитата
А что вам мешает то же самое делать запросом к базе?
    Здравствуйте Андрей! ListBox служит только для визуализации выполненных условий отбора. В оригренале, отбор может производится и из другого ListBox другой формы. Пользователь видит, какая именно информация будет идти на печать и только уж потом принимает решение о необходимости печати. Поэтому я и думаю, что за критэрий (при печати) нужно брать iD первой колонки ListBox. Но перебором получалось довольно долго (пробовал на 5000 строк - около 40 сек). Вот задался вопросом по поводу ListBox перенести в CREATE VIEW. Но где я не искал, так и не нашел. А сам, видать, еще не дорос до этого.
Цитата
А сразу на лист нельзя?
  Доброго вечера Юрий! Doober создал пример, который работает почти в 10 раз быстрее чем мой вариант с перебором (вывод из ListBox на Лист без участия удаленной БД). А прямым массивом перекидовать на Лист не подходит, из-за отсутствия необходимости выводить все колонки ListBox, а так же других условий при выводе данных (= IIf(.List(i, 4) = "[Не выполнен]", "", .List(i, 4)) )
 
Понял. А может тогда и не нужно в ЛистБокс забирать то, что не требуется? ))
 
)) Информация в ЛистБоксе нужна для выполнения дальнейших операций. По этому не выводить её не могу.К сожалению. Но все же спасибо за совет!
 
Доброе время суток
Цитата
Ronin751 написал:
В оригренале, отбор может производится и из другого ListBox другой формы.
В вашем выложенном варианте этого, согласитесь, не видно ни разу. Если структура данные в этом другом ListBox формируется тоже при помощи SQL (пусть и с дополнительными фильтрами, наложенными при помощи иных элементов управления), то точно также можно выгружать данные непосредственно из базы. Если же данные того ListBox - суть какой-то ручной ввод или правка существующих значений, о чём базе, естественно, нет информации, то выгружайте данные ListBox сразу в массив - зачем это делать поэлементно?
Код
Dim listData As Variant
listData = ListBox1.List
Если нужно последующее преобразование элементов массива перед выводом на лист. Ну, или сразу на лист ;)
Успехов
P. S. А Create View всего лишь команда языка DDL, создающая (упрощённо) именованный запрос к таблице(ам) базы данных, соответственно, к элементам формы VBA не имеющая никакого отношения.
Изменено: Андрей VG - 24.02.2016 06:36:55
 
Цитата
В вашем выложенном варианте этого, согласитесь, не видно ни разу.
Во вложении этого не делал, по скольку, как мне кажется, это не относится к сути вопроса.
Цитата
структура данные в этом другом ListBox формируется тоже при помощи SQL
Вы правы. Именно так. Но предварительно данные выгружаю в ЛистБокс главной формы, (для наглядности). А уж из ЛистБокс, при необходимости, на Лист для печати. Вот и получается, что ни количества строк, ни порядок их, я предугадать не в силах.
Если обойти момент визуализации данных (выгрузку в ЛистБокс главной формы) то тогда я конечно же с Вами согласен, будет даже проще. Но пользователю не удобно выводить на печать то, чего он не видит. Но спасибо за совет и уделенное время!
Страницы: 1
Наверх