Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Вниз

Почему не фильтруется 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.61 MB
Время: 0.007 c
4-1225873060
Андрей
2008-11-05 11:17
2009.12.27
Скопировать файл в буфер обмена


8-1201295650
kblc
2008-01-26 00:14
2009.12.27
GDI+ и изображения


2-1257500615
1234567890
2009-11-06 12:43
2009.12.27
AddObject


15-1256681905
Германн
2009-10-28 01:18
2009.12.27
Мнемоника


15-1256703324
Омлет
2009-10-28 07:15
2009.12.27
Занимательное программирование :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский