Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибка с проверкой на Null


Страницы:   1 2

Feds ©   (2006-11-27 13:24:00) 

Здравствуйте уважаемые!
возникла ситуация не могу разобраться: работаю с ИБ.
получаю в датасет данные.
 if Dataset.FieldByName(link_exp).Value <> Null then
       s := Dataset.FieldByName(link_exp).AsString;

вылетает со словами не могу преобразовать Null в вариант.
.isNull - всегда выдает false.
В чем причина?


ЮЮ   (2006-11-28 13:04:00) [1]

Всё он сказал здесь:

Feds   (27.11.06 14:06) [14] TDataSet - использую
> какого типа датасет?
просто TDataSet


Поэтому доверять его словам о том, что
.isNull -false всегда
и тогда   s := Dataset.FieldByName(link_exp).AsString; - вылетает - не могу преобразовать Null в стринг

никак не получается.

А вот изыски типа
Dataset.FieldByName(link_exp).Value <> Null
запросто приведут к такому. Причем не обязательно в строке, где автор видит, а где-то в рбработчике, навешанном на DataSet.
Поэтому, прежде чем гнать на TDataSet надо
1) убрать из своего кода такие прелести
2) пройтись отладчиком чуть глубже своего кода.
А ошибки возможны и в VCL. На днях рассматривали TDBLookupCombo. Но чтобы TDataSet такие заподлянки выкидывал ... :)


Виталий Панасенко   (2006-11-28 12:46:00) [2]

По-моему, человек все сказал тут

> DrPass ©   (27.11.06 13:33) [2]


ЮЮ   (2006-11-28 02:43:00) [3]

как в SQL, так и в Delphi нелья сравнивать с NULL влоб ( = или <>).
В SQL для этого есть IS NULL, а в Delphi VarIsNull()


clickmaker   (2006-11-27 16:23:00) [4]


> [14] Feds   (27.11.06 14:06)
>
> > > TDataSet - использую
> > какого типа датасет?
>
> просто TDataSet

а данные-то откуда в нем?


Feds   (2006-11-27 16:20:00) [5]

в этом же случае используется метод финдБайНаим, а он исходя из кода в ТдатаСет реализован.


Desdechado   (2006-11-27 15:33:00) [6]

> просто TDataSet
Many of these properties, events, and methods are abstract (Delphi) or pure virtual (C++) in TDataSet. Abstract or pure virtual declarations are declarations without implementations.


Feds   (2006-11-27 14:09:00) [7]

была подобная ситуация при добавлении данных, когда флаг фильтраред стоял. после добавления курсор слетал и при обращении получался подобный эксепшен. но сейчас ничего не добавляется и фильраред не стоит...


Feds   (2006-11-27 14:06:00) [8]


> > TDataSet - использую
> какого типа датасет?

просто TDataSet


Feds   (2006-11-27 14:00:00) [9]


> а отладчик-то что кажет? что в этом поле?

отладчик кажет в Dataset.FieldByName(link_exp).Value
ЕвариантТупекастЕррор


Desdechado   (2006-11-27 13:51:00) [10]

> TDataSet - использую
какого типа датасет?


clickmaker   (2006-11-27 13:50:00) [11]


> [5] Feds   (27.11.06 13:35)

а отладчик-то что кажет? что в этом поле?


Feds   (2006-11-27 13:49:00) [12]

доступ к данным через универсального провайдера. По идеи отвязывающего от БД


Feds   (2006-11-27 13:48:00) [13]

TDataSet - использую


Feds   (2006-11-27 13:47:00) [14]

при таком  if Dataset.FieldByName(link_exp).Value <> Null
ошибка весьма странная, но именно на этой строчке
не могу приобразлвать вариант (Null) в стринг


Desdechado   (2006-11-27 13:43:00) [15]

Компоненты доступа?
IB какой версии?
Совпадает ли версия клиента с версией сервера?


Feds   (2006-11-27 13:37:00) [16]

даже s := Dataset.FieldByName(link_exp).AsString ? - не могу преобразовать Null в стринг


Feds   (2006-11-27 13:35:00) [17]

link_exp - строка с именем поля


Feds   (2006-11-27 13:35:00) [18]

я же написал что .isNull -false всегда
и тогда   s := Dataset.FieldByName(link_exp).AsString; - вылетает тут


Desdechado   (2006-11-27 13:34:00) [19]

> любая попытка обращения к данным из поля вызывает ошибку
даже s := Dataset.FieldByName(link_exp).AsString ?
Какую?

> link_exp
это что такое?


DrPass   (2006-11-27 13:33:00) [20]


> .isNull - всегда выдает false.

А ты уверен, что значение поля в этом случае именно NULL? Проверь еще раз, внимательнее. А код исправь на
if not Dataset.FieldByName(link_exp).IsNull then
       s := Dataset.FieldByName(link_exp).AsString;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо