![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
работает ли такой запрос в Ацесе?
Ponchic © (2009-05-15 13:48:00)вот в делфи ставиш фильтр и генерится вот такая строка
почему не работает интересно?
date>='08.05.2009 9:19:19' and date<='08.05.2009 9:19:19' and (1=0 or nalichka=1 or nalichka=4)
Нат (2009-05-18 07:10:00) [1]какой-то компонент по-любому нужен для получения набора данных.
что использовать, фильтр или условие в запросе - по ситуации, т.е. от задачи
Ponchic (2009-05-17 15:36:00) [2]хе
интересно
получается впринципи компонент AdoQuery не нужен?
хотя я че та запутался...
т.е получается когда ставиш фильтр это уже клиент из полученый инфы достает нужную инфу?
т.е лучше делать через sql запросы?
Нат (2009-05-17 01:24:00) [3]Так мы строим фильтр или запрос?
Если фильтр, причем тут акцесс? Фильтр применяется к отобранному набору данных.
Если запрос, типа "select field1,... where ..." то, чтобы акцесс правильно отработал select по дате, замучаешься (в смысле, пока въедешь) преобразовывать дату в соответствующий формат.
По умолчанию, акцесс принимает американский формат представления
"mm/dd/yyyy".
Надежнее дату подставлять как параметр. Тогда дата преобразуется автоматически, все выражения нужно ограничить скобками и, желательно, общие скобки:
strSQL:="select field1,..., field10 where ((A=B) and (DateField = :DateParam))";
//Основную часть запроса отлаживаем прямо в акцессе, потом добавляем условия
ADOQuery1.SQL:= strSQL;
// а лучше использовать более универсальный компонент
ADODataSet1.CommandText:= strSQL;
ADOQuery1.Parameters.ParseSQL(strSQL, true);
prm:=ADOQuery1.Parameters.ParamByName('DateParam');
prm.DataType :=ftDateTime; // - обязательно, иначе может не сработать
prm.Direction:= pdInput; //default value
prm.Value:=now(); //или датовая переменная
ADOQuery1.ExecSQL;
Использую ADODataSet и ADOCommand, но вроде методы правильные
Ponchic (2009-05-16 08:12:00) [4]короча подскажите какая строка запроса должна быть?
задача такая фильтр должен отфильтровать по дате - он работает
далее если поставлена первая галочка, т надо еще вытащить nalichka=1 если еще и поставлена вторая галочка, то надо вытащить и nalichka=1 и nalichka=4
там конеш 4 галочки
ну думаю если две разберусь..., то и 4 должен
sniknik (2009-05-15 23:17:00) [5]> что в этой справке написано?
правила расстановки AND и OR в фильтре.
но зачем тебе это если у тебя запрос, где эти правила несущественны? и кстати там у тебя не с расстановками операторов проблемы, у тебя там генерируется что-то не то... смени генератор.
turbouser (2009-05-15 22:38:00) [6]а я так и не понял смысл этого:
and ( 1=0or nalichka=1 or nalichka=4)
Ponchic (2009-05-15 22:25:00) [7]я англ плохо знаю...
что в этой справке написано?
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John' можно вот так юзать?
иль надо вот так? (LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')
Anatoly Podgoretsky (2009-05-15 20:58:00) [8]> sniknik (15.05.2009 20:45:33) [33]
Видимо я плохо смотрел, ты более везучий.
sniknik (2009-05-15 20:45:00) [9]> а особые правила объединения AND/OR частей, кстати в справке не документировано.
вот из моей справки, там есть...
There is no precedence between AND and OR. Clauses can be grouped within parentheses. However, you cannot group clauses joined by an OR and then join the group to another clause with an AND, like this:
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
Instead, you would construct this filter as
(LastName = 'Smith' AND FirstName = 'John') OR (LastName = 'Jones' AND FirstName = 'John')
Сергей М. (2009-05-15 15:30:00) [10]
> посоветовал не использовать локальную фильтрацию
Ну если уж она так нужна, то можно плюнуть на св-во Filter и организовать фильтацию в событии OnFilterRecord - куда уж проще и наглядней получится
Медвежонок Пятачок (2009-05-15 15:07:00) [11]Хочешь сказать, что там заморочки с парсером выражения для лок.фильтрации ?
я хочу сказать, что если взять ttable mssql и использовать свойство filter, то на сервер уйдет запрос select * from table where <filter>
а если заменить ttable на tquery то запрос полетит такой как в tquery.sql, а filter будет применяться локально
Anatoly Podgoretsky (2009-05-15 15:04:00) [12]> Сергей М. (15.05.2009 15:02:28) [28]
Не заморочки, а особые правила объединения AND/OR частей, кстати в справке не документировано. В справке все примеры простые.
Если бы человек был бы нормальный, то я бы посоветовал не использовать локальную фильтрацию.
Anatoly Podgoretsky (2009-05-15 15:02:00) [13]> Сергей М. (15.05.2009 14:54:26) [26]
Сергей откуда ты взял, что фильтр выполняется через запрос, ведь это в общем случае не возможно, запросы могут быть любой сложности, а фильтр действует на результат оригинального запроса.
Сергей М. (2009-05-15 15:02:00) [14]
> Anatoly Podgoretsky © (15.05.09 14:55) [27]
Хочешь сказать, что там заморочки с парсером выражения для лок.фильтрации ?
Anatoly Podgoretsky (2009-05-15 14:55:00) [15]Да просто фильтр неправильный, а правильный замучаешься делать.
Сергей М. (2009-05-15 14:54:00) [16]Ты что, дурку включил ?)
Я спрашиваю, знаком ли ты с программой MS Access.. И если знаком. то почему не опробовал текст своего запроса прямо в конструкторе запросов MS Access ..
Ponchic (2009-05-15 14:52:00) [17]какой вопрос?
Сергей М. (2009-05-15 14:50:00) [18]
> Ponchic © (15.05.09 14:47) [23]
хехекать будешь потом)
Я тебе вопрос задал, см. [16]
Ponchic (2009-05-15 14:47:00) [19]хе хе
че та вы совсем не о том...
Ponchic (2009-05-15 14:40:00) [20]а дописываеш дальше строку and (nalichka=1) кажется работала уже не помню точно
а вот and(nalichka=1 or nalichka=2) уже не работает