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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2012, 11:43   #1
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию Процедура на сервере или формирование в клиентском приложении

Имеется поле Срок окончания лицензии типа Date. Необходимо при открытии формы в Delphi если срок действия заканчиваетя через 45 суток извещать клиента об окончании срока лицензии. Как это можно сделать на сервере через процедуру или что-нибудь другое или в клиентском приложении?

Если можно пример кода.
Ericnex вне форума Ответить с цитированием
Старый 06.09.2012, 12:07   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

для процедуры (на клиенте должно использоваться ErrorHandler):
Код:
SELECT srok FROM table INTO :t_srok;
if (:t_srok-date<=45)
  then exception <имя исключения созданого заранее в бд>;
для клиента:
Код:
var
  d : integer;
...
Query.Close;
Query.SQL.Text:='SELECT srok FROM table';
Query.Open;
d:=Query.FieldByName('srok').AsDate-now;
if d<=45
  then ShowMessage('Срок лиценции закончится через '+IntToStr(d)+' дней');
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 06.09.2012, 12:19   #3
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию

Код:
d:=Query.FieldByName('srok').AsDate-now;
Ругается на AsDate не понимает. Здесь все правильно?
Ericnex вне форума Ответить с цитированием
Старый 06.09.2012, 12:28   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

AsDateTime
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.09.2012, 12:29   #5
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

попробуйте вместо AsDate: Value или то что написал Аватар
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 06.09.2012, 12:41   #6
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию

Подошло AsVarianat, правда теперь перед просмотром таблицы очищаются все поля.

И еще как в этом же обработчике события указать именно у какой программы скоро закончится срок действия?
Ericnex вне форума Ответить с цитированием
Старый 06.09.2012, 12:46   #7
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Код:
var
  d : integer;
...
Query.Close;
Query.SQL.Text:='SELECT srok, prog_name FROM table';
Query.Open;
while not Query.Eof 
  do
  begin
  d:=Query.FieldByName('srok').AsVarianat-now;
  if d<=45
    then ShowMessage('Срок лиценции для программы +Query.FieldByName('prog_name').AsString+' закончится через '+IntToStr(d)+' дней');
  Query.Next;
  end;
UPD: при открытии DataSet-а курсор автоматом стает на первую запись
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 06.09.2012 в 12:49.
Yurk@ вне форума Ответить с цитированием
Старый 06.09.2012, 12:47   #8
Ericnex
Форумчанин
 
Регистрация: 07.04.2010
Сообщений: 218
По умолчанию

И еще: обработчик перемещается только к самой первой записи. А что если таких записей не одна? как будет выглядеть программа?

Программа зациклилась. Появляется сообщение бесконечное число раз.

Вру... Все работает спасибо за помощь!

Надо еще сделать чтобы если лицензии в порядке программа выдавало соответствующее сообщение
Делал так не правильно работает сообщение выдается милионное число раз, куда поставить оператор else
Код:
procedure TForm3.Button8Click(Sender: TObject);
var d:integer;
begin
DM.Query1.Close;
DM.Query1.SQL.Text:='SELECT * FROM PO';
DM.Query1.Open;
while not DM.Query1.Eof
  do
  begin
  d:=DM.Query1.FieldByName('End_date').AsVariant-now;
  if d<=45
    then ShowMessage('Срок лицензии для программы '+DM.Query1.FieldByName('Name_program').AsString+' закончится через '+IntToStr(d)+' дней');
    DM.Query1.Next;
  end else Showmessage('Сроки лицензии в порядке!')

end;

end.

Последний раз редактировалось Stilet; 07.09.2012 в 07:56.
Ericnex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экономия памяти. Что лучше: метод класса или процедура с параметрами... или без разницы? 3D Hunter Общие вопросы Delphi 7 26.12.2011 23:23
Формирование данных на сервере и вывод в веб metoflex C/C++ Сетевое программирование 3 07.07.2011 20:59
Удаление и сортировка в клиентском приложении на C# Brabus Помощь студентам 0 16.06.2011 13:46
Связь или ошибка в приложении Bit'um БД в Delphi 0 18.04.2011 21:41