Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > 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,392
Репутация: 6468
По умолчанию

В 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,392
Репутация: 6468
По умолчанию

А в каком виде дату вводят? И какие ситуации обработать и исправить?
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума   Ответить с цитированием
Старый 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,392
Репутация: 6468
По умолчанию

Код:

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,392
Репутация: 6468
По умолчанию

У меня в 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,392
Репутация: 6468
По умолчанию

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

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

Опции темы

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

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


04:37.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


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