Конференция "Начинающим" » работает ли такой запрос в Ацесе?
 
  • Ponchic © (15.05.09 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 © (15.05.09 13:58) [1]
    фильтр не исполняется и не является sql запросом к субд
  • Сергей М. © (15.05.09 13:59) [2]

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


    Ты про какой "фильтр" ? В делфи их всякоразных как грязи)..
  • Ponchic © (15.05.09 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 © (15.05.09 14:02) [4]
    про фильтр который в ADOQuery
  • Сергей М. © (15.05.09 14:03) [5]
    Что значит не работает ?
    ПРямо вот так и говорит "не работаю" ?
  • Сергей М. © (15.05.09 14:07) [6]

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


    Ты про св-во Filter что ли ?
    Так оно само по себе ничего не "генерит" - какую строку ты сам указал в свойстве, та строка и будет содержимым WHERE-статьи
  • Ponchic © (15.05.09 14:07) [7]
    значит выдает ошибку
    аргументы имеют неверный тип, выходят за пределы допустимого диапозона или вступают в конфликт друг с другом
  • Сергей М. © (15.05.09 14:12) [8]
    А кем собссно "генерится вот такая строка", если не тобой самим ?
  • Ponchic © (15.05.09 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 © (15.05.09 14:19) [10]
    ой тут уже переделал
    раньше другое было
    ну думаю сами поймете что было в коде где условия стоят
  • Сергей М. © (15.05.09 14:22) [11]
    Так тобой же самим и генерится строка фильтра ! Что ж ты лапшу вешаешь ?)

    А поле "nalichka" у тебя какого типа ?
  • Медвежонок Пятачок © (15.05.09 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)


    потому что нет записей удовлетворяющих условию. либо все удовлетворяют условию.

    в зависимости от того что ты вложил в понятие "не работает"
  • Сергей М. © (15.05.09 14:23) [13]

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


    Да-да .. делать нам больше нечего, как в только догадалки с тобой играть) ..
  • Ponchic © (15.05.09 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 + ')';

    вот такой текст был в условии!
    не работает ето значит выдает ошибку которую я написал выше....
  • Сергей М. © (15.05.09 14:28) [15]

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


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

    При этом он утверждает, что Access хавает строку вида date>='08.05.2009 9:19:19' и не давится. Это, afaik, м.б. только если дата у него хранится в строковом виде.
  • Сергей М. © (15.05.09 14:29) [16]

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


    Ты с программой MS Access вообще знаком ?
  • Ponchic © (15.05.09 14:30) [17]
    дата хранится в формате дата и время
    Наличка это цифровой формат
  • Медвежонок Пятачок © (15.05.09 14:30) [18]
    квери + филтер это же локальная фильтрация на клиенте
    ttable + филтер - серверная (если сервер есть)
  • Медвежонок Пятачок © (15.05.09 14:31) [19]
    да просто тупо нет записей со значением 08.05.2009 9:19:19
  • Сергей М. © (15.05.09 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 © (15.05.09 14:40) [21]
    а дописываеш дальше строку and (nalichka=1) кажется работала уже не помню точно
    а вот and(nalichka=1 or nalichka=2) уже не работает
  • Медвежонок Пятачок © (15.05.09 14:40) [22]
    С чего бы вдруг ?

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

    в случае с ttable where только один в фильтре
  • Ponchic © (15.05.09 14:47) [23]
    хе хе
    че та вы совсем не о том...
  • Сергей М. © (15.05.09 14:50) [24]

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


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

    Я тебе вопрос задал, см. [16]
  • Ponchic © (15.05.09 14:52) [25]
    какой вопрос?
  • Сергей М. © (15.05.09 14:54) [26]
    Ты что, дурку включил ?)

    Я спрашиваю, знаком ли ты с программой MS Access.. И если знаком. то почему не опробовал текст своего запроса прямо в конструкторе запросов MS Access ..
  • Anatoly Podgoretsky © (15.05.09 14:55) [27]
    Да просто фильтр неправильный, а правильный замучаешься делать.
  • Сергей М. © (15.05.09 15:02) [28]

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


    Хочешь сказать, что там заморочки с парсером выражения для лок.фильтрации ?
  • Anatoly Podgoretsky © (15.05.09 15:02) [29]
    > Сергей М.  (15.05.2009 14:54:26)  [26]

    Сергей откуда ты взял, что фильтр выполняется через запрос, ведь это в общем случае не возможно, запросы могут быть любой сложности, а фильтр действует на результат оригинального запроса.
  • Anatoly Podgoretsky © (15.05.09 15:04) [30]
    > Сергей М.  (15.05.2009 15:02:28)  [28]

    Не заморочки, а особые правила объединения AND/OR частей, кстати в справке не документировано. В справке все примеры простые.
    Если бы человек был бы нормальный, то я бы посоветовал не использовать локальную фильтрацию.
  • Медвежонок Пятачок © (15.05.09 15:07) [31]
    Хочешь сказать, что там заморочки с парсером выражения для лок.фильтрации ?

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

    а если заменить ttable на tquery то запрос полетит такой как в tquery.sql, а filter будет применяться локально
  • Сергей М. © (15.05.09 15:30) [32]

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


    Ну если уж она так нужна, то можно плюнуть на св-во Filter и организовать фильтацию в событии OnFilterRecord - куда уж проще и наглядней получится
  • sniknik © (15.05.09 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')
 
Конференция "Начинающим" » работает ли такой запрос в Ацесе?
Есть новые Нет новых   [134477   +39][b:0][p:0.001]