Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.07.05;
Скачать: [xml.tar.bz2];

Вниз

работает ли такой запрос в Ацесе?   Найти похожие ветки 

 
Ponchic ©   (2009-05-15 13:48) [0]

вот в делфи ставиш фильтр и генерится вот такая строка
почему не работает интересно?
date>="08.05.2009 9:19:19" and date<="08.05.2009 9:19:19" and (1=0 or nalichka=1 or nalichka=4)


 
Palladin ©   (2009-05-15 13:58) [1]

фильтр не исполняется и не является sql запросом к субд


 
Сергей М. ©   (2009-05-15 13:59) [2]


> вот в делфи ставиш фильтр


Ты про какой "фильтр" ? В делфи их всякоразных как грязи)..


 
Ponchic ©   (2009-05-15 14:00) [3]

date>="08.05.2009 9:19:19" and date<="08.05.2009 9:19:19" например вот эта строка работает
и работает если date>="08.05.2009 9:19:19" and date<="08.05.2009 9:19:19" and nalichka=1
а ту которую написал выше
не работает почему та


 
Ponchic ©   (2009-05-15 14:02) [4]

про фильтр который в ADOQuery


 
Сергей М. ©   (2009-05-15 14:03) [5]

Что значит не работает ?
ПРямо вот так и говорит "не работаю" ?


 
Сергей М. ©   (2009-05-15 14:07) [6]


> про фильтр который в ADOQuery


Ты про св-во Filter что ли ?
Так оно само по себе ничего не "генерит" - какую строку ты сам указал в свойстве, та строка и будет содержимым WHERE-статьи


 
Ponchic ©   (2009-05-15 14:07) [7]

значит выдает ошибку
аргументы имеют неверный тип, выходят за пределы допустимого диапозона или вступают в конфликт друг с другом


 
Сергей М. ©   (2009-05-15 14:12) [8]

А кем собссно "генерится вот такая строка", если не тобой самим ?


 
Ponchic ©   (2009-05-15 14:18) [9]

DateTimePicker1_1.Time := DateTimePicker1_3.Time;
 DateTimePicker1_2.Time := DateTimePicker1_4.Time;
 date1Str := DateTimeToStr(DateTimePicker1_1.DateTime);
 date2Str := DateTimeToStr(DateTimePicker1_2.DateTime);
 Filter :="date>="""+date1Str+""" and date<="""+date2Str+"""";
 if (CheckBox1_1.checked or  CheckBox1_2.checked or CheckBox1_3.checked or CheckBox1_4.checked) then

begin
    filter :=  filter + " and (";

 if CheckBox1_1.checked then
     filter := filter +" or (nalichka=1)"  ;

 if CheckBox1_2.Checked then
       filter := filter + " or (nalichka=4)" ;

 if CheckBox1_3.Checked then
       filter := filter + "or (nalichka=2)";

 if CheckBox1_4.Checked then
       filter:= filter + " or (nalichka=3)";

filter := filter + ")";
end;
ADOQuery1.Filter := filter;
edit18.text:=  ADOQuery1.Filter;
//ShowMessage(ADOQuery1.Filter);
 ADOQuery1.Filtered:=true;


 
Ponchic ©   (2009-05-15 14:19) [10]

ой тут уже переделал
раньше другое было
ну думаю сами поймете что было в коде где условия стоят


 
Сергей М. ©   (2009-05-15 14:22) [11]

Так тобой же самим и генерится строка фильтра ! Что ж ты лапшу вешаешь ?)

А поле "nalichka" у тебя какого типа ?


 
Медвежонок Пятачок ©   (2009-05-15 14:23) [12]

почему не работает интересно?
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-15 14:23) [13]


> раньше другое было
> ну думаю сами поймете что было


Да-да .. делать нам больше нечего, как в только догадалки с тобой играть) ..


 
Ponchic ©   (2009-05-15 14:26) [14]

filter :=  filter + " and (1=0";

 if CheckBox1_1.checked then
     filter := filter +" or nalichka=1"  ;

 if CheckBox1_2.Checked then
       filter := filter + " or nalichka=4" ;

 if CheckBox1_3.Checked then
       filter := filter + "or nalichka=2";

 if CheckBox1_4.Checked then
       filter:= filter + " or nalichka=3";

filter := filter + ")";

вот такой текст был в условии!
не работает ето значит выдает ошибку которую я написал выше....


 
Сергей М. ©   (2009-05-15 14:28) [15]


> Медвежонок Пятачок ©   (15.05.09 14:23) [12]


Он утверждает, что отлуп получен не по причине пустого результирующего НД - до его формирования просто дело не доходит.

При этом он утверждает, что Access хавает строку вида date>="08.05.2009 9:19:19" и не давится. Это, afaik, м.б. только если дата у него хранится в строковом виде.


 
Сергей М. ©   (2009-05-15 14:29) [16]


> Ponchic ©   (15.05.09 14:26) [14]


Ты с программой MS Access вообще знаком ?


 
Ponchic ©   (2009-05-15 14:30) [17]

дата хранится в формате дата и время
Наличка это цифровой формат


 
Медвежонок Пятачок ©   (2009-05-15 14:30) [18]

квери + филтер это же локальная фильтрация на клиенте
ttable + филтер - серверная (если сервер есть)


 
Медвежонок Пятачок ©   (2009-05-15 14:31) [19]

да просто тупо нет записей со значением 08.05.2009 9:19:19


 
Сергей М. ©   (2009-05-15 14:37) [20]


> квери + филтер это же локальная фильтрация на клиенте


С чего бы вдруг ?

И тейбл и квери - оба наследники АДОДейтаСета, который как раз и объявляет св-во Фильтр ..


> тупо нет записей со значением 08.05.2009 9:19:19


Он утверждает иное:


> date>="08.05.2009 9:19:19" and date<="08.05.2009 9:19:19"
> например вот эта строка работает


 
Ponchic ©   (2009-05-15 14:40) [21]

а дописываеш дальше строку and (nalichka=1) кажется работала уже не помню точно
а вот and(nalichka=1 or nalichka=2) уже не работает


 
Медвежонок Пятачок ©   (2009-05-15 14:40) [22]

С чего бы вдруг ?

подозреваю с того, что писатели tquery и адоквери поленились написать объединение двух where. из sql.text и filter

в случае с ttable where только один в фильтре


 
Ponchic ©   (2009-05-15 14:47) [23]

хе хе
че та вы совсем не о том...


 
Сергей М. ©   (2009-05-15 14:50) [24]


> Ponchic ©   (15.05.09 14:47) [23]


хехекать будешь потом)

Я тебе вопрос задал, см. [16]


 
Ponchic ©   (2009-05-15 14:52) [25]

какой вопрос?


 
Сергей М. ©   (2009-05-15 14:54) [26]

Ты что, дурку включил ?)

Я спрашиваю, знаком ли ты с программой MS Access.. И если знаком. то почему не опробовал текст своего запроса прямо в конструкторе запросов MS Access ..


 
Anatoly Podgoretsky ©   (2009-05-15 14:55) [27]

Да просто фильтр неправильный, а правильный замучаешься делать.


 
Сергей М. ©   (2009-05-15 15:02) [28]


> Anatoly Podgoretsky ©   (15.05.09 14:55) [27]


Хочешь сказать, что там заморочки с парсером выражения для лок.фильтрации ?


 
Anatoly Podgoretsky ©   (2009-05-15 15:02) [29]

> Сергей М.  (15.05.2009 14:54:26)  [26]

Сергей откуда ты взял, что фильтр выполняется через запрос, ведь это в общем случае не возможно, запросы могут быть любой сложности, а фильтр действует на результат оригинального запроса.


 
Anatoly Podgoretsky ©   (2009-05-15 15:04) [30]

> Сергей М.  (15.05.2009 15:02:28)  [28]

Не заморочки, а особые правила объединения AND/OR частей, кстати в справке не документировано. В справке все примеры простые.
Если бы человек был бы нормальный, то я бы посоветовал не использовать локальную фильтрацию.


 
Медвежонок Пятачок ©   (2009-05-15 15:07) [31]

Хочешь сказать, что там заморочки с парсером выражения для лок.фильтрации ?

я хочу сказать, что если взять ttable mssql и использовать свойство filter, то на сервер уйдет запрос select * from table where <filter>

а если заменить ttable на tquery то запрос полетит такой как в tquery.sql, а filter будет применяться локально


 
Сергей М. ©   (2009-05-15 15:30) [32]


> посоветовал не использовать локальную фильтрацию


Ну если уж она так нужна, то можно плюнуть на св-во Filter и организовать фильтацию в событии OnFilterRecord - куда уж проще и наглядней получится


 
sniknik ©   (2009-05-15 20:45) [33]

> а особые правила объединения 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")


 
Anatoly Podgoretsky ©   (2009-05-15 20:58) [34]

> sniknik  (15.05.2009 20:45:33)  [33]

Видимо я плохо смотрел, ты более везучий.


 
Ponchic ©   (2009-05-15 22:25) [35]

я англ плохо знаю...
что в этой справке написано?
(LastName = "Smith" OR LastName = "Jones") AND FirstName = "John" можно вот так юзать?
иль надо вот так? (LastName = "Smith" AND FirstName = "John") OR (LastName = "Jones" AND FirstName = "John")


 
turbouser ©   (2009-05-15 22:38) [36]

а я так и не понял смысл этого:
and (1=0 or nalichka=1 or nalichka=4)


 
sniknik ©   (2009-05-15 23:17) [37]

> что в этой справке написано?
правила расстановки AND и OR в фильтре.

но зачем тебе это если у тебя запрос, где эти правила несущественны? и кстати там у тебя не с расстановками операторов проблемы, у тебя там генерируется что-то не то... смени генератор.


 
Ponchic ©   (2009-05-16 08:12) [38]

короча подскажите какая строка запроса должна быть?
задача такая фильтр должен отфильтровать по дате - он работает
далее если поставлена первая галочка, т надо еще вытащить nalichka=1 если еще и поставлена вторая галочка, то надо вытащить и nalichka=1 и nalichka=4
там конеш 4 галочки
ну думаю если две разберусь..., то и 4 должен


 
Нат   (2009-05-17 01:24) [39]

Так мы строим фильтр или запрос?
Если фильтр, причем тут акцесс? Фильтр применяется к отобранному набору данных.

Если запрос, типа "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-17 15:36) [40]

хе
интересно
получается впринципи компонент AdoQuery  не нужен?
хотя я че та запутался...

т.е получается когда ставиш фильтр это уже клиент из полученый инфы достает нужную инфу?
т.е лучше делать через sql запросы?


 
Нат   (2009-05-18 07:10) [41]

какой-то компонент по-любому нужен для получения набора данных.
что использовать, фильтр или условие в запросе - по ситуации, т.е.  от задачи



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.07.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.005 c
2-1242622208
товарищ вася
2009-05-18 08:50
2009.07.05
Подвисание формы


15-1241011871
Savek
2009-04-29 17:31
2009.07.05
Безопасность компьютера может быть под угрозой


15-1241591266
Медвежонок Пятачок
2009-05-06 10:27
2009.07.05
файерфокс тупит или я


2-1242476766
partizan
2009-05-16 16:26
2009.07.05
Warning: FOR-Loop variable "i" may be undefined after loop


8-1194953765
Lebedev
2007-11-13 14:36
2009.07.05
Проблема с MediaPlayer.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский