![]() |
|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
![]() На этот вопрос к сожалению ответа не знаю.
Найди строку, в которой возникает ошибка. Возможно тогда всё и разрешится. У меня так было. Удачи. |
#7
|
||||
|
||||
![]() Цитата:
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 используется с указателями. Пишу программы за еду. __________________ |
#8
|
|||
|
|||
![]() Цитата:
То есть в Delphi не предусмотрено вообще пустая дата?! То есть нельзя оставить поле для ввода даты пустым и присвоить это некой переменной ?! |
#9
|
||||
|
||||
![]() Цитата:
Цитата:
Цитата:
Пишу программы за еду. __________________ |
#10
|
|||
|
|||
![]() Цитата:
Цитата:
============================================ Придумал как можно проверить, тольк оне знаю как это реализовать... вопрос размуеется тупой - есть юнит DataModule, то есть без формы, в нём много чего происходит, а на выходе должен быть заполнен Datasource данными. Как можно из этого DataModule при помощи чистого кода создать нечто вроде текстового окна с кнопкой ОК/Закрыть и залить в это окно или некий графический объект все данные из Datasource (или Dataset) - чтобы наконец таки проверить все значения... |
#11
|
|||
|
|||
![]() После долгих ковыряний выяснилось, что в программе всё нормально. Баг либо в процедуре БД, либо при передаче параметров из программы в процедуру БД. Процедура явно работает, тк возвращает названия полей таблицы, но результат работы - пуст.
Пользуюсь IBExpert, можно в нём как-то посмотреть запросы/ответы к/из процедурам БД из рабочей программы? Как вообще можно узнать какие точно данные получила БД? |
#12
|
||||
|
||||
![]() Цитата:
![]() Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#13
|
||||
|
||||
![]() Цитата:
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#14
|
||||
|
||||
![]() Ну тогда уж с просто логики...
[/sarcasm] Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#15
|
|||
|
|||
![]() Ну это совсем смешной вопрос для дебилоф.
Вы тут все типа умные программеры же, ага, вот тебе ответ: [ У нас есть оперативная память - непрерывный блок байт. Система выделила нам под переменную типа Integer 4 байта из этого блока. Как ты предлагаешь "ничего не хранить" в них? ] := [ Это типа вопрос - чем же подтереть жопу, когда начал дристать посреди красной площади? ] В 17 лет уже иметь восьмилетний стаж программирования, знать 4 языка... Это что-то значит А у меня лучшая выпускная работа года в городе Москве, написана на QB. Это что-то значит? Последний раз редактировалось delphicoding, 29.07.2011 в 19:17. |