Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2015, 13:33   #21
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
У любого датасета после открытия на выборку есть поля, обычно контейнер Fields, содержащий массив полей, имеющих общего предка TField. Для конкретного поля это может быть TIntegerField, TStringField и прочая лобуда. Событие TField.OnSetText отрабатывает при записи текста из DB-компонента ссылающегося на поле непосредственно в датасет. Вот пример небольшой

Код:
procedure TForm1.CDSWorkVesTraSetText(Sender: TField; const Text: String);
var xVes: Real;
begin
  xVes:=RoundTo(StrToFloatDef(Text,0),-3);
  if xVes<-0.0001 then ShowMessage('Ввод отрицательного веса запрещен')
  else if xVes>500.0001 then ShowMessage('Максимальное значение веса = 500')
  else TFloatField(Sender).AsFloat:=xVes;
end;
Уважаемый Аватар, пытаюсь применить Ваш способ, но не могу понять как правильно присвоить переменной введенное в ячейку значение:

Код:
procedure TContactCard.ADOQuery2IssuedSetText(Sender: TField;
  const Text: string);
  var Entered_data:string;
begin
Entered_data:=ADOQuery2Issued.AsString;

end;
Код выше ничего не дает ... Необходимо проверить введенную дату, а у меня пока не получается присвоить значение из ячейки

Последний раз редактировалось Dux; 05.06.2015 в 13:35.
Dux вне форума Ответить с цитированием
Старый 05.06.2015, 14:02   #22
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

В Text передается в текстовом виде то, что юзер ввел в ячейку. Нужно обработать: проверить на правильность и при необходимости изменить что-то. Если веденные данные устраивают, то привести их к нужному типу и засунуть в Value поля. У меня в примере непосредственно в AsFloat. Если не устараивают - не делать этого, можно сообщение выдать. Соответствующее поле записи датасета не поменяется при этом. Поле - параметр Sender
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2015, 15:52   #23
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В Text передается в текстовом виде то, что юзер ввел в ячейку. Нужно обработать: проверить на правильность и при необходимости изменить что-то. Если веденные данные устраивают, то привести их к нужному типу и засунуть в Value поля. У меня в примере непосредственно в AsFloat. Если не устараивают - не делать этого, можно сообщение выдать. Соответствующее поле записи датасета не поменяется при этом. Поле - параметр Sender
Т.е. правильно присвоить значение так:

Код:
procedure TContactCard.ADOQuery2IssuedSetText(Sender: TField;
  const Text: string);
  var Entered_data:string;
begin
Entered_data:=Text; 

end;
Но у меня не получается обработать, проверить. При некорректном вводе даты сразу выскакивает сообщение "..is not valid date and time". Как успеть обработать до этого сообщения?
Dux вне форума Ответить с цитированием
Старый 05.06.2015, 15:59   #24
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А в каком виде дату вводят? И какие ситуации обработать и исправить?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2015, 16:00   #25
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Вообщем код у меня такой:

Код:
procedure TContactCard.ADOQuery2IssuedSetText(Sender: TField;
  const Text: string);
  var DateSep, Edit_symbol:string;
begin
DateSep:=DateSeparator; // Определяем разделитель в системе

Edit_symbol:=copy(Text,3,1);

if (Edit_symbol ='.') or (Edit_symbol ='-') or (Edit_symbol ='/') then
     begin
     TField(Sender).AsString:=StringReplace(Text, Edit_symbol, DateSep, [rfReplaceAll, rfIgnoreCase]);
     end;
eng;
Но все равно не заменяет некорректный разделитель.. Где может быть ошибка?
Dux вне форума Ответить с цитированием
Старый 05.06.2015, 17:10   #26
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
procedure TContactCard.ADOQuery2IssuedSetText(Sender: TField; const Text: String);
var d: TDateTime;
    f: TFormatSettings;
    s: String;
begin
  s:=StringReplace(Text,' ','',[rfReplaceAll]);
  s:=StringReplace(s,'.',DateSeparator,[rfReplaceAll]);
  s:=StringReplace(s,'-',DateSeparator,[rfReplaceAll]);
  s:=StringReplace(s,'/',DateSeparator,[rfReplaceAll]);
  f.DateSeparator:=DateSeparator;
  f.ShortDateFormat:='d/m/yyyy';
  if not TryStrToDate(s,d,f) then ShowMessage('введи корректную дату')
                             else TDateTimeField(Sender).AsDateTime:=d;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2015, 17:19   #27
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Аватар, вставил Ваш код, но все-равно ошибка:

Dux вне форума Ответить с цитированием
Старый 05.06.2015, 17:21   #28
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

У меня в ShortDateFormat год 4-значный, сделай 2-значный

Цитата:
Аватар, вставил Ваш код, но все-равно ошибка
Мой код не может такое сообщение выдать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2015, 17:22   #29
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
У меня в ShortDateFormat год 4-значный, сделай 2-значный
сделал, то же самое
Dux вне форума Ответить с цитированием
Старый 05.06.2015, 17:24   #30
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Мой код не может такое сообщение выдать

Обработчик не нацелен на нужное событие нужного поля
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DateTimePicker1 -как получит дата и время одно времено ? АНЯ_17 БД в Delphi 6 18.09.2014 08:02
Тестовое поле, тип дата, формат даты Ципихович Эндрю Microsoft Office Word 15 08.04.2012 21:26
Как посчитать в базе данных Access дата/время? Юрий_Комышанский Microsoft Office Access 4 01.05.2010 10:56
Как создать маску ввода даты в TextBox? AnnNet Microsoft Office Excel 6 24.07.2008 10:42