Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.27;
Скачать: CL | DM;

Вниз

Почему не фильтруется ADOQuery?   Найти похожие ветки 

 
andrewtitoff ©   (2009-11-08 22:20) [0]

Выдает ошибку "Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру" в строке 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;


 
andrewtitoff ©   (2009-11-08 22:23) [1]

А в целом задача такая:
После выбора улицы в первом комбобоксе нужно заполнить второй комбобокс номерами домов находящихся только на этой улице и без повторов


 
Anatoly Podgoretsky ©   (2009-11-08 22:43) [2]

> andrewtitoff  (08.11.2009 22:20:00)  [0]

Что за дурдом в запросе написан, сам изобретал синтаксис, или в каком то хитром учебнике это прочил?


 
andrewtitoff ©   (2009-11-08 22:56) [3]


> 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+"""";

Как правильно то сделать? =(((


 
andrewtitoff ©   (2009-11-08 23:01) [4]

Все, разобрался!, я сделал так:

Form1.ADOQuery1.SQL.Text := "select distinct HOUSE from lift WHERE STREET = """+ComboBox1.Text+"""";


 
andrewtitoff ©   (2009-11-08 23:10) [5]

А можно сделать запрос что бы одним запросом повторить это для 3-х полей?


 
Anatoly Podgoretsky ©   (2009-11-08 23:18) [6]

> andrewtitoff  (08.11.2009 22:56:03)  [3]

Не это а выше


 
andrewtitoff ©   (2009-11-08 23:27) [7]


> Anatoly Podgoretsky ©   (08.11.09 23:18) [6]
> > andrewtitoff  (08.11.2009 22:56:03)  [3]Не это а выше

Вы говорите загадками... =)))


 
andrewtitoff ©   (2009-11-09 00:02) [8]

Как сделать для нескольких DISTINCT полей?
Form1.ADOQuery1.SQL.Text := "select distinct HOUSE , CORP , PARNUM from lift WHERE STREET = """+ComboBox1.Text+"""";

В таком виде запрос убирает дубликаты только у первого поля... =(((


 
Омлет ©   (2009-11-09 00:12) [9]

> distinct

Он возвращает униикальные строки.


 
andrewtitoff ©   (2009-11-09 00:25) [10]


> Омлет ©   (09.11.09 00:12) [9]
> > distinct Он возвращает униикальные строки.

А как сделать что бы возвращать уникальные поля?

Хотя нет, кстати он вообще возвращает не то, т.е. для первого поля возвращает все как нужно, а для остальных distinct вроде работает, а вот условие WHERE STREET = """+ComboBox1.Text+""""; игнорируется... =(((


 
andrewtitoff ©   (2009-11-09 00:27) [11]

хотя нет, не выполняется..., вообще как то странно работает... =(((


 
Германн ©   (2009-11-09 00:29) [12]


> Вы говорите загадками... =)))

Имхо АП имел в виду
> Form1.ADOQuery1.SQL.Text := "select STREET and HOUSE from
> lift";


 
andrewtitoff ©   (2009-11-09 00:34) [13]


> Германн ©   (09.11.09 00:29) [12]
> > Вы говорите загадками... =)))Имхо АП имел в виду > Form1.
> ADOQuery1.SQL.Text := "select STREET and HOUSE from > lift";
>

А, ну наверное... =))))

Млин, ну подскажите кто-нибудь, уже весь инет перерыл - нигде не найти как это одним запросом сделать... =((((


 
Германн ©   (2009-11-09 00:44) [14]


> Млин, ну подскажите кто-нибудь, уже весь инет перерыл -
> нигде не найти как это одним запросом сделать... =((((
>

Да вроде именно так как в andrewtitoff ©   (09.11.09 00:02) [8]
Только я бы туда добавил секцию GROUP BY


 
Германн ©   (2009-11-09 00:55) [15]


> Германн ©   (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:57) [16]

> После выбора улицы в первом комбобоксе нужно заполнить второй
> комбобокс номерами домов находящихся только на этой улице
> и без повторов

SELECT DISTINCT house FROM address_t
 WHERE STREET = "Бориса Ельцина"


Что за таблица lift - мне не ясно.


 
sniknik ©   (2009-11-09 01:02) [17]

> найти как это одним запросом сделать... =((((
что это? 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) [18]

> нигде не найти как это одним запросом сделать

А что сделать одним запросом? Объясни.
Как получить список домов на улице такой-то я выше написал. Как получить список квартир в выбранном доме - да просто в where добавится условие flat=x, но это будет второй запрос, который произойдет после выбора дома пользователем.


 
Омлет ©   (2009-11-09 01:05) [19]

> запроса скрепить union-ами...

Скрепить можно только, если в скрепляемых выборках одинаковый набор полей.
А ему, похоже, надо скрепить список домов со списком подъездов и списком квартир - полная билиберда.


 
sniknik ©   (2009-11-09 01:11) [20]

> А что сделать одним запросом? Объясни.
ИМХО, он подготавливает данные для фильтрации (???!!!).

> если в скрепляемых выборках одинаковый набор полей.
неважно, главное одинаковый тип (или конвертируемый к одинаковому) а там у него строки.
а дома от подъездов разделяются признаком разделителем (простое поле константа в каждом запросе с разным значением)


 
Омлет ©   (2009-11-09 01:17) [21]

> [20] sniknik ©   (09.11.09 01:11)
> а дома от подъездов разделяются признаком разделителем

Ужас. ИМХО, не надо подгатавливать сразу все данные, типа список всех уникальных улиц, список всех уникальных номеров домов и т.д. Надо делать так, что пока не выбрана улица, поле с номером дома неактивно; пока не выбраны улица и дом, поле со списком квартир неактивно и т.д. Это обычные зависимые селекты, с простыми, как пробка, запросами.


 
Омлет ©   (2009-11-09 01:20) [22]

Хоть бы никогда andrewtitoff не пришлось работать с КЛАДРом, а то запарит вопросами ))


 
Германн ©   (2009-11-09 01:22) [23]


> блин, по моему, то что я сейчас сделаю так это - даю ответ
> на вопрос "как же сделать Y"

Именно так.
Только имхо я более прав в понимании Y. :)
Автору нужен НД, (в котором будут уникальные номера домов по заданной улице, (в котором будут уникальные номера корпусов в этих домах, (в котором будут уникальные номера квартир))).


 
Омлет ©   (2009-11-09 01:22) [24]

> 3 запроса скрепить union-ами...

union all-ами )))


 
andrewtitoff ©   (2009-11-09 01:24) [25]

2 All
Бррр..., по молчали -молчали - а то выдали... =))))

В общем обьясняю подробно:
Имеется таблица, где поле номер 1 - улица, 2- дом, 3-корпус, 4 - парадная, для каждого из полей есть свой комбобокс - куда заносятся значения соответствующего столбца без повторов, тока вот задача в том - что бы когда в первом комбобоксе будет выбрана улица - в остальных комбобоксах оказались значения полей которые сожержатся только в записях с этой улицей и естественно без повторов....


 
Омлет ©   (2009-11-09 01:29) [26]

> [25] andrewtitoff ©   (09.11.09 01:24)

Ну так сделай на каждый комбобокс свой запрос. Зачем изгаляться?
И вообще, по-моему, лучше делать жестко зависимые поля (см. [21]) по иерархии данных.
Или хочется выбрать все дома, в которых есть 66 квартира на улице Вязов?


 
andrewtitoff ©   (2009-11-09 01:30) [27]


> Омлет ©   (09.11.09 01:17) [21]
> > [20] sniknik ©   (09.11.09 01:11)> а дома от подъездов
> разделяются признаком разделителем Ужас. ИМХО, не надо подгатавливать
> сразу все данные, типа список всех уникальных улиц, список
> всех уникальных номеров домов и т.д. Надо делать так, что
> пока не выбрана улица, поле с номером дома неактивно; пока
> не выбраны улица и дом, поле со списком квартир неактивно
> и т.д. Это обычные зависимые селекты, с простыми, как пробка,
>  запросами.

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


 
andrewtitoff ©   (2009-11-09 01:36) [28]


> Омлет ©   (09.11.09 01:29) [26]
> > [25] andrewtitoff ©   (09.11.09 01:24)Ну так сделай на
> каждый комбобокс свой запрос. Зачем изгаляться?И вообще,
>  по-моему, лучше делать жестко зависимые поля (см. [21])
> по иерархии данных.Или хочется выбрать все дома, в которых
> есть 66 квартира на улице Вязов?

Ну может и такое быть, а во вторых корпуса и порадные могут быть, а могут и не быть например Ветеранов д5 п3 и Ветеранов д5 к2 т.е. получается что в первом случае после выбора дома нужно сразу знать номера парадных, а во втором случае они ненужны...


 
Омлет ©   (2009-11-09 01:40) [29]

> [28] andrewtitoff ©   (09.11.09 01:36)

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


 
andrewtitoff ©   (2009-11-09 01:45) [30]


> Омлет ©   (09.11.09 01:40) [29]
> > [28] andrewtitoff ©   (09.11.09 01:36)Не, ну понятно,
> что пока не выбрана парадная, выводятся все квартиры выбранного
> дома.Но, пока дом не выбран, поля квартиры, парадной и этажа
> должны быть задисаблены.Выбрали дом - заполняем эти поля.
>

Ну в принципе логично, только проблемы то не решает, все равно у нас получается два поля....
Как тогда при выборе номера дома заполнить корпуса и парадные одновременно?


 
Германн ©   (2009-11-09 01:51) [31]


> В общем обьясняю подробно:

Мой телепатор сработал правильно. :)


 
Омлет ©   (2009-11-09 01:54) [32]

> Как тогда при выборе номера дома заполнить корпуса и парадные
> одновременно?

Два запроса. Один за другим.


 
andrewtitoff ©   (2009-11-09 02:03) [33]


> Германн ©   (09.11.09 01:51) [31]
> > В общем обьясняю подробно:Мой телепатор сработал правильно.
>  :)

Так а сделать то можно одним запросом или как говорит

> Омлет ©   (09.11.09 01:54) [32]
> > Как тогда при выборе номера дома заполнить корпуса и парадные
> > одновременно?Два запроса. Один за другим.

Делать несколькими запросами?

Просто с одной стороны я уже сам склоняюсь к нескольким запросам, но просто уже можно сказать дело принципа - узнать можно ли это одним запросом сделать или нет?...


 
sniknik ©   (2009-11-09 02:10) [34]

Омлет ©   (09.11.09 01:54) [32]
> Два запроса. Один за другим.
блинЮ да я ему даже наглядный пример показвал
http://delphimaster.net/view/2-1257618815/
пост [32]

из которого единственное что он понял, что его типа пытаются оскорбить...


 
Омлет ©   (2009-11-09 02:11) [35]

> можно ли это одним запросом сделать или нет?...

Можно - как сказал sniknik: union all + разделители-константы.
Но тогда тебе придется это разбират на стороне клиента, отделять корпуса от квартир, квартиры от парадных и т.д. Плюс озаботится тем, чтобы выбранные константы-разделители никогда не попали в базу.


 
sniknik ©   (2009-11-09 02:13) [36]

> можно ли это одним запросом сделать или нет?...
а разве я тебе тут не написал вариант? а в прошлой ветке тебе про множественные рекордсеты не говорили?
принципиальный ты наш...


 
Германн ©   (2009-11-09 02:15) [37]


> andrewtitoff ©   (09.11.09 02:03) [33]
>
>
> > Германн ©   (09.11.09 01:51) [31]
> > > В общем обьясняю подробно:Мой телепатор сработал правильно.
>
> >  :)
>
> Так а сделать то можно одним запросом или как говорит
>
> > Омлет ©   (09.11.09 01:54) [32]
> > > Как тогда при выборе номера дома заполнить корпуса и
> парадные
> > > одновременно?Два запроса. Один за другим.
>
> Делать несколькими запросами?
>
> Просто с одной стороны я уже сам склоняюсь к нескольким
> запросам, но просто уже можно сказать дело принципа - узнать
> можно ли это одним запросом сделать или нет?...
>

Могу только сказать, что одним запросом не обойдешься.
И ещё подсказка. "Вложенность структур".


 
kyn66 ©   (2009-11-09 09:50) [38]


> andrewtitoff ©   (09.11.09 01:24) [25]
> тока вот задача в том - что бы когда
> в первом комбобоксе будет выбрана улица - в остальных комбобоксах
> оказались значения полей которые сожержатся только в записях
> с этой улицей и естественно без повторов....


Задействовать TDBLookupCombo. Однако без отбора SQl по ComboBox.onChange всеравно не обойтись. Делал похожую задачу по телефонной БД.


 
sniknik ©   (2009-11-09 10:06) [39]

> Однако без отбора SQl по ComboBox.onChange всеравно не обойтись.
да ну? а если я настрою мастер детайл, и запросы оно будет само "унутрях" формировать, не привлекая меня, это будет считаться, что обошелся без них?

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

p.s. хотя конечно настраивать мастер детайл по строковым полям как то дико...


 
kyn66 ©   (2009-11-09 10:26) [40]


> sniknik ©   (09.11.09 10:06) [39]
> > Однако без отбора SQl по ComboBox.onChange всеравно не
> обойтись.да ну? а если я настрою мастер детайл,


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



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

Текущий архив: 2009.12.27;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.01 c
15-1256481374
berlios
2009-10-25 17:36
2009.12.27
Треугольник


15-1256592610
Юрий
2009-10-27 00:30
2009.12.27
С днем рождения ! 27 октября 2009 вторник


8-1172599000
shart
2007-02-27 20:56
2009.12.27
Удаление шума на изображении


3-1232568724
Amid
2009-01-21 23:12
2009.12.27
Orqcle10g + Delphi 6, 7


2-1257513309
Бульбаш
2009-11-06 16:15
2009.12.27
Если позволите вернусь к теме обсуждения