Главная страница
    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 всеравно не
> обойтись.да ну? а если я настрою мастер детайл,


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


 
Sergey13 ©   (2009-11-09 10:46) [41]

> [40] kyn66 ©   (09.11.09 10:26)
> если за ключом клавной не уследить.

А как ты за ним следишь?

ЗЫ: представляю какой бардак у тебя в данных.


 
Anatoly Podgoretsky ©   (2009-11-09 11:09) [42]

> kyn66  (09.11.2009 10:26:40)  [40]

А надо в нужных, а не в исключительных и никаких проблем с добавлением нет


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

> Не вопрос, можно и так.
вопрос не в том можно или нет, или что предпочесть при разработке, вопрос обошелся я в этом случае без "отбора SQl" или нет?


 
Anatoly Podgoretsky ©   (2009-11-09 11:22) [44]

> sniknik  (09.11.2009 11:10:43)  [43]

Если не видно, то нет никаких SQL запрос по логике.


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


Anatoly Podgoretsky ©   (09.11.09 11:09) [42]
> А надо в нужных, а не в исключительных и никаких проблем
> с добавлением нет


Те же ... только в профиль. Зачем по пустому придирки клеить. И так было понятно об чем речь. ВАс, уважаемый Anatoly Podgoretsky хлебом не корми, дай на кого наехать...


 
Anatoly Podgoretsky ©   (2009-11-09 11:34) [46]

> kyn66  (09.11.2009 11:30:45)  [45]

Какой еще наезд, когда и фильтрует и добавляется без проблем, может тебе стоит посмотреть в свою сторону, а не искать врагов на стороне?


 
kyn66 ©   (2009-11-09 11:44) [47]


> Anatoly Podgoretsky ©   (09.11.09 11:34) [46]
> > kyn66  (09.11.2009 11:30:45)  [45]


Не помню уже точно какая была ситуация (давно было), но проблемы какие то были.


> может тебе стоит посмотреть в свою сторону, а не искать
> врагов на стороне?


А этот бред к чему сказан? Мы тут вроде не в песочнице общей играемся...


 
sniknik ©   (2009-11-09 11:45) [48]

> когда и фильтрует и добавляется без проблем
насчет фильтра... в ADO мастер детайл можно настроить двумя вариантами, первый с применением запросов, второй фильтрацией контента на клиенте...
ну думаю дальше объяснять не надо, если фильтрация уже используется, то с использованием ее еще раз возможны проблемы...
ну и само собой у "противников запросов" (ака приверженцев старой BDE-шной идеологии) проблемы как из рога изобилия.


 
sniknik ©   (2009-11-09 11:49) [49]

> А этот бред к чему сказан? Мы тут вроде не в песочнице общей играемся...
это не бред, и не для песочницы, это как раз очень серьезно. к любой проблеме нужно подходить так как будто ты сам накосячил, или не знаешь чего то, а не кивать на "кривые компоненты/винду/и т.д.". это здравый подход, и оправдывает себя в 97% случаев...
а вот обижаться на непонятый совет, это по детски...


 
Anatoly Podgoretsky ©   (2009-11-09 11:54) [50]

> kyn66  (09.11.2009 11:44:47)  [47]

Как раз в песочнице копаемся.


 
kyn66 ©   (2009-11-09 12:14) [51]


> Anatoly Podgoretsky ©   (09.11.09 11:54) [50]


No comments...


 
Andrewtitoff ©   (2009-11-09 14:05) [52]

А как быть с пустыми полями в таблице?
скажем у меня есть записи
Ветеранов д3 к2 п1
Ветеранов д3 к2 п2
Ветеранов д3 к2 п3
Ветеранов д3 п1
Ветеранов д3 п2
Ветеранов д3 п3

Как в запросе и в сортировке указать что мне нужны именно те записи - где поле корпус пустое?, т.к. при выборе из комбобокса загруженного ранее туда при помоши запроса пустого значения(я так понимаю что оно не пустое - а там неотображаемый символ какой -то) и результат запроса и фильтра АДОТайбла оказываются пустыми... =(((


 
sniknik ©   (2009-11-09 14:09) [53]

> нужны именно те записи - где поле корпус пустое?
WHERE корпус = ""
или
WHERE корпус IS NULL
в зависимости от того, что у тебя там.


 
Сергей М. ©   (2009-11-09 14:11) [54]


> где поле корпус пустое?


SELECT ... FROM .. WHERE (где) MyField (поле корпус) IS NULL (пустое)


 
Andrewtitoff ©   (2009-11-09 14:15) [55]


> sniknik ©   (09.11.09 14:09) [53]
> > нужны именно те записи - где поле корпус пустое?WHERE
> корпус = ""илиWHERE корпус IS NULLв зависимости от того,
>  что у тебя там.

Ну так я сейчас посмотред про помощи Шовмессаге - что получается у меня в фильтре - как раз " корпус = "" " и получается, а таблица с таким фильтром пустой остается....


 
Andrewtitoff ©   (2009-11-09 14:16) [56]


> Сергей М. ©   (09.11.09 14:11) [54]
> > где поле корпус пустое?SELECT ... FROM .. WHERE (где)
> MyField (поле корпус) IS NULL (пустое)

Не совсем, я же из комбобокса выбираю, т.е. запрос выглядит так:

Form1.ADOQuery1.SQL.Text := "select distinct PARNUM from lift WHERE (STREET = """+ComboBox1.Text+""") and (HOUSE = """+ComboBox2.Text+""") and (CORP = """+ComboBox3.Text+""")";


 
Сергей М. ©   (2009-11-09 14:19) [57]


> я же из комбобокса выбираю


Да по барабану откуда ты выбираешь.
Если "пустое" по факту есть NULL, значит и условие отбора д.б. Is NULL, а не =""


 
Andrewtitoff ©   (2009-11-09 14:20) [58]

А не может информация искажаться из - перетаскивания в комбобокс и обратно?
Ну скажем в таблице ячейка равна Nil, а после манипуляций с комбобоксом возвращается в каком нибудь другом виде?


 
Andrewtitoff ©   (2009-11-09 14:22) [59]


> Сергей М. ©   (09.11.09 14:19) [57]
> > я же из комбобокса выбираюДа по барабану откуда ты выбираешь.
> Если "пустое" по факту есть NULL, значит и условие отбора
> д.б. Is NULL, а не =""

Да это я понимаю, я непонимаю как это в запрос вставить, т.е. как подменять "" на NULL...


 
Сергей М. ©   (2009-11-09 14:23) [60]


> в таблице ячейка равна Nil


Не может быть она Nil.
Nil и Null - это две разных разницы.


> перетаскивания в комбобокс и обратно


Как ты упарил уже своими комбобоксами)

Открой MSAccess и потренируйся с запросами к своей таблице, используя встроенный в него визуальный построитель запросов.


 
sniknik ©   (2009-11-09 14:26) [61]

кто такой Шовмессаге? он тебе врет, дай ему в нос... или врешь ты,  дай в нос себе.
или не понимаешь, вот тебя дя понимания чуток правды ...
1 NULL не равно пустой строке, хотя может в нее конвертироваться, иногда неявно.
2 пустая строка не равна пробелу, хотя и там и там видно "пустоту".
3 фильтры составляй сам, по TADOTable помощи не будет никакой, почему сказано в том самом "бредовом" сообщении.
4 нахрапом, пусть и с помощью форума у тебя ничего не выйдет. как ни банально но - учится надо.


 
sniknik ©   (2009-11-09 14:30) [62]

> А не может информация искажаться из - перетаскивания в
простое чтение "в строку",а не в variant, гарантированно "убьет" null.


 
Andrewtitoff ©   (2009-11-09 14:31) [63]


> sniknik ©   (09.11.09 14:26) [61]
> кто такой Шовмессаге? он тебе врет, дай ему в нос... или
> врешь ты,  дай в нос себе.или не понимаешь, вот тебя дя
> понимания чуток правды ... 1 NULL не равно пустой строке,
>  хотя может в нее конвертироваться, иногда неявно.2 пустая
> строка не равна пробелу, хотя и там и там видно "пустоту".
> 3 фильтры составляй сам, по TADOTable помощи не будет никакой,
>  почему сказано в том самом "бредовом" сообщении.4 нахрапом,
>  пусть и с помощью форума у тебя ничего не выйдет. как ни
> банально но - учится надо.

1,2)Да я это прекрасно понимаю поэтому и спрашиваю, у меня такое впечетление что поскольку комбобокс.текст имеет тип стринг и при помещении поля из базы значение NULL пресращается в пустую строку в базе и соответственно когда я делаю запрос при помощи комбобокса я уже делаю запрос с пустой строкой, а база естественно не понимает что пустая сторока - это NULL....


 
Andrewtitoff ©   (2009-11-09 14:32) [64]


> sniknik ©   (09.11.09 14:30) [62]
> > А не может информация искажаться из - перетаскивания впростое
> чтение "в строку",а не в variant, гарантированно "убьет"
> null.

Ну так и я про то же....
Так вот вопрос собственно и заключается в том - как это обойти....


 
Сергей М. ©   (2009-11-09 14:35) [65]


> как это обойти


Если текст комбобокса есть пустая строка, то вместо ="" написать IS NULL

Неужели это так сложно дотумкать ?)


 
Andrewtitoff ©   (2009-11-09 14:39) [66]


> Сергей М. ©   (09.11.09 14:35) [65]
> > как это обойтиЕсли текст комбобокса есть пустая строка,
>  то вместо ="" написать IS NULLНеужели это так сложно дотумкать
> ?)

Не, это то я понимаю, только решение в голову приходит только одно:
вводить строковую переменную, присваивать ей текст комбобокса, потом IF-ом проверять на пустую строку и заменять на IS NULL и потом эту переменную пихать в запрос....

Я вои и додумал может это как то менее громоздко можно сделать?


 
Сергей М. ©   (2009-11-09 14:45) [67]

ну напиши функцию, принимающую параметром строковое значение и возвращающую результатом строку с тем или иным фильтр-условием, в зависимости от значения строки-параметра ..


 
Andrewtitoff ©   (2009-11-09 14:48) [68]


> Сергей М. ©   (09.11.09 14:45) [67]
> ну напиши функцию, принимающую параметром строковое значение
> и возвращающую результатом строку с тем или иным фильтр-
> условием, в зависимости от значения строки-параметра ..

Да, пожалуй так и сделаю, раз никаких хитрых вариантов нету... =)))


 
sniknik ©   (2009-11-09 14:52) [69]

> как то менее громоздко можно сделать?
насчет "громоздкости" это еще вопрос, что будет менее... но по другому сделать завсегда практически можно, например  

... WHERE (:Per = "" AND корпус IS Null) OR (корпус = :Per)

p.s. только не вздумай этим без понимания пользоваться... есть один нюанс который делает такое условие нерабочим (логически верным но не рабочим...).

> ну напиши функцию
в ассессе? ха.


 
Сергей М. ©   (2009-11-09 14:54) [70]


> в ассессе? ха.


В кл.приложении)


 
Andrewtitoff ©   (2009-11-09 14:57) [71]


> sniknik ©   (09.11.09 14:52) [69]
> > как то менее громоздко можно сделать?насчет "громоздкости"
> это еще вопрос, что будет менее... но по другому сделать
> завсегда практически можно, например  ... WHERE (:Per =
> "" AND корпус IS Null) OR (корпус = :Per)p.s. только не
> вздумай этим без понимания пользоваться... есть один нюанс
> который делает такое условие нерабочим (логически верным
> но не рабочим...).


Честно говоря не очень понял - поэтому пока использовать небуду... =)))


> ну напиши функциюв ассессе? ха.


А при чем тут ассесс?


 
sniknik ©   (2009-11-09 15:02) [72]

при том что, это самый "негромоздкий" вариант, если бы аксесс позволял функции (как mssql например), передаешь в параметр всегда одинаково, один параметр, а уже в функции делаешь сравнение на то и другое.


 
Andrewtitoff ©   (2009-11-09 15:02) [73]

Млин... а как различать выбрал ли пользователь пустое поле или ничего не выбрал?, я так понимаю что только через ItemIndex?


 
sniknik ©   (2009-11-09 15:05) [74]

блин, хотя чего это я, есть похожий вариант и без функций -
... WHERE iif(корпус IS Null, "", корпус) = :Per


 
Andrewtitoff ©   (2009-11-09 15:05) [75]

Я же так понимаю - по умолчанию он помоему -1, а если я выберу пустую запись - то будет 0, правильно я рассуждаю?


 
sniknik ©   (2009-11-09 15:06) [76]

> правильно я рассуждаю?
а о чем ты рассуждаешь? (телепатор отказал)


 
Сергей М. ©   (2009-11-09 15:09) [77]


> Andrewtitoff ©   (09.11.09 15:02) [73]


Вот нашиша пользователю видеть в комбосписке пустое значение и выбирать его ?

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


 
Andrewtitoff ©   (2009-11-09 15:09) [78]


> sniknik ©   (09.11.09 15:05) [74]
> блин, хотя чего это я, есть похожий вариант и без функций
> - ... WHERE iif(корпус IS Null, "", корпус) = :Per


А что такое Per?, хотя я в принципе давно уже функцию сделал...., просто боюсь накосячить еще больше с такими запросами... =)))


 
sniknik ©   (2009-11-09 15:12) [79]

> А что такое Per?
сокращение от слова "переменная".


 
Andrewtitoff ©   (2009-11-09 15:12) [80]


> Сергей М. ©   (09.11.09 15:09) [77]
> > Andrewtitoff ©   (09.11.09 15:02) [73]Вот нашиша пользователю
> видеть в комбосписке пустое значение и выбирать его ?Кинь
> на форму крыжик.Если он отмечен юзером, то покажи комбобокс,
>  в списке которого только непустые уник.значения из соотв.
> поля.Если не отчмечен - скрой этот комбобокс или сделай
> его дизейблд.При построении текста запроса или фильтра анализируй
> состояние крыжика и в зависимости от него строй соотв.запрос.
>

Мля,точно это еще большая проблема... =(((
Пользователб же не обьяснишь что просто пустое поле и выбранное пустое поле не одно и то-же... =(((

Чего то я не совсем понял про крыжик... =))))
зачем комбобокс то скрывать?


 
Andrewtitoff ©   (2009-11-09 15:14) [81]


> sniknik ©   (09.11.09 15:12) [79]
> > А что такое Per?сокращение от слова "переменная".

Ясно, но все равно целиком конструкция не ясна... =(((


 
Andrewtitoff ©   (2009-11-09 15:19) [82]

2  Сергей М. ©
Просто не совсем уловил мысль, как например в приведенном выше примере быть:
>А как быть с пустыми полями в таблице?
>скажем у меня есть записи
>Ветеранов д3 к2 п1
>Ветеранов д3 к2 п2
>Ветеранов д3 к2 п3
>Ветеранов д3 п1
>Ветеранов д3 п2
>Ветеранов д3 п3


 
Сергей М. ©   (2009-11-09 15:25) [83]


> Пользователб же не обьяснишь что просто пустое поле и выбранное
> пустое поле не одно и то-же


Где он увидит "просто пустое" и "выбранное пустое" ?
Если юзера не интересует критерий отбора по атрибуту "Корпус", он снимает соотв.крыжик и комбобокс либо исчезает с формы либо становится недоступным..


 
Andrewtitoff ©   (2009-11-09 15:32) [84]


> Сергей М. ©   (09.11.09 15:25) [83]
> > Пользователб же не обьяснишь что просто пустое поле и
> выбранное > пустое поле не одно и то-жеГде он увидит "просто
> пустое" и "выбранное пустое" ?Если юзера не интересует критерий
> отбора по атрибуту "Корпус", он снимает соотв.крыжик и комбобокс
> либо исчезает с формы либо становится недоступным..

Не, ну это как то очень неудобно будет около каждого комбобокса крыжик ставить....
Может тогда попробовать все это сделать при помощи DBLookupComboBox-ов?


 
sniknik ©   (2009-11-09 15:34) [85]

> но все равно целиком конструкция не ясна... =(((
справка по jet + справка по бейсику. go.

>А как быть с пустыми полями в таблице?
это у тебя не пустое значение, раз к нему что-то привязано, это вполне самостоятельное просто не введенное умолчание, типа к1 если он единственный.
его нужно тоже выбирать и обрабатывать... только пустышку пользователям показывать как-то не правильно, замени ее на что нибудь типа "основной корпус" или к0/к1, а после ввода подменяй на пробел/null.

но вообще добрый совет, поручи это программисту...


 
Andrewtitoff ©   (2009-11-09 15:43) [86]


> sniknik ©   (09.11.09 15:34) [85]
> > но все равно целиком конструкция не ясна... =(((справка
> по jet + справка по бейсику. go.>А как быть с пустыми полями
> в таблице?это у тебя не пустое значение, раз к нему что-
> то привязано, это вполне самостоятельное просто не введенное
> умолчание, типа к1 если он единственный.его нужно тоже выбирать
> и обрабатывать... только пустышку пользователям показывать
> как-то не правильно, замени ее на что нибудь типа "основной
> корпус" или к0/к1, а после ввода подменяй на пробел/null.


Хм, а вот это уже идея, действительно можно написать в комбо бокс например "нет" и пользователь должен догадаться что нет корпуса... =)))

Млин, хоть возвращайся к первоначальному варианту с одним комбобоксом и парсить строку.... =))))


> но вообще добрый совет, поручи это программисту...


Я смотрю Вы очень голодны, раз неоднократно намераете на обращение к специалисту, коим собственно говаря в том числе являетесь и Вы... =)))
Но я этого делать не буду т.к. я это делаю в первую очередь для своего самообразования во первых - а во вторых это уже решать не мне т.к. не я же из своего кармана буду платить специалисту за вещь - которая мне в общем то не нужна...


 
Сергей М. ©   (2009-11-09 15:45) [87]


> вещь - которая мне в общем то не нужна


Зачем же ты тогда ее мусолишь которую уже неделю ?)


 
Andrewtitoff ©   (2009-11-09 15:47) [88]


> Сергей М. ©   (09.11.09 15:45) [87]
> > вещь - которая мне в общем то не нужнаЗачем же ты тогда
> ее мусолишь которую уже неделю ?)

1)Для самообразования
2)Это интереснее и полезнее чем мои прямые должностные обязанности, а мне этим позволено в рабочее время заниматься


 
Сергей М. ©   (2009-11-09 15:49) [89]


> 1)Для самообразования


Так возьми да почитай в конце-концов книжку какую-нибудь)


 
Andrewtitoff ©   (2009-11-09 15:51) [90]


> Сергей М. ©   (09.11.09 15:49) [89]
> > 1)Для самообразованияТак возьми да почитай в конце-концов
> книжку какую-нибудь)

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


 
sniknik ©   (2009-11-09 15:53) [91]

> Я смотрю Вы очень голодны, раз неоднократно намераете на обращение к специалисту
а без домыслов нельзя? я на это намекаю(???), нет говорю открытым текстом, т.к. вижу что ты с этим явно не справляешься. и без всяких предложений себя на роль вашего программиста, я даже если предложишь, не пойду. это так абстрактно, неважно какому программисту, но программисту (все одно если нужна была бы операция то нужен был бы хирург, а не кто то другой, ремонт значит ремонтник и т.д.).

> а во вторых это уже решать не мне т.к. не я же из своего кармана буду платить специалисту за вещь - которая мне в общем то не нужна...
значит иди к тем кому нужна и кто решает, и кто это поручил тебе, и говори, "я это сделать не могу, нужен программист".


 
sniknik ©   (2009-11-09 15:55) [92]

> Тем более теория без практики - толку мало
в практике без знаний в интеллектуальных занятиях  еще меньше толку.


 
Сергей М. ©   (2009-11-09 15:59) [93]


> На это у меня сил не хватит


Это почему же ?)


 
Andrewtitoff ©   (2009-11-09 16:02) [94]


> sniknik ©   (09.11.09 15:53) [91]
> > Я смотрю Вы очень голодны, раз неоднократно намераете
> на обращение к специалистуа без домыслов нельзя? я на это
> намекаю(???), нет говорю открытым текстом, т.к. вижу что
> ты с этим явно не справляешься. и без всяких предложений
> себя на роль вашего программиста, я даже если предложишь,
>  не пойду. это так абстрактно, неважно какому программисту,
>  но программисту (все одно если нужна была бы операция то
> нужен был бы хирург, а не кто то другой, ремонт значит ремонтник
> и т.д.).

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


> а во вторых это уже решать не мне т.к. не я же
> из своего кармана буду платить специалисту за вещь - которая
> мне в общем то не нужна...значит иди к тем кому нужна и
> кто решает, и кто это поручил тебе, и говори, "я это сделать
> не могу, нужен программист".

Это пройденный этап, все сказали что будет програмист и дружно забили **й - у нас так всегда, всем все надо, но никто ничего не делает, а во вторых зачем мне это?, отказаться от интересного и полезного задания что бы вернуться к бесполезному перебиранию никому ненужных бумажек и безцельному протиранию штанов?...


 
Andrewtitoff ©   (2009-11-09 16:03) [95]


> Сергей М. ©   (09.11.09 15:59) [93]
> > На это у меня сил не хватитЭто почему же ?)

Ну потому что на работе мне читать не дадут, дома как правило и так забот по горло, да и вообще я читаю очень редко.... =))))


 
Сергей М. ©   (2009-11-09 16:04) [96]


> я читаю очень редко


Потому что писатель ?)


 
Andrewtitoff ©   (2009-11-09 16:07) [97]


> Сергей М. ©   (09.11.09 16:04) [96]
> > я читаю очень редкоПотому что писатель ?)

Ну что то вроде того... =))))
У нас все класически: один пишет, другой читает, третий думает и.т.д.... =)))


 
Сергей М. ©   (2009-11-09 16:13) [98]


> У нас все класически


Теперь я понял, почему у нас так хреново обстоит дело с лифтами)


 
Andrewtitoff ©   (2009-11-09 16:17) [99]


> Сергей М. ©   (09.11.09 16:13) [98]
> > У нас все класическиТеперь я понял, почему у нас так хреново
> обстоит дело с лифтами)

Ну что поделаешь, если бы у нас так хреново только с лифтами обстояло... =)))


 
Сергей М. ©   (2009-11-09 16:22) [100]


> если бы у нас так хреново только с лифтами обстояло


Угу.
И куда ни глянь - везде видна работа писателей. Которые не читатели и не  думатели.


 
Andrewtitoff ©   (2009-11-09 16:23) [101]

Ну так я так понял что другого выбора нет кроме предложенного sniknik ©   (09.11.09 15:34) [85]?


 
Сергей М. ©   (2009-11-09 16:25) [102]

А чем он плох ?


 
sniknik ©   (2009-11-09 16:25) [103]

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


 
Andrewtitoff ©   (2009-11-09 16:26) [104]


> Сергей М. ©   (09.11.09 16:22) [100]
> > если бы у нас так хреново только с лифтами обстоялоУгу.
> И куда ни глянь - везде видна работа писателей. Которые
> не читатели и не  думатели.

Ну каждый должен делать свою работу, если писатель - значит пиши, если читатель - значит читай... =)))


 
sniknik ©   (2009-11-09 16:26) [105]

> А чем он плох ?
отличный вариант вообще то! если вы про третий абзац.


 
Сергей М. ©   (2009-11-09 16:28) [106]


> занимаются чужой и хреново


Но надеются при этом заработать на новые штаны)


 
Andrewtitoff ©   (2009-11-09 16:29) [107]


> sniknik ©   (09.11.09 16:25) [103]
> > везде видна работа писателей.и все на основной работе
> штаны протирают, а занимаются чужой и хреново. (свою само
> собой вообще не делают)

А зачем?, все равно заплатят столько же... =))))
А работать у нас в стране вообще помоему никто не хочет!, кризис не кризис - а работать все равно небуду... =)))
Вот вы попробуйте найти работника на проценты, даже на раскошные проценты - хрен вы его найдете, все хотят оклад, даже если он небольшой - но гарантированный...


 
Andrewtitoff ©   (2009-11-09 16:30) [108]


> sniknik ©   (09.11.09 16:26) [105]
> > А чем он плох ?отличный вариант вообще то! если вы про
> третий абзац.

Не смешно... =))))))
Я про второй....


 
Andrewtitoff ©   (2009-11-09 16:32) [109]


> Сергей М. ©   (09.11.09 16:28) [106]
> > занимаются чужой и хреновоНо надеются при этом заработать
> на новые штаны)

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


 
Anatoly Podgoretsky ©   (2009-11-09 16:34) [110]

> Andrewtitoff  (09.11.2009 16:07:37)  [97]

Ну так думай, что я думаю.
Правильно.


 
sniknik ©   (2009-11-09 16:40) [111]

> Вот вы попробуйте найти работника на проценты, даже на раскошные проценты - хрен вы его найдете
блин, сколько я прошлому начальнику твердил, давай заменим одну прогу на мою и перейдем на проценты с нее... и проблем было бы меньше (дерьмо прога была, жила только на моих "подпорках", при том, что был и мой аналог), и фирме дешевле и я бы уже был бы умеренно богатым (если б налоговая не вмешалась...)... нет, нельзя. типа то контора, а ты просто человек, от конторы гарантий больше (и все они кончились когда там разработчик ушел ;о)..., т.е. все одно в "человеков" все упирается)


 
Andrewtitoff ©   (2009-11-09 16:41) [112]


> Anatoly Podgoretsky ©   (09.11.09 16:34) [110]
> > Andrewtitoff  (09.11.2009 16:07:37)  [97]Ну так думай,
>  что я думаю. Правильно.

Ничего не понял, Вы опять загадками заговорили... =)))


 
Anatoly Podgoretsky ©   (2009-11-09 16:46) [113]

> Andrewtitoff  (09.11.2009 16:41:52)  [112]

Ну кто же на Плюке правду думает.


 
Andrewtitoff ©   (2009-11-09 16:48) [114]


> sniknik ©   (09.11.09 16:40) [111]
> > Вот вы попробуйте найти работника на проценты, даже на
> раскошные проценты - хрен вы его найдетеблин, сколько я
> прошлому начальнику твердил, давай заменим одну прогу на
> мою и перейдем на проценты с нее... и проблем было бы меньше
> (дерьмо прога была, жила только на моих "подпорках", при
> том, что был и мой аналог), и фирме дешевле и я бы уже был
> бы умеренно богатым (если б налоговая не вмешалась...)..
> . нет, нельзя. типа то контора, а ты просто человек, от
> конторы гарантий больше (и все они кончились когда там разработчик
> ушел ;о)..., т.е. все одно в "человеков" все упирается)

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

Но к сожалению как правило начальников не выбирают - это они вас выбирают... =)))

У нас кстати тоже так, неважно что и как функционирует, главное что бы бухгалтерии было удобно!..., у нас например уже 2 месяца связь с участками не работает потому что непонятно кто предоставляет непонятно какой выделенный канал, но зато мы работаем с одной фирмой и в бухгалтерии всего один договор...


 
Сергей М. ©   (2009-11-09 16:50) [115]


> главное что бы бухгалтерии было удобно


Прогибаться под бухгалтерию  - гиблое дело)
Особенно если ты нишиша не смыслишь в бухгалтерии)


 
Andrewtitoff ©   (2009-11-09 16:53) [116]


> Сергей М. ©   (09.11.09 16:50) [115]
> > главное что бы бухгалтерии было удобноПрогибаться под
> бухгалтерию  - гиблое дело)Особенно если ты нишиша не смыслишь
> в бухгалтерии)

А думаете кто-то спрашивает? =)))


 
Сергей М. ©   (2009-11-09 16:56) [117]

А чего вашей доблестной бухгалтерии надо из-под этой убогой базы с одной таблицей и единственным в ней индексом ?)


 
Andrewtitoff ©   (2009-11-09 17:02) [118]


> Сергей М. ©   (09.11.09 16:56) [117]
> А чего вашей доблестной бухгалтерии надо из-под этой убогой
> базы с одной таблицей и единственным в ней индексом ?)

Да не, база не для бухгалтерии..., если бы она была нужна бухгалтерии то давно бы нашли програмиста и оплатили ему работу...



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

Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.81 MB
Время: 0.01 c
2-1257755267
night_light
2009-11-09 11:27
2009.12.27
не запускается отладчик одного из проектов


15-1256515183
POOP
2009-10-26 02:59
2009.12.27
Программа для рисования линий


2-1257500197
Бульбаш
2009-11-06 12:36
2009.12.27
Переключение между гридами на этапе проектирования


2-1257847652
Alex_C
2009-11-10 13:07
2009.12.27
По Handle окна найти окно


2-1257668589
Zheksonz
2009-11-08 11:23
2009.12.27
XPManifest, цвет компонента





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский