Russian Qt Forum

Qt => Базы данных => Тема начата: Cyrax от Январь 14, 2008, 20:24



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

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


Название: Re: Как "опознать" пустую строку и NULL при считывании из MySQL
Отправлено: Mikhail от Январь 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 это и есть тип поля допустим целое или строка.


Название: Re: Как "опознать" пустую строку и NULL при считывании из MySQL
Отправлено: Cyrax от Январь 14, 2008, 22:19
Цитировать
QVariant::Type QSqlField::type () const
QVariant::Type это и есть тип поля допустим целое или строка.
Вот этот тип у меня - QString, поскольку в БД поле имеет тип string + допускает null-поля.
Мне не тип данных нужно определить, а факт null'а в ячейке БД...


Название: Re: Как "опознать" пустую строку и NULL при считывании из MySQL
Отправлено: Mikhail от Январь 14, 2008, 22:27
Какая для тебя принципиальная разница?


Название: Re: Как "опознать" пустую строку и NULL при считывании из MySQL
Отправлено: Cyrax от Январь 14, 2008, 23:05
Цитировать
Какая для тебя принципиальная разница?
Мне как раз принципиально важно отличать пустые строки от NULL'ов, поскольку первое означает наличие данных, второе - их отсутствие.
Сейчас у меня прога неправильно из-за этого работает...


Название: Re: Как "опознать" пустую строку и NULL при считывании из MySQL
Отправлено: ритт от Январь 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.


Название: Re: Как "опознать" пустую строку и NULL при считывании из MySQL
Отправлено: Cyrax от Январь 14, 2008, 23:53
Спасибо, затестирую...