![]() |
| ||
|
|
Новости |
Поиск |
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;
sniknik (2009-11-09 01:02:00) [101]> найти как это одним запросом сделать... =((((
что это? 3 независимых набора полей получить?
тебе же прямо здесь сказали (чего инет перерывать?)
Омлет © (09.11.09 00:12) [9]
>> distinct
>Он возвращает униикальные строки.
но вообще можно, без проблем, если в "столбик", 3 запроса скрепить union-ами... ну и добавить признак разделитель.
блин, по моему, то что я сейчас сделаю так это - даю ответ на вопрос "как же сделать Y" по классификации
http://gunsmoker.blogspot.com/2008/10/x-y-z.html
Омлет (2009-11-09 01:02:00) [102]> нигде не найти как это одним запросом сделать
А что сделать одним запросом? Объясни.
Как получить список домов на улице такой-то я выше написал. Как получить список квартир в выбранном доме - да просто в where добавится условие flat=x, но это будет второй запрос, который произойдет после выбора дома пользователем.
Омлет (2009-11-09 00:57:00) [103]> После выбора улицы в первом комбобоксе нужно заполнить второй
> комбобокс номерами домов находящихся только на этой улице
> и без повторов
SELECT DISTINCT house FROM address_t
WHERE STREET = 'Бориса Ельцина'
Что за таблица lift - мне не ясно.
Германн (2009-11-09 00:55:00) [104]
> Германн © (09.11.09 00:44) [14]
>
>
> > Млин, ну подскажите кто-нибудь, уже весь инет перерыл
> -
> > нигде не найти как это одним запросом сделать... =((((
> >
>
> Да вроде именно так как в andrewtitoff © (09.11.09 00:
> 02) [8]
Хотя нет. Вру. Так не получится то, что (как я понял надо).
Возможное решение неявно предложено в:
> andrewtitoff © (08.11.09 23:10) [5]
>
> А можно сделать запрос что бы одним запросом повторить это
> для 3-х полей?
>
То бишь я имею в виду "вложенные запросы".
Германн (2009-11-09 00:44:00) [105]
> Млин, ну подскажите кто-нибудь, уже весь инет перерыл -
> нигде не найти как это одним запросом сделать... =((((
>
Да вроде именно так как в andrewtitoff © (09.11.09 00:02) [8]
Только я бы туда добавил секцию GROUP BY
andrewtitoff (2009-11-09 00:34:00) [106]
> Германн © (09.11.09 00:29) [12]
> > Вы говорите загадками... =)))Имхо АП имел в виду > Form1.
> ADOQuery1.SQL.Text := 'select STREET and HOUSE from > lift';
>
А, ну наверное... =))))
Млин, ну подскажите кто-нибудь, уже весь инет перерыл - нигде не найти как это одним запросом сделать... =((((
Германн (2009-11-09 00:29:00) [107]
> Вы говорите загадками... =)))
Имхо АП имел в виду
> Form1.ADOQuery1.SQL.Text := 'select STREET and HOUSE from
> lift';
andrewtitoff (2009-11-09 00:27:00) [108]хотя нет, не выполняется..., вообще как то странно работает... =(((
andrewtitoff (2009-11-09 00:25:00) [109]
> Омлет © (09.11.09 00:12) [9]
> > distinct Он возвращает униикальные строки.
А как сделать что бы возвращать уникальные поля?
Хотя нет, кстати он вообще возвращает не то, т.е. для первого поля возвращает все как нужно, а для остальных distinct вроде работает, а вот условие WHERE STREET = '''+ComboBox1.Text+''''; игнорируется... =(((
Омлет (2009-11-09 00:12:00) [110]> distinct
Он возвращает униикальные строки.
andrewtitoff (2009-11-09 00:02:00) [111]Как сделать для нескольких DISTINCT полей?
Form1.ADOQuery1.SQL.Text := 'select distinct HOUSE , CORP , PARNUM from lift WHERE STREET = '''+ComboBox1.Text+'''';
В таком виде запрос убирает дубликаты только у первого поля... =(((
andrewtitoff (2009-11-08 23:27:00) [112]
> Anatoly Podgoretsky © (08.11.09 23:18) [6]
> > andrewtitoff (08.11.2009 22:56:03) [3]Не это а выше
Вы говорите загадками... =)))
Anatoly Podgoretsky (2009-11-08 23:18:00) [113]> andrewtitoff (08.11.2009 22:56:03) [3]
Не это а выше
andrewtitoff (2009-11-08 23:10:00) [114]А можно сделать запрос что бы одним запросом повторить это для 3-х полей?
andrewtitoff (2009-11-08 23:01:00) [115]Все, разобрался!, я сделал так:
Form1.ADOQuery1.SQL.Text := 'select distinct HOUSE from lift WHERE STREET = '''+ComboBox1.Text+'''';
andrewtitoff (2009-11-08 22:56:00) [116]
> Anatoly Podgoretsky © (08.11.09 22:43) [2]
> > andrewtitoff (08.11.2009 22:20:00) [0]Что за дурдом
> в запросе написан, сам изобретал синтаксис, или в каком
> то хитром учебнике это прочил?
в инете нарыл, но работает же...
А как правильно?
так тож нехочет:
Form1.ADOQuery1.SQL.Text := 'select distinct HOUSE from lift WHERE '''+ComboBox1.Text+'''';
Как правильно то сделать? =(((
Anatoly Podgoretsky (2009-11-08 22:43:00) [117]> andrewtitoff (08.11.2009 22:20:00) [0]
Что за дурдом в запросе написан, сам изобретал синтаксис, или в каком то хитром учебнике это прочил?
andrewtitoff (2009-11-08 22:23:00) [118]А в целом задача такая:
После выбора улицы в первом комбобоксе нужно заполнить второй комбобокс номерами домов находящихся только на этой улице и без повторов