if(ZQuery->FieldValues["FAM"].IsEmpty()) {
// -----------------
}
else {
// -----------------
}
проверка поля в базе
Поле типа "memo", подключаюсь через ZQuery. Допустим поле названо "FAM".
там этого нет, может я плохо смотрел. Мне надо через условие if
Код:
или
Код:
if(ZQuery->FieldValues["FAM"].IsNull()) {
// -----------------
}
else {
// -----------------
}
// -----------------
}
else {
// -----------------
}
"нашлось" а если пусто то нечего. Прописываю код в ZQuery1AfterScroll но неработает как хотелось бы.
Цитата: alesoleg
Оно чего то не работает. Подробно: когда в DBGrid у меня "ходит" курсор по строкам, условие if должно проверять не пусто ли у меня поле в данной строке, и если не пусто то выводить в TMemo строку, например
"нашлось" а если пусто то нечего. Прописываю код в ZQuery1AfterScroll но неработает как хотелось бы.
"нашлось" а если пусто то нечего. Прописываю код в ZQuery1AfterScroll но неработает как хотелось бы.
прописывай в DBGrid::OnDrawDataCell
{
...
if(!DBGrid1->DataSource->DataSet->FieldValues["FAM"].IsNull())
{
// нашлось
Спасибо, буду пробовать
Код:
if(!DBGrid1->DataSource->DataSet->FieldValues["FAM"].IsNull())
{Memo1->Text =ZQuery1->FieldByName("IMA")->AsString;}
{Memo1->Text =ZQuery1->FieldByName("IMA")->AsString;}
УСЛОВИЕ ДРУГОЕ НО СМЫСЛ ОДИН И ТОТ ЖЕ. Условию всёравно пусто ли поле FAM или нет выводит даные из поля IMA постоянно.
дык не факт, что оно NULL когда пустое... есть там ф-я IsEmpty?
Извините я вас не понял: "...есть там ф-я IsEmpty?", где есть?
Код:
if(!DBGrid1->DataSource->DataSet->FieldValues["FAM"]->IsNull() || DBGrid1->DataSource->DataSet->FieldValues["FAM"]->AsString != ""){
что в этом сложного?
Да, действительно!Спасибо.
Может просто делать как-то так:
Код:
...
if(!Query->FieldByName("Fam")->AsString.IsEmpty)
{...}
if(!Query->FieldByName("Fam")->AsString.IsEmpty)
{...}
так будет проще
Но я точно уже не помню во первых, обрабатывает ли IsEmpty состояние поля NULL. Во вторых я бы контроль за дефолтным значением возлагал бы на БД - а на клиенте только бы обрабатывал исключение. Какая бы ни была форма проверки - в любом случае на клиенте это будет изрядно тормозить - и при первой же возможности стоит перенести все это в базу (на сервер). ИМХО.
Код:
SELECT * FROM table
WHERE FAM<>''
WHERE FAM<>''
тогда строки с пустым полем FAM просто не будут выводиться:) тоже вариант мне кажеться:)
ну собственно чтото подобное я и имею ввиду. только проверку обязательно нужно делать как на пустое значение, так и на NULL - потому что это не одно и тоже.
На самом деле мне кажеться, проверку надо какую-то одну из двух делать, а что бы определиться какая именно нужна, надо просто на структуру таблицы посмотреть или дебагером пройтись, о чем, собственно, было уже сказано выше:)
Код:
SELECT * FROM table
WHERE fam IS NOT NULL OR fam <> ' '
WHERE fam IS NOT NULL OR fam <> ' '
если пустые значения не допустимы - значит надо выполнять проверку и на их отсутсвие тоже.
А при обработке значения просто обрабатывать исключения.
Код:
WHERE fam IS NOT NULL OR fam <> ''
ничего страшного, но просто мне интересно, если, например, поле имеет значение integer или любое другое численное значение, то зачем нам нужна проверка :
Код:
...fam <>''
равно как и при типе поля, к примеру, char(..) зачем нам нужна будет проверка:
Код:
...fam IS NOT NULL...
зачем в условии проводить проверку на равенство значениям, которых заведомо не может быть.
Более того, если я не ошибаюсь, то если поле будет иметь какой либо числовой тип, то проверка:
Код:
...fam <>''
Цитата: Posix86749
Более того, если я не ошибаюсь,
ошибаешься. Точнее ты путаешь пустое значение и NULL. а это разные вещи. Если речь идет о числовом поле - то второе условие будет лишним - но в строковом поле значение может быть пустым но не NULL. В работающем коде эту проверку должна бы выполнятся немного по другому - как именно подумай сам - но выполнятся должна.
Цитата: kot_
в строковом поле значение может быть пустым но не NULL. В работающем коде эту проверку должна бы выполнятся немного по другому - как именно подумай сам - но выполнятся должна.
и опять я не согласен. Сейчас создал небольшую базу на одну табличку, с двумя полями, одно числовое, одно текствое. Для пробы в текстовой поле вводил непустые значения, вставлял NULL, и вставлял пустую строку (''). Потом выполнял запросы :
Код:
SELECT * FROM qwerty
WHERE texti<>''
WHERE texti<>''
и
Код:
SELECT * FROM qwerty
WHERE texti IS NOT NULL
WHERE texti IS NOT NULL
Так вот при первом запросе из таблицы вывелись только те строки, где поле texti имеет текст, а при втором запросе вывелись строки, где поле texti имеет текст и те строки где поле texti имеет пустое значение (''). так что первый запрос правилеьнее будет