![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 На этот вопрос к сожалению ответа не знаю.  
		
	
		
		
		
		
		
	
		
		
	
	
	Найди строку, в которой возникает ошибка. Возможно тогда всё и разрешится. У меня так было. Удачи.  |