Filter по дате для ADO объекта

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

Filter по дате для ADO объекта

Сообщение Ol1965 » 27.04.2007 (Пт) 13:36

Подскажите, почему rsAccount.Filter="tDate=13/11/2007" выдает ошибку, а вместе с тем rsAccount.Filter="tDate>13/11/2007" - отрабатывает нормально для всех условий кроме "=". И именно с датами. Заранее благодарен.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 27.04.2007 (Пт) 14:09

#13/11/2007#
:?:
Лучший способ понять что-то самому — объяснить это другому.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 27.04.2007 (Пт) 22:36

MS Access?

Wachamakolit
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 13.06.2007 (Ср) 20:26
Откуда: Новосибирск

Сообщение Wachamakolit » 13.06.2007 (Ср) 20:49

Не хотелось создавать новую тему, вопрос примерно по теме ADO 2.8 под VB6 хочу создать фильтр: zakazRs.Filter = "ZakDate BETWEEN #01/01/2007# AND #02/01/2007#" при отладке выдает ошибку: 3001 Аргументы имеют неверный, выходят за пределы допутимого диапазона... ну и тд :cry: Перебирал всё, менял год на короткий, меня местами месяц и день. При этом под DAO этот фильтр работает на ура и никада мне мозг не бибикал. у меня ступор. :shock:

UPD: База Access 2000

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 13.06.2007 (Ср) 20:56

Некоторые конструкции в ADO не работают. Попробуй так
Код: Выделить всё
zakazRs.Filter = "ZakDate >= #01/01/2007# AND ZakDate <= #02/01/2007#"

Wachamakolit
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 13.06.2007 (Ср) 20:26
Откуда: Новосибирск

Сообщение Wachamakolit » 13.06.2007 (Ср) 21:15

skiperski писал(а):Некоторые конструкции в ADO не работают. Попробуй так
Код: Выделить всё
zakazRs.Filter = "ZakDate >= #01/01/2007# AND ZakDate <= #02/01/2007#"


Спасиба тебе добрый человек :) Сам бы до этого не дошел.

А где ваще можно посмотреть чего еще ADO не умеет делать?
А то вот щас обнаружил в коде если писать так:
Код: Выделить всё
zakazRs.Filter = "ZakDate=#" & Month(Dt) & "/" & Day(Dt) & "/" & Year(Dt) & "#"
то в наборе ничего нет, хотя данные точно есть, а если поменять местами Month и Day
Код: Выделить всё
zakazRs.Filter = "ZakDate=#" & Day(Dt) & "/" & Month(Dt) & "/" & Year(Dt) & "#"
то всё заработает как часы китайскиё :? Мож мне пора спать?

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 13.06.2007 (Ср) 21:38

Wachamakolit писал(а):А где ваще можно посмотреть чего еще ADO не умеет делать?

Точно не знаю, наверное в MSDN'е. Точно знаю, что конструкция IN не работает.

Wachamakolit писал(а):а если поменять местами Month и Day... то всё заработает как часы китайскиё :?

Это какой-то глюк. Ещё чего-то такое было с пробельными символами между условием и знаками оперций, т.е. Field=Value не всегда работает так как Field = Value. Поэтому я всегда отделяю пробелами операции.

По поводу дат: попробуй запросить не как дату, а как строку в формате "yyyy-mm-dd". Почти все понимают этот формат и тут не перепутаешь день с месяцем.

ЗЫ: Форматировать дату красИвее не
Код: Выделить всё
"#" & Month(Dt) & "/" & Day(Dt) & "/" & Year(Dt) & "#"

а с помощью функции Format$()
Код: Выделить всё
Format(Dt, "\#mm\/dd\/yyyy\#")


Wachamakolit писал(а):Мож мне пора спать?

Утро вечера мудренее. :)

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.06.2007 (Пн) 11:22

Пример:

Код: Выделить всё
    Const dtf As String = "'yyyy-mm-dd'"
    Dim cn As ADODB.Connection, r As New ADODB.Recordset
    Dim db As Date, de As Date
   
    db = #5/3/2007#
    de = #5/4/2007#
   
    Set cn = CurrentProject.AccessConnection
    r.Open "SELECT [Date] FROM [MyTable] ORDER BY 1", cn, adOpenStatic, adLockReadOnly
    r.Filter = "DATASD>=" & Format$(db, dtf) & " AND DATASD<=" & Format$(de, dtf)
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 10.07.2007 (Вт) 21:47

А подскажите, уважаемые, следует ли пользоваться фильтром, или лучше составить новый параметрический запрос с условием "WHERE"?
Код: Выделить всё
dim c as adodb.command, r as adodb.recordset

set c=new adodb.command
set c.activeconnection = conn
c.commandtype=adcmdtext
c.commandtext="SELECT * FROM [main] WHERE [partNum] Like ? AND [Descr] Like ?"
c.parameters.add c.createparameter("strParam1", advarwchar, adparaminput, 255, strParam1)
c.parameters.add c.createparameter("strParam2", advarwchar, adparaminput, 255, strParam2)

set r=new adodb.recordset
r.open c,,adopenstatic,adlockreadonly
С уважением, Сергей.


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

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

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

    TopList