Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проверка поля в базе

35K
11 сентября 2009 года
alesoleg
44 / / 30.05.2009
Зравствуйте. Подскажите как проверить поле в базе, а именно пусто ли оно или нет.
Поле типа "memo", подключаюсь через ZQuery. Допустим поле названо "FAM".
35K
11 сентября 2009 года
alesoleg
44 / / 30.05.2009
там этого нет, может я плохо смотрел. Мне надо через условие if
22K
11 сентября 2009 года
АНК
3 / / 15.10.2006
попробуй так, может поможет:
 
Код:
if(ZQuery->FieldValues["FAM"].IsEmpty()) {
 // -----------------
  }
  else {
 // -----------------
  }

или
 
Код:
if(ZQuery->FieldValues["FAM"].IsNull()) {
 // -----------------
  }
  else {
 // -----------------
  }
35K
11 сентября 2009 года
alesoleg
44 / / 30.05.2009
Оно чего то не работает. Подробно: когда в DBGrid у меня "ходит" курсор по строкам, условие if должно проверять не пусто ли у меня поле в данной строке, и если не пусто то выводить в TMemo строку, например
"нашлось" а если пусто то нечего. Прописываю код в ZQuery1AfterScroll но неработает как хотелось бы.
246
12 сентября 2009 года
GIZMO
1.8K / / 30.07.2004
Цитата: alesoleg
Оно чего то не работает. Подробно: когда в DBGrid у меня "ходит" курсор по строкам, условие if должно проверять не пусто ли у меня поле в данной строке, и если не пусто то выводить в TMemo строку, например
"нашлось" а если пусто то нечего. Прописываю код в ZQuery1AfterScroll но неработает как хотелось бы.


прописывай в DBGrid::OnDrawDataCell
{
...
if(!DBGrid1->DataSource->DataSet->FieldValues["FAM"].IsNull())
{
// нашлось

35K
12 сентября 2009 года
alesoleg
44 / / 30.05.2009
Спасибо, буду пробовать
35K
12 сентября 2009 года
alesoleg
44 / / 30.05.2009
Нет не хочет.Пишу такой код:
 
Код:
if(!DBGrid1->DataSource->DataSet->FieldValues["FAM"].IsNull())
 {Memo1->Text =ZQuery1->FieldByName("IMA")->AsString;}

УСЛОВИЕ ДРУГОЕ НО СМЫСЛ ОДИН И ТОТ ЖЕ. Условию всёравно пусто ли поле FAM или нет выводит даные из поля IMA постоянно.
92
12 сентября 2009 года
Тень Пса
2.2K / / 19.10.2006
дык не факт, что оно NULL когда пустое... есть там ф-я IsEmpty?
35K
12 сентября 2009 года
alesoleg
44 / / 30.05.2009
Извините я вас не понял: "...есть там ф-я IsEmpty?", где есть?
1
13 сентября 2009 года
kot_
7.3K / / 20.01.2000
Возьмите отладчик и проверьте как выполняется ваш код. Если ваше поле не NULL но при этом пустое, значит выполняйте обе проверки например так:
 
Код:
if(!DBGrid1->DataSource->DataSet->FieldValues["FAM"]->IsNull() || DBGrid1->DataSource->DataSet->FieldValues["FAM"]->AsString != ""){

что в этом сложного?
35K
13 сентября 2009 года
alesoleg
44 / / 30.05.2009
Да, действительно!Спасибо.
33K
17 сентября 2009 года
Posix86749
54 / / 13.07.2009
Я что-тоне понял проблемы
Может просто делать как-то так:
 
Код:
...
if(!Query->FieldByName("Fam")->AsString.IsEmpty)
{...}

так будет проще
1
17 сентября 2009 года
kot_
7.3K / / 20.01.2000
Вероятно можно и так.
Но я точно уже не помню во первых, обрабатывает ли IsEmpty состояние поля NULL. Во вторых я бы контроль за дефолтным значением возлагал бы на БД - а на клиенте только бы обрабатывал исключение. Какая бы ни была форма проверки - в любом случае на клиенте это будет изрядно тормозить - и при первой же возможности стоит перенести все это в базу (на сервер). ИМХО.
33K
18 сентября 2009 года
Posix86749
54 / / 13.07.2009
А можно в Query поместить запрос типа:
 
Код:
SELECT * FROM table
WHERE FAM<>''

тогда строки с пустым полем FAM просто не будут выводиться:) тоже вариант мне кажеться:)
1
18 сентября 2009 года
kot_
7.3K / / 20.01.2000
ну собственно чтото подобное я и имею ввиду. только проверку обязательно нужно делать как на пустое значение, так и на NULL - потому что это не одно и тоже.
33K
18 сентября 2009 года
Posix86749
54 / / 13.07.2009
На самом деле мне кажеться, проверку надо какую-то одну из двух делать, а что бы определиться какая именно нужна, надо просто на структуру таблицы посмотреть или дебагером пройтись, о чем, собственно, было уже сказано выше:)
1
18 сентября 2009 года
kot_
7.3K / / 20.01.2000
Нет. Запрос должен выглядеть
 
Код:
SELECT * FROM table
WHERE fam IS NOT NULL OR fam <> ' '

если пустые значения не допустимы - значит надо выполнять проверку и на их отсутсвие тоже.
А при обработке значения просто обрабатывать исключения.
33K
18 сентября 2009 года
Posix86749
54 / / 13.07.2009
Ну в принципе, я думаю что если использовать условие:
 
Код:
WHERE fam IS NOT NULL OR fam <> ''

ничего страшного, но просто мне интересно, если, например, поле имеет значение integer или любое другое численное значение, то зачем нам нужна проверка :
 
Код:
...fam <>''
?
равно как и при типе поля, к примеру, char(..) зачем нам нужна будет проверка:
 
Код:
...fam IS NOT NULL...
?
зачем в условии проводить проверку на равенство значениям, которых заведомо не может быть.
Более того, если я не ошибаюсь, то если поле будет иметь какой либо числовой тип, то проверка:
 
Код:
...fam <>''
вообще вызовет ошибку
1
18 сентября 2009 года
kot_
7.3K / / 20.01.2000
Цитата: Posix86749

Более того, если я не ошибаюсь,


ошибаешься. Точнее ты путаешь пустое значение и NULL. а это разные вещи. Если речь идет о числовом поле - то второе условие будет лишним - но в строковом поле значение может быть пустым но не NULL. В работающем коде эту проверку должна бы выполнятся немного по другому - как именно подумай сам - но выполнятся должна.

33K
18 сентября 2009 года
Posix86749
54 / / 13.07.2009
Цитата: kot_
в строковом поле значение может быть пустым но не NULL. В работающем коде эту проверку должна бы выполнятся немного по другому - как именно подумай сам - но выполнятся должна.



и опять я не согласен. Сейчас создал небольшую базу на одну табличку, с двумя полями, одно числовое, одно текствое. Для пробы в текстовой поле вводил непустые значения, вставлял NULL, и вставлял пустую строку (''). Потом выполнял запросы :

 
Код:
SELECT * FROM qwerty
WHERE texti<>''

и
 
Код:
SELECT * FROM qwerty
WHERE texti IS NOT NULL

Так вот при первом запросе из таблицы вывелись только те строки, где поле texti имеет текст, а при втором запросе вывелись строки, где поле texti имеет текст и те строки где поле texti имеет пустое значение (''). так что первый запрос правилеьнее будет
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог