Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

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

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

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

Цитата:
Сообщение от Аватар Посмотреть сообщение
У любого датасета после открытия на выборку есть поля, обычно контейнер 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 в 14:35.
Dux вне форума   Ответить с цитированием
Старый 05.06.2015, 15:02   #22
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,116
Репутация: 6385
По умолчанию

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

Цитата:
Сообщение от Аватар Посмотреть сообщение
В 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, 16:59   #24
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,116
Репутация: 6385
По умолчанию

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

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

Код:

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, 18:10   #26
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,116
Репутация: 6385
По умолчанию

Код:

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, 18:19   #27
Dux
Delphi Master
Участник клубаФорумчанин
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 810
Репутация: 165
По умолчанию

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

Dux вне форума   Ответить с цитированием
Старый 05.06.2015, 18:21   #28
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,116
Репутация: 6385
По умолчанию

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

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

Цитата:
Сообщение от Аватар Посмотреть сообщение
У меня в ShortDateFormat год 4-значный, сделай 2-значный
сделал, то же самое
Dux вне форума   Ответить с цитированием
Старый 05.06.2015, 18:24   #30
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,116
Репутация: 6385
По умолчанию

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

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

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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


20:30.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru