Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.07.2011, 13:38
eu6pc eu6pc вне форума
Прохожий
 
Регистрация: 21.07.2011
Сообщения: 8
Репутация: 10
По умолчанию Как очистить поле DATA, не потеряв маску ввода в DBEDIT ?

Добрый день, коллеги.
Имеем ситуацию:
БД (interbase), в таблице есть поле типа дата.
На форме - DBEdit для ввода.
Полю присвоена маска ввода: (editmask) !99/99/9999;1;_
Я хочу сделать на форме проверку корректности данных и выводить сообщение об ошибке, при этом хочется чтобы курсор ОСТАВАЛСЯ в этом DBEDIT.
Вешаю обработчик события OnSetText поля:
Код:
procedure TDM.KadryDTRSetText(Sender: TField; const Text: String);
var
d : TDateTime;
begin
try
d:=StrToDate(text);
Sender.AsDateTime:=d;
except
Application.MessageBox('Неверная дата!', 'Ошибка', MB_OK + MB_ICONERROR);
Sender.Clear;
Edit_kadry.perform($28,1,0); // сообщение WM_NEXTDLGCTL
end;

Ошибки корректно отлавливаются, выводится сообщение об ошибке, поле очищается, НО !!! пропадает маска ввода! и дату ввести уже не получается.
Подскажите, как быть ?
Ответить с цитированием
  #2  
Старый 21.07.2011, 14:00
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

используйте компонент DateTimePicker с вкладки win32
Появиться на 2-е строчки кода больше(чтение/запись), но это того стоит
Ответить с цитированием
  #3  
Старый 21.07.2011, 14:20
eu6pc eu6pc вне форума
Прохожий
 
Регистрация: 21.07.2011
Сообщения: 8
Репутация: 10
По умолчанию

Не совсем подходит -
1. мне нужно DB - иначе вручную обрабатывать запись/чтение
2. В него вноситься текст с точкой - а в dbedit по маске пользователю не нужно вносить точки между днем, месяцем и годом - более быстрый ввод
3. Кажется он не может содержать пустую дату - а у меня не все поля дат обязательны к заполнению...
Ответить с цитированием
  #4  
Старый 21.07.2011, 14:49
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Никогда не пользовался TDBxxxx контролами кроме грида, но всезнающий хелп подсказывает, что, скорее всего, нужно использовать свойсво TDBEdit.Text.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.

Последний раз редактировалось Aristarh Dark, 21.07.2011 в 16:37.
Ответить с цитированием
  #5  
Старый 21.07.2011, 14:58
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Цитата:
Сообщение от eu6pc
НО !!! пропадает маска ввода! и дату ввести уже не получается.
Подскажите, как быть ?

вообще не дает ввести???, я сейчас у себя попробовал, маска пропадает но вводить я данные могу.
З.Ы. вот эту строчку я закоментил Edit_kadry.perform($28,1,0); // сообщение WM_NEXTDLGCTL
Ответить с цитированием
  #6  
Старый 21.07.2011, 15:06
eu6pc eu6pc вне форума
Прохожий
 
Регистрация: 21.07.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Pilot_Red
вообще не дает ввести???,[/b]
Дает только один символ (((

Если закоментить эту строчку - это сообщение, которое откатывает фокус на предыдущий элемент, тоесть мы выходим из DBEDIT, а проверка в случае некорректности - возвращает нас назад - юзер, введи правильно! ))

Если этой строчки нет - фокус переходит на следующий элемент DBEDIT,и если мы вернемся в предыдущий вручную - то маска есть, и вводить можно - все ОК!
Но мне хотелось бы чтобы фокус ОСТАВАЛСЯ в этом DBEDIT.
Попробуйте эту строчку оставить в таком виде: perform(wm_nextdlgctl,1,0);
а ниже положить еще пару EDit или других элементов, на которые будет становиться фокус.
Ответить с цитированием
  #7  
Старый 21.07.2011, 15:38
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Цитата:
Полю присвоена маска ввода: (editmask) !99/99/9999;1;_
Маска разве полю присваивается а не компонетну ввода??

Хотелось бы узнать версию Delphi. В Delphi7, если не ошибаюсь DBEDIT не имеет маски ввода, я пользуюсь TDBDateTimeEditEh. А фокус можно же, если не ошибаюсь, программно установить методом SetFocus
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 21.07.2011 в 15:53.
Ответить с цитированием
  #8  
Старый 21.07.2011, 15:47
eu6pc eu6pc вне форума
Прохожий
 
Регистрация: 21.07.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Viajero
Маска разве полю присваивается а не компонетну ввода??
Не нашел свойсво Editmask у DBEdit. Маску установил в свойствах поля (в Query)

Цитата:
Сообщение от Viajero
Хотелось бы узнать версию Delphi.
Delphi 7
Ответить с цитированием
  #9  
Старый 21.07.2011, 15:56
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Цитата:
Не нашел свойсво Editmask у DBEdit. Маску установил в свойствах поля (в Query)
А какие БД компоненты? Что-то я сомневаюсь, что это правильно на БД компонент маску делать. Я бы Ehlib поставил. C семёркой нормально работает.
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 21.07.2011 в 16:06.
Ответить с цитированием
  #10  
Старый 21.07.2011, 16:07
eu6pc eu6pc вне форума
Прохожий
 
Регистрация: 21.07.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Viajero
А какие БД компоненты? Что-то я сомневаюсь, что это правильно на БД компонент маску делать. Я бы Ehlib поставил. C семёркой нормально работает.
Для доступа к БД используется ZEOS 6.6.5. stable, для отображения на форме - простой DBEDIT
Ответить с цитированием
  #11  
Старый 21.07.2011, 16:57
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

c ZEOS не работал, поэтому не могу поэкспериментировать. Я использовал FIBPLUS в связке с EhLIB.

Цитата:
Полю присвоена маска ввода: (editmask) !99/99/9999;1;_
А что повторно программно присвоить и программно поставить фокус на нужный DBEDIT не получается?
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 21.07.2011 в 17:03.
Ответить с цитированием
  #12  
Старый 21.07.2011, 17:15
eu6pc eu6pc вне форума
Прохожий
 
Регистрация: 21.07.2011
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Viajero
А что повторно программно присвоить и программно поставить фокус на нужный DBEDIT не получается?
Не дает никакого результата )) Если мышкой ставишь фокус - все ок, если программно - нет эффекта, причем что через setfocus, что через сообшения winapi - эффекта нет )
Ответить с цитированием
  #13  
Старый 22.07.2011, 11:25
eu6pc eu6pc вне форума
Прохожий
 
Регистрация: 21.07.2011
Сообщения: 8
Репутация: 10
По умолчанию

Впринципе сделал - в случае ошибочного ввода, после очистки поля - я со следующего элемента возвращаю фокус назад, и все отлично.
Немного пошловато, конечно, но работает на ура. на этом и оставим.

Спасибо ВСЕМ огромное за помощь!
Ответить с цитированием
  #14  
Старый 22.07.2011, 13:40
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Всё таки я бы посоветовал, если очень хочется использовать маску и чтобы это красиво выглядело на форме, использовать компонетны EhLib, если не ошибаюсь, они бесплатные, и в интернете их можно найти. Кроме TDBDateTimeEditEh(с маской даты),TDBNumberEditEh (с маской числа) и др там ещё есть супернавороченный TDBGridEh. Заодно поделитесь, насколько они совместимы с ZEOS.
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 22.07.2011 в 13:59.
Ответить с цитированием
  #15  
Старый 25.07.2011, 12:31
eu6pc eu6pc вне форума
Прохожий
 
Регистрация: 21.07.2011
Сообщения: 8
Репутация: 10
По умолчанию

Спасибо огромное за совет, при случае как-нибудь попробую, однако имею дурную привычку - использовать как можно меньше сторонних компонентов ))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter