![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте!
В замороченном проекте с кучей кода и окон в одном месте постоянно выскакивает "Could not convert variant of type (Null) into type (Double)". (Небольшая ремарка - конечно это само по себе бред полный, тк Null это "пусто" и при переделке "пусто" в любой формат хоть строки, хоть числа, чего угодно всё равно должно получиться "пусто", ну да ладно, оставим это на совести разработчиков Delphi.) Проблема том, что в месте где возникает ошибка происходит подряд целая цепь событий: создание окна, загрузка данных, выбор данных, создание другого окна, передача параметров, обновление данных БД, формирование отчёты FastReport. Много всего и куча данных - понять что где глючит не зная места и данных невозможно. Пробовал ставить BreakPoints, запускать в режиме Trace To Next Source Lines, жать break когда выскакивает ошибка, итд - без толку, ошибка просто появляется и откуда берётся непонятно! (Понятно лишь, что при нажатии на кнопку, но там такое кол-во сразу выполняется процедур и данных, что ого-го.) Если ли какой-то способ заставить Delphi чётко указать на строку кода, в которой возникает ошибка и желательно отобразить переменную и данные в удобоваримом виде которые вызывают ошибку? PS Попутно вопрос по датам - если при вводе Дата не указана, то может ли она везде (Delphi,Firebird,FastReport) быть null? или null в контексте Даты вызывает ошибку? Как тогда передавать "дата не указана", чтобы в БД сохранилось как null? Последний раз редактировалось delphicoding, 28.07.2011 в 13:49. |
|
#2
|
|||
|
|||
|
Может быть как - нибудь и можно, но я в подобных случаях пользуюсь дедовским методом.
Подозрительный код методически "окружаю" вот такими сообщениями Код:
ShowMessage('Точка 1 Входим');
.......
.......
.......
ShowMessage('Удачно вышли');По поводу 2 вопроса. Не уверен, но попробуй проверить, допускает ли поле базы данных сохранение значения Null. |
|
#3
|
|||
|
|||
|
БД допускает. Но Delphi вот Дату как null что-то не очень воспринимает... или может FastReport ? Но кто-то из них явно не понимает var D:Tdate; D:=null;..
Как таки передавать Date пустую ??? |
|
#4
|
|||
|
|||
|
А null точно можно использовать? Помоему всю жизнь nil использовали в борланде.
|
|
#5
|
|||
|
|||
|
Да в этом долбанном борланде чё тольк оне используют и nil и null и if =null и IsNull итд итп... бардак полнейший!
![]() |
|
#6
|
||||
|
||||
|
Цитата:
TDateTime = type Double; естественно вещественый тип не может иметь пустое значение, в отличии от типа Variant. Null это функция, которая возвращает пустое значение типа Variant: Код:
unit Variants; function Null: Variant; begin _VarNull(TVarData(Result)); end; при работе с датой в БД рекомендую такой подход: Код:
var
d: TDateTime;
begin
if not Table1.FieldByName('date1').IsNull then
begin
d:=Table1.FieldByName('date1').AsDateTime; // получение значения даты, если поле заполнено
Table1.FieldByName('date1').Clear; // очищаем значение поля
end;
end;nil используется с указателями. |
|
#7
|
|||
|
|||
|
На этот вопрос к сожалению ответа не знаю.
Найди строку, в которой возникает ошибка. Возможно тогда всё и разрешится. У меня так было. Удачи. |