![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему не фильтруется ADOQuery?
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...