Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Null-значения


Автор: MacTep 12.11.2004, 23:19
Есть база данных Paradox. Всего два поля. Имя(name) и дата(date) рождения человека. Есть код:
Код

procedure TForm1.Button1Click(Sender: TObject);
var name:string;
   date:TDate;
begin
 name:=Edit1.Text;
 if Edit2.Text='' then date:=null else date:=StrToDate(Edit2.Text);
 Table1.AppendRecord([name,date]);
end;


Почему вылезает ошибка? Гельзя так делать разве с переменной date?

Автор: Medved 13.11.2004, 00:16
Судя по коду, Вы используете для ввода даты обычный TEdit. Это не есть гуд. Лучше используйте компонент TDataTimePicker который находиться на вкладке Win32. Я обычно пользуюсь TDateEdit из библиотеки RxLib.
Это я думаю решит Ваши проблемы.

Цитата
Гельзя так делать разве с переменной date?

Можно.

Автор: MacTep 13.11.2004, 00:22
[quote]
Гельзя так делать разве с переменной date?

Можно.
[quote]
А если можно, то почему он ошибку выдает? Можно тогда пример такого кода, где не будет ошибки?

Автор: MacTep 13.11.2004, 00:33
Sorry за кривое написание предыдущего поста. smile
Только что попробовал в работе DateTimePicker - мне так не надо. Надо именно с Edit'ом работать. Можно ли через него попробовать. Мне вообще календарик Дельфийский не нравится, а он там по дефаулту стоит. Беда, помогите!

Автор: Alex 13.11.2004, 00:36
Код

var
 name:string;
 date: Variant;
begin
name:=Edit1.Text;
if Edit2.Text='' then date:=null else date:=StrToDate(Edit2.Text);
Table1.AppendRecord([name,date]);


Автор: Medved 13.11.2004, 01:09
Я же Вам подсказал, возмите из rxLib. Эта библиотека имхо должна стоять у каждого разработчика.

Скачать можно здесь http://www.pegas.mylawsite.net/soft/components.htm

Автор: Alex 13.11.2004, 01:49
MacTep, переменная date не может иметь тип TDate потому, что в AppendRecord ты должен передать TVarRec, а хелпе написано, что преобразование null значения к TDateTime не допустимо.

Цитата
Special conversion rules apply to the TDateTime real type declared in the System unit. When a TDateTime is converted to any other type, it treated as a normal Double. When an integer, real, or Boolean is converted to a TDateTime, it is first converted to a Double, then read as a date-time value. When a string is converted to a TDateTime, it is interpreted as a date-time value using the regional settings. When an Unassigned value is converted to TDateTime, it is treated like the real or integer value 0. Converting a Null value to TDateTime raises an exception.

Автор: MacTep 13.11.2004, 07:00
Alex, спасибо, очень помог! smile

Pegas, у меня стоит rxLib - все нормально работало (например, компонент GifAnimator). Но вчера попробовал использовать DateEdit и у меня возникла ошибка в модуле ToolEdit. Главное, остальные компоненты, которые не используют эту библиотеку работают, а он не хочет. Пишет "Fatal Error: File not found "Gauges.dcu"" Подскажите, если сможете, что надо сделать, чтобы этой ошибки не возникло.

Автор: Medved 13.11.2004, 14:46
Скачай с моего сайта RxLib, все будет работать. По крайней мере у меня таких глюков нет. Для тебя это будет самый простой выход.

Автор: MacTep 13.11.2004, 22:48
Pegas, я с твоего сайта и качал. А вот такой глюк не проходит! smile

Автор: Medved 14.11.2004, 23:29
Видать ты скачал, да не установил.

Автор: Cashey 15.11.2004, 00:08
Я так подозреваю, что имеет место различия формата типа дата, в поле Edit и с тем, что установлено BDE Administratore. Посмотри, какой там установлен формат даты и сделай такой же в маске ввода, лучше использовав спец. компонент, поле ввода с маской.

Автор: Alex 15.11.2004, 00:31
Cashey, ответ на вопрос уже найден.

Автор: MacTep 15.11.2004, 10:08
Всем спасибо! уже решил вопрос! 2Pegas: все я установил - ведь GIFAnimator-то работает!

Автор: Medved 16.11.2004, 16:20
Значит криво установил.

Автор: MacTep 16.11.2004, 18:14
Цитата
Значит криво установил.
Другого ответа и не ждал! Спасибо за информаию smile, попробую установить прямо!

Автор: Medved 17.11.2004, 02:22
Цитата(MacTep @ 16.11.2004, 21:14)
Другого ответа и не ждал! Спасибо за информаию smile, попробую установить прямо!

Знаешь, MacTep, ты не первый, кто пытается установить rxLib, и у кого не получается. И именно это меня больше всего удивляет. Там же вне написано, как, что делать! Я ей богу, я уже 5 лет пользуюсь RxLIb. И не было случая, чтобы они у меня установились криво. Просто прежде чем устанавливать, я внимательно прочитал read.me.

Если уж ты не можешь справиться с установкой RXLib, то о чем тут вообще можно гооворить? Сиди, читай книжки, ковыряй. Надейся только на себя.

Автор: MacTep 17.11.2004, 11:28
Pegas, спасибо! Поковыряюсь!

Автор: innok 17.11.2004, 13:04
всегда пользовался maskedit, все нормально работает, да и настроить как хош можно

Автор: MacTep 17.11.2004, 23:24
Цитата
всегда пользовался maskedit, все нормально работает, да и настроить как хош можно
Я тоже пользуюсь, вот только иногда, например, когда вводишь дату или время, при неполном вводе, при нажатии на Tab вылезает какая-то странная ошибка, типа, "Вы не до конца ввели..."! Как бороться с этим?

Автор: Alex 18.11.2004, 08:33
Цитата(MacTep @ 17.11.2004, 23:24)
Я тоже пользуюсь, вот только иногда, например, когда вводишь дату или время, при неполном вводе, при нажатии на Tab вылезает какая-то странная ошибка, типа, "Вы не до конца ввели..."! Как бороться с этим?

Из-за этого и еще из-за пары глюков я никогда не пользуюсь этим глючным компонентом. А это сообщение можно убрать только путем исправления модуля Mask.

Автор: Medved 18.11.2004, 10:57
Или написать свой контрол, наследую от TCustomEdit

Автор: MacTep 18.11.2004, 16:46
Цитата
Из-за этого и еще из-за пары глюков я никогда не пользуюсь этим глючным компонентом. А это сообщение можно убрать только путем исправления модуля Mask.
А можно узнать точнее, в каком именно месте нужно исправлять данный модуль? А то бы очень хотелось заставить работать его без глюков. Часто пользуюсь им...

Автор: innok 18.11.2004, 16:56
А чем плох стандартный MaskEdit из Additional ? Тоже с датой прекрасно работает.

Автор: MacTep 18.11.2004, 18:08
Цитата
А чем плох стандартный MaskEdit из Additional ? Тоже с датой прекрасно работает.
Об этом говорилось выше!

Автор: Alex 18.11.2004, 19:43
Код

procedure TCustomMaskEdit.CMExit(var Message: TCMExit);
begin
// Alx ИДИОТИЗМ!!!!!!!!!!!!!!!!!!!
//  if IsMasked and not (csDesigning in ComponentState) then
//  begin
//    ValidateEdit;
//    CheckCursor;
//  end;
 inherited;
end;

Автор: Mde 18.11.2004, 21:56
Какого паришся

По проше не пробывал например

If Edit1.text<>'' Then Date:=

Без Else

И пиши проще получишь больше легче и приятнее будет

Автор: MacTep 18.11.2004, 22:25
Цитата
По проше не пробывал например

If Edit1.text<>'' Then Date:=

Без Else
Да? А как же без Else мне нормальные значения в базу занести? Просто не заносить ничего? Тогда он по умолчанию поставит дату 31/12/1899. Как с этим бороться?

Автор: Mde 18.11.2004, 23:42
Пурга, Согласен, проверил не работает, подумаю если че придумаю поделюсь

Автор: Mde 20.11.2004, 12:51
МасТер Возможно лучше всего при вводе дату указывать всегда и не пропускать без ее указания дальше

Автор: Alex 20.11.2004, 13:04
Mde, с какой это стати пользователя куда-то не пускать?

Автор: Mde 21.11.2004, 00:20
Цитата
Mde, с какой это стати пользователя куда-то не пускать?


Не пускать пользователя к следующему шагу пока дата не будет введена, В чем ты со мной не согласен или это чемуто противоречит

Автор: Alex 21.11.2004, 00:32
Цитата(Mde @ 21.11.2004, 00:20)
Не пускать пользователя к следующему шагу пока дата не будет введена, В чем ты со мной не согласен или это чемуто противоречит

Пока пользователь не нажал кнопку ввода данных, пользователь волен вводить любые данные.
Добавлено @ 00:33
Mde, если хочешь это обсудить то давай это делать в привате, а не в этой теме.

Автор: Medved 21.11.2004, 01:51
Цитата(Mde @ 21.11.2004, 03:20)
Не пускать пользователя к следующему шагу пока дата не будет введена, В чем ты со мной не согласен или это чемуто противоречит


Это самое ужастное, что только может сделать программист. Это настолько плохой стиль написания программ, что ни один пользователь не будет пользоаться такой программой, в которой он чувствует себя как в тюрьме.

Автор: Mde 21.11.2004, 20:17
Цитата
Это самое ужастное, что только может сделать программист. Это настолько плохой стиль написания программ, что ни один пользователь не будет пользоаться такой программой, в которой он чувствует себя как в тюрьме.


Pegas выходит лучше глюки проги чем маленькая несвобода юзера
Добавлено @ 20:18
Цитата
Mde, если хочешь это обсудить то давай это делать в привате, а не в этой теме.


ALEX в привате в смысле

Автор: Alex 21.11.2004, 22:24
Цитата(Mde @ 21.11.2004, 20:17)
Pegas выходит лучше глюки проги чем маленькая несвобода юзера

За глюки по головки ни кто не погладит, но это уже проблемы программиста как сделать, так что бы и свободу пользователю оставить и программа не глючила. Поверь, это возможно.
Цитата(Mde @ 21.11.2004, 20:17)
ALEX в привате в смысле

Или по аське, или через "приватные сообщения", или по мылу

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)