Russian Qt Forum
Ноябрь 23, 2024, 18:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как "опознать" пустую строку и NULL при считывании из MySQL  (Прочитано 10991 раз)
Cyrax
Гость
« : Январь 14, 2008, 20:24 »

Считываю некоторую запись из БД (MySQL). Для конкретики возьмём поле, которое в БД содержит пустую строку (не NULL). В Qt-программе получил QVariant (querry.value(...)), содержащий значение этого поля.
Далее хотел проверить на NULL:
Этот QVariant при вызове isNull() возвращает true. И это для пустой строки, содержащейся в этом QVariant'е (проверил и qDebug'ом, и canConvert'ом - QVariant содержит имено строку и именно пустую).

Проверил, как при значении поля NULL, так и при пустой строке, соответствующий QVariant валиден и содержит пустую строку.
Тогда как мне определить, в соответствующей ячейке БД содержится NULL или пустая строка ?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Январь 14, 2008, 21:48 »

Считываю некоторую запись из БД (MySQL). Для конкретики возьмём поле, которое в БД содержит пустую строку (не NULL). В Qt-программе получил QVariant (querry.value(...)), содержащий значение этого поля.
Далее хотел проверить на NULL:
Этот QVariant при вызове isNull() возвращает true. И это для пустой строки, содержащейся в этом QVariant'е (проверил и qDebug'ом, и canConvert'ом - QVariant содержит имено строку и именно пустую).

Проверил, как при значении поля NULL, так и при пустой строке, соответствующий QVariant валиден и содержит пустую строку.
Тогда как мне определить, в соответствующей ячейке БД содержится NULL или пустая строка ?

Ну почему не читаем документацию?

QSqlRecord rec;
QString q = "select * from " + table;
QSqlQuery query(db);
bool st = isOpen();
if ( st )
{
      st = query.exec( q );
      rec = query.record();
}
Из QSqlRecord можно получить QSqlField для каждого поля.
А далее совсем просто:

QVariant::Type QSqlField::type () const

QVariant::Type это и есть тип поля допустим целое или строка.
Записан
Cyrax
Гость
« Ответ #2 : Январь 14, 2008, 22:19 »

Цитировать
QVariant::Type QSqlField::type () const
QVariant::Type это и есть тип поля допустим целое или строка.
Вот этот тип у меня - QString, поскольку в БД поле имеет тип string + допускает null-поля.
Мне не тип данных нужно определить, а факт null'а в ячейке БД...
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #3 : Январь 14, 2008, 22:27 »

Какая для тебя принципиальная разница?
Записан
Cyrax
Гость
« Ответ #4 : Январь 14, 2008, 23:05 »

Цитировать
Какая для тебя принципиальная разница?
Мне как раз принципиально важно отличать пустые строки от NULL'ов, поскольку первое означает наличие данных, второе - их отсутствие.
Сейчас у меня прога неправильно из-за этого работает...
Записан
ритт
Гость
« Ответ #5 : Январь 14, 2008, 23:44 »

Цитировать
bool QSqlQuery::isNull ( int field ) const
Returns true if the query is active and positioned on a valid record and the field is NULL; otherwise returns false. Note that for some drivers, isNull() will not return accurate information until after an attempt is made to retrieve data.
Записан
Cyrax
Гость
« Ответ #6 : Январь 14, 2008, 23:53 »

Спасибо, затестирую...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 23.