dbgridEH выпадающий календарь. При вводе данных ошибка.

bleksenlen
Дата: 17.05.2011 09:41:27
Есть 2 поля f(фио)-строка и datzash(дата защиты)-дата
В DBGridEh поле даты отображается с возможностью выбора значения из календаря. Но когда поле даты первоначально пустое при выборе данных выходит ошибка Project1.exe raised exception class EConvertError WITH message " . . 'is not a valid date and time'. Process stoped. USE Step or Run to continue" Никакие свойства кроме как DATASOURSE не настраивала.
ВОПРОС
1Почему стандартная функция компонента выдает ошибку при вводе данных форматы же одинаковые в таблице и в календаре?
Пытаюсь перехватить исключение EConvertError посредством
procedure Tpcom.showException(Sender:TObject; E:exception);
begin
  If E is EConvertError then
 MessageDlg('Дата вводится в формате День.Месяц.Год Пожалуйста, введите дату!',mtError,[mbOK],0);
  If E is Eoleexception then
end;
тоже не пашет!
Нокогда дата уже стоит то ее редактировать через выпадающий календарь можно.
ВОПРОС
2 Как обработать ошибку ввода даты пользователем в неправельном формате (надо дд.мм.гггг)? EditMask не кантролирует ввод данных в таком формате! он просто может контролировать количество цифр - пишу так !99/99/0000;1; т.е. в данном случае можно написать мм.дд.гггг
КАКИЕ ЕСТЬ ПРЕДЛОЖЕНИЯ? СПАСИБО!
MAYAKOV_SV
Дата: 17.05.2011 10:15:41
bleksenlen
Но когда поле даты первоначально пустое при выборе данных выходит выходит ошибка Project1.exe raised exception class EConvertError WITH message " . . 'is not a valid date and time'.

Я сделал так:
1. Скопировал себе в проект DBGridEh.pas
2. Исправил в коде функцию: TColumnEh.UpdateDataValues
// #fixed 26.04.2010 
procedure TColumnEh.UpdateDataValues(Text: String; Value: Variant; UseText: Boolean);
var Processed: Boolean;
 // Преобразуем строу в дату
 function StrToDateEx(const txt : string) : TDateTime;
 var
  d : TDateTime;
  v : string;
  b : boolean;
 begin
  b := true;
  d := 0;
  v := Trim(txt);
  try
  d := StrToDate(v);
  except
   b := false;
  end;
  if (b = false) and ((length(v) = 8) or (length(v) = 6)) then
  begin
   b := true;
   Insert('.',v, 3);
   Insert('.',v, 6);
   try
    d := StrToDate(v);
   except
    b := false;
   end;
   if (b = true) and (length(v) = 8) then
   begin
     v := FormatDateTime('dd.MM.yyyy', d);
   end;
   end else
   begin
   v := DateToStr(d);
  end;

  if b = false then
   raise Exception.Create('Неверный формат даты');
  result := StrToDate(v);
 end;

begin
  if Grid <> nil then
  begin
    Processed := False;
    if Assigned(FUpdateData) then FUpdateData(Self, Text, Value, UseText, Processed);
    if Processed then Exit;
    if Field = nil then Exit;
    if not UseText then
    begin
      if (Field.FieldKind = fkLookup) and (Field.KeyFields <> '')
        then DataSetSetFieldValues(Field.DataSet, Field.KeyFields, Value)
        else Field.Value := Value;
    end else if (Grid.DrawMemoText = True) and (Field.DataType = ftMemo)
      then Field.AsString := Text
    else
    if Field.DataType = ftDate then
      Field.AsDateTime := StrToDateEx(Text)
    else
      Field.Text := Text;
    if MRUList.AutoAdd and MRUList.Active and
       Grid.InplaceEditorVisible and Grid.InplaceEditor.Showing
    then
      MRUList.Add(Text);
  end;
end;
Причина ошибки в вызове функции StrToDate("").
Поэтому я написал свою StrToDateEx, которую вы может подкорректировать по своему желанию.
MAYAKOV_SV
Дата: 17.05.2011 10:17:18
bleksenlen
2 Как обработать ошибку ввода даты пользователем в неправельном формате (надо дд.мм.гггг)?

Я все это учел в своей функции StrToDateEx.
bleksenlen
Дата: 17.05.2011 12:15:05
автор
1. Скопировал себе в проект DBGridEh.pas

ГДЕ его найти? в библиотеке ehlib у меня нет.
Ega
Дата: 17.05.2011 12:16:29
bleksenlen
автор
1. Скопировал себе в проект DBGridEh.pas

ГДЕ его найти? в библиотеке ehlib у меня нет.

Есть, плохо искал.
bleksenlen
Дата: 17.05.2011 12:25:09
Ega
bleksenlen
пропущено...

ГДЕ его найти? в библиотеке ehlib у меня нет.

Есть, плохо искал.

блин уже поиск по всему компу не помог нет ....pas есть всякие dcu и тд у меня ehlib5.3
MAYAKOV_SV
Дата: 17.05.2011 12:44:15
bleksenlen
Ega
пропущено...

Есть, плохо искал.

блин уже поиск по всему компу не помог нет ....pas есть всякие dcu и тд у меня ehlib5.3

А где установлен EhLib на компьютере?
Там наверно и надо искать.
...\EhLib5.3\Common\DBGridEh.pas
MAYAKOV_SV
Дата: 17.05.2011 12:48:46
bleksenlen
блин уже поиск по всему компу не помог нет ....pas есть всякие dcu и тд у меня ehlib5.3

Как вариант, еще в меню выбрать:
Component\InstallComponent...
В форме, в текстовом поле [Search Path:] найти путь к EhLib.
bleksenlen
Дата: 17.05.2011 12:49:44
MAYAKOV_SV
bleksenlen
пропущено...

блин уже поиск по всему компу не помог нет ....pas есть всякие dcu и тд у меня ehlib5.3

А где установлен EhLib на компьютере?
Там наверно и надо искать.
...\EhLib5.3\Common\DBGridEh.pas


вот все что у меня есть в этой папке
MAYAKOV_SV
Дата: 17.05.2011 12:56:48
bleksenlen
вот все что у меня есть в этой папке

Попробуйте создать пустой проект.
Потом в uses дописать через запятую DBGridEh.
Потом держать клавишу Ctrl, навести мышь на текст DBGridEh и нажать левую кнопку мыши.
Должен открыться текст модуля.