Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему не фильтруется ADOQuery?


Страницы:   1 2 3 4 5 6

andrewtitoff ©   (2009-11-08 22:20:00) 

Выдает ошибку 'Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру' в строке Form1.ADOQuery1.Filtered:=true;

procedure TForm2.ComboBox1Change(Sender: TObject);
begin
Form1.ADOTable4.Filter:='STREET = '''+ComboBox1.Text+'''';
Form1.ADOTable4.Filtered:=true;
ComboBox2.Items.Clear;
Form1.ADOQuery1.SQL.Text := 'select STREET and HOUSE from lift';
Form1.ADOQuery1.Open;
while not Form1.ADOQuery1.Eof do
begin
Form1.ADOQuery1.Next;
end;
Form1.ADOQuery1.Filter:='street = '''+ComboBox1.Text+'''';
Form1.ADOQuery1.Filtered:=true;
Form1.ADOQuery1.SQL.Text := 'select distinct HOUSE from lift';
Form1.ADOQuery1.Open;
while not Form1.ADOQuery1.Eof do
begin
Form2.ComboBox2.Items.Add(Form1.ADOQuery1.Fields[0].AsString);
Form1.ADOQuery1.Next;
end;
end;


Сергей М.   (2009-11-09 15:09:00) [41]


> Andrewtitoff ©   (09.11.09 15:02) [73]


Вот нашиша пользователю видеть в комбосписке пустое значение и выбирать его ?

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


Andrewtitoff   (2009-11-09 15:09:00) [42]


> sniknik ©   (09.11.09 15:05) [74]
> блин, хотя чего это я, есть похожий вариант и без функций
> - ... WHERE iif(корпус IS Null, '', корпус) = :Per


А что такое Per?, хотя я в принципе давно уже функцию сделал...., просто боюсь накосячить еще больше с такими запросами... =)))


sniknik   (2009-11-09 15:06:00) [43]

> правильно я рассуждаю?
а о чем ты рассуждаешь? (телепатор отказал)


sniknik   (2009-11-09 15:05:00) [44]

блин, хотя чего это я, есть похожий вариант и без функций -
... WHERE iif(корпус IS Null, '', корпус) = :Per


Andrewtitoff   (2009-11-09 15:05:00) [45]

Я же так понимаю - по умолчанию он помоему -1, а если я выберу пустую запись - то будет 0, правильно я рассуждаю?


sniknik   (2009-11-09 15:02:00) [46]

при том что, это самый "негромоздкий" вариант, если бы аксесс позволял функции (как mssql например), передаешь в параметр всегда одинаково, один параметр, а уже в функции делаешь сравнение на то и другое.


Andrewtitoff   (2009-11-09 15:02:00) [47]

Млин... а как различать выбрал ли пользователь пустое поле или ничего не выбрал?, я так понимаю что только через ItemIndex?


Andrewtitoff   (2009-11-09 14:57:00) [48]


> sniknik ©   (09.11.09 14:52) [69]
> > как то менее громоздко можно сделать?насчет "громоздкости"
> это еще вопрос, что будет менее... но по другому сделать
> завсегда практически можно, например  ... WHERE (:Per =
> '' AND корпус IS Null) OR (корпус = :Per)p.s. только не
> вздумай этим без понимания пользоваться... есть один нюанс
> который делает такое условие нерабочим (логически верным
> но не рабочим...).


Честно говоря не очень понял - поэтому пока использовать небуду... =)))


> ну напиши функциюв ассессе? ха.


А при чем тут ассесс?


Сергей М.   (2009-11-09 14:54:00) [49]


> в ассессе? ха.


В кл.приложении)


sniknik   (2009-11-09 14:52:00) [50]

> как то менее громоздко можно сделать?
насчет "громоздкости" это еще вопрос, что будет менее... но по другому сделать завсегда практически можно, например  

... WHERE (:Per = '' AND корпус IS Null) OR (корпус = :Per)

p.s. только не вздумай этим без понимания пользоваться... есть один нюанс который делает такое условие нерабочим (логически верным но не рабочим...).

> ну напиши функцию
в ассессе? ха.


Andrewtitoff   (2009-11-09 14:48:00) [51]


> Сергей М. ©   (09.11.09 14:45) [67]
> ну напиши функцию, принимающую параметром строковое значение
> и возвращающую результатом строку с тем или иным фильтр-
> условием, в зависимости от значения строки-параметра ..

Да, пожалуй так и сделаю, раз никаких хитрых вариантов нету... =)))


Сергей М.   (2009-11-09 14:45:00) [52]

ну напиши функцию, принимающую параметром строковое значение и возвращающую результатом строку с тем или иным фильтр-условием, в зависимости от значения строки-параметра ..


Andrewtitoff   (2009-11-09 14:39:00) [53]


> Сергей М. ©   (09.11.09 14:35) [65]
> > как это обойтиЕсли текст комбобокса есть пустая строка,
>  то вместо ='' написать IS NULLНеужели это так сложно дотумкать
> ?)

Не, это то я понимаю, только решение в голову приходит только одно:
вводить строковую переменную, присваивать ей текст комбобокса, потом IF-ом проверять на пустую строку и заменять на IS NULL и потом эту переменную пихать в запрос....

Я вои и додумал может это как то менее громоздко можно сделать?


Сергей М.   (2009-11-09 14:35:00) [54]


> как это обойти


Если текст комбобокса есть пустая строка, то вместо =''написать IS NULL

Неужели это так сложно дотумкать ?)


Andrewtitoff   (2009-11-09 14:32:00) [55]


> sniknik ©   (09.11.09 14:30) [62]
> > А не может информация искажаться из - перетаскивания впростое
> чтение "в строку",а не в variant, гарантированно "убьет"
> null.

Ну так и я про то же....
Так вот вопрос собственно и заключается в том - как это обойти....


Andrewtitoff   (2009-11-09 14:31:00) [56]


> sniknik ©   (09.11.09 14:26) [61]
> кто такой Шовмессаге? он тебе врет, дай ему в нос... или
> врешь ты,  дай в нос себе.или не понимаешь, вот тебя дя
> понимания чуток правды ... 1 NULL не равно пустой строке,
>  хотя может в нее конвертироваться, иногда неявно.2 пустая
> строка не равна пробелу, хотя и там и там видно "пустоту".
> 3 фильтры составляй сам, по TADOTable помощи не будет никакой,
>  почему сказано в том самом "бредовом" сообщении.4 нахрапом,
>  пусть и с помощью форума у тебя ничего не выйдет. как ни
> банально но - учится надо.

1,2)Да я это прекрасно понимаю поэтому и спрашиваю, у меня такое впечетление что поскольку комбобокс.текст имеет тип стринг и при помещении поля из базы значение NULL пресращается в пустую строку в базе и соответственно когда я делаю запрос при помощи комбобокса я уже делаю запрос с пустой строкой, а база естественно не понимает что пустая сторока - это NULL....


sniknik   (2009-11-09 14:30:00) [57]

> А не может информация искажаться из - перетаскивания в
простое чтение "в строку",а не в variant, гарантированно "убьет" null.


sniknik   (2009-11-09 14:26:00) [58]

кто такой Шовмессаге? он тебе врет, дай ему в нос... или врешь ты,  дай в нос себе.
или не понимаешь, вот тебя дя понимания чуток правды ...
1 NULL не равно пустой строке, хотя может в нее конвертироваться, иногда неявно.
2 пустая строка не равна пробелу, хотя и там и там видно "пустоту".
3 фильтры составляй сам, по TADOTable помощи не будет никакой, почему сказано в том самом "бредовом" сообщении.
4 нахрапом, пусть и с помощью форума у тебя ничего не выйдет. как ни банально но - учится надо.


Сергей М.   (2009-11-09 14:23:00) [59]


> в таблице ячейка равна Nil


Не может быть она Nil.
Nil и Null - это две разных разницы.


> перетаскивания в комбобокс и обратно


Как ты упарил уже своими комбобоксами)

Открой MSAccess и потренируйся с запросами к своей таблице, используя встроенный в него визуальный построитель запросов.


Andrewtitoff   (2009-11-09 14:22:00) [60]


> Сергей М. ©   (09.11.09 14:19) [57]
> > я же из комбобокса выбираюДа по барабану откуда ты выбираешь.
> Если "пустое" по факту есть NULL, значит и условие отбора
> д.б. Is NULL, а не =""

Да это я понимаю, я непонимаю как это в запрос вставить, т.е. как подменять '' на NULL...


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо