Фильтрованный recordset в excel копируется нефильтрованным

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Фильтрованный recordset в excel копируется нефильтрованным

Сообщение Костя » 17.02.2005 (Чт) 14:25

rs.filter = "дата_время > '11-фев-2005'"
xlSheet.Range("a2", "h2").CopyFromRecordset rs

В результате rs копируется в нефильтрованном виде, хотя в DataGrid'е после
set datagrid.datasource = rs
всё нормально (отображается отфильтрованный rs).
Если копировать через цикл (for i = 1 to rs.recordcount, и внутри цикла в каждую ячейку записывать значение), то тоже всё записывается нормально, но это же корявый способ! Никто не знает, в чём дело?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 17.02.2005 (Чт) 14:40

Советую задавать дату в формате #yyyy/mm/dd#.
Lasciate ogni speranza, voi ch'entrate.

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 17.02.2005 (Чт) 14:55

Дело не в дате. Когда я фильтрую другие колонки, где числа (формат number), наблюдается то же самое.
Всё бывает!

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 17.02.2005 (Чт) 15:17

клонируй его , а уже потом отправляй в эксель

Код: Выделить всё
rs.filter ....
set rs1=rs.clone
xlSheet.Range("a2", "h2").CopyFromRecordset rs1

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 17.02.2005 (Чт) 15:26

Не помогло! То же самое!
Всё бывает!

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 17.02.2005 (Чт) 17:56

Так не получится
Свойство Filter - это заморочки клиентского курсора. На самом деле данные из рекордсета никуда не деваются. Поэтому успешно копируются.

Я вижу 2 варианта:
1) использовать настоящую кверю для копирования данных в Excel: http://support.microsoft.com/kb/q295646/
2) если данных в самом рекордсете очень много, а после фильтрации получается мало, и через запрос не хочется, то использовать метод GetRows (он вернет 2-мерный массив - в первом столбце данные, во втором - номер записи) и проходиться потом уже по этому массиву:

Код: Выделить всё
rs.Filter...

Dim v as Variant
v = rs.GetRows(rs.RecordCount)

Dim i as long
For i = LBound(v, 2) To UBound(v, 2)
      'поехали копировать v(0, i)
Next
Учиться - значит открывать для себя то, что уже знаешь. <...> Учить - значит напоминать другим о том, что они знают это также хорошо, как и ты. <...> Лучше всего ты учишь тому, чему тебе самому больше всего надо научиться. (Р. Бах)


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron