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


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


 
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;
Скачать: CL | DM;

Наверх




Память: 0.82 MB
Время: 0.017 c
15-1256703324
Омлет
2009-10-28 07:15
2009.12.27
Занимательное программирование :)


2-1257592439
Rydell
2009-11-07 14:13
2009.12.27
Как в DATASET изменить Тип поля, из ftBLOB в ftGraphic, ftMemo, .


1-1231859045
Игорь_Залозных
2009-01-13 18:04
2009.12.27
DrawText и текст, который не вместился в прямоугольник


2-1257514920
Дмитрий Белькевич
2009-11-06 16:42
2009.12.27
I/O error 23 при чтении файла


1-1230616083
Karburator
2008-12-30 08:48
2009.12.27
сложное заглавие таблицы