Форум: "Начинающим";
Текущий архив: 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