Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 693

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Подскажите пожалуйста. Как сделать так чтобы при добавлении новой акции бонусы начислялись по дате рождения участника? То есть автоматически проверялось есть у него сегодня день рождение или нет если есть то ему начислялись бонусы из столбца amount_bonus в столбец bonus.

Приложение:
  1. unit Unit6;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, ComCtrls;
  8.  
  9. type
  10. TForm6 = class(TForm)
  11. Edit1: TEdit;
  12. Memo1: TMemo;
  13. Label1: TLabel;
  14. Label2: TLabel;
  15. DateTimePicker1: TDateTimePicker;
  16. DateTimePicker2: TDateTimePicker;
  17. Label3: TLabel;
  18. Label4: TLabel;
  19. Edit2: TEdit;
  20. Label5: TLabel;
  21. Edit3: TEdit;
  22. Label6: TLabel;
  23. CheckBox1: TCheckBox;
  24. CheckBox2: TCheckBox;
  25. Label7: TLabel;
  26. RadioButton1: TRadioButton;
  27. Label8: TLabel;
  28. RadioButton2: TRadioButton;
  29. Button1: TButton;
  30. CheckBox3: TCheckBox;
  31. Button2: TButton;
  32. procedure RadioButton1Click(Sender: TObject);
  33. procedure Button1Click(Sender: TObject);
  34. procedure RadioButton2Click(Sender: TObject);
  35. procedure Button2Click(Sender: TObject);
  36. procedure FormActivate(Sender: TObject);
  37. private
  38. { Private declarations }
  39. public
  40. { Public declarations }
  41. end;
  42.  
  43. var
  44. Form6: TForm6;
  45. field_id:byte;
  46. act_id:integer;
  47. implementation
  48.  
  49. uses Unit3, Unit4, Unit2, Unit1;
  50.  
  51. {$R *.dfm}
  52.  
  53. procedure TForm6.RadioButton1Click(Sender: TObject);
  54. begin
  55. if RadioButton2.Checked then Button1.Enabled:=true else Button1.Enabled:=false;
  56. end;
  57.  
  58. procedure TForm6.Button1Click(Sender: TObject);
  59. begin
  60. form4.ShowModal;
  61. end;
  62.  
  63. procedure TForm6.RadioButton2Click(Sender: TObject);
  64. begin
  65. if RadioButton2.Checked then Button1.Enabled:=true else Button1.Enabled:=false;
  66. end;
  67.  
  68. procedure TForm6.Button2Click(Sender: TObject);
  69. var res,i:integer;
  70. begin
  71. res:=0;
  72. if (RadioButton2.Checked and Checkbox3.Checked)or(RadioButton1.Checked) then
  73. begin
  74. DM.myproc.ExecProc;
  75. field_id:=DM.myproc.Params[0].AsInteger;
  76. DM.query.SQL.Text:='insert into act_new(name,description,date_begin,date_end,active,amount_bonus,field_id)'+
  77. ' values('+char(39)+Edit1.Text+char(39)+','+
  78. char(39)+Memo1.Text+char(39)+','+
  79. 'convert(datetime,'+unit4.fdate(DateTimePicker1.Date)+'),'+
  80. 'convert(datetime,'+unit4.fdate(DateTimePicker2.Date)+'),'+
  81. copy(booltostr(checkbox1.Checked,false),length(booltostr(checkbox1.Checked,false)),1)+','+
  82. Edit2.Text+','+inttostr(field_id)+')';
  83. DM.query.ExecSQL(true);
  84. res:=res+DM.query.RowsAffected;
  85. DM.query.SQL.Text:='SELECT IDENT_CURRENT ('+char(39)+'dbo.act_new'+char(39)+') AS Current_Identity';
  86. DM.query.Open;
  87. DM.query.First;
  88. act_id:=DM.query.Fields[0].AsInteger;
  89. DM.query.Close;
  90. DM.query.SQL.Text:='alter table bonus_dbTest.dbo.spiski add act_'+inttostr(act_id)+
  91. ' bit NOT NULL CONSTRAINT DF_spiski_act_'+inttostr(act_id)+' DEFAULT '+copy(booltostr(RadioButton1.Checked,false),length(booltostr(RadioButton1.Checked,false)),1);
  92. DM.query.ExecSQL(false);
  93. res:=res+DM.query.RowsAffected;
  94. DM.query.SQL.Text:='UPDATE [card] '+
  95. 'SET [bonus] = [bonus] + :mon '+
  96. 'WHERE [card_id] IN '+
  97. ' ( '+
  98. ' SELECT [card_id] FROM [owner] '+
  99. ' WHERE '+
  100. ' MONTH(date_of_birth) >= MONTH (:m1) AND '+
  101. ' MONTH(date_of_birth) <= MONTH (:m2) AND '+
  102. ' DAY(date_of_birth) >= DAY (:d1) AND '+
  103. ' DAY(date_of_birth) <= DAY (:d2) '+
  104. ' MONTH(date_of_birth) = MONTH(NOW()) AND'+
  105. ' DAY(date_of_birth) = DAY(NOW())'+
  106. ' )';
  107. DM.query.Params.ParseSQL(DM.query.SQL.Text,true);
  108. DM.query.Params.ParamByName('mon').Value:=StrToCurr(Edit2.Text);
  109. DM.query.Params.ParamByName('m1').Value:=DateTimePicker1.Date;
  110. DM.query.Params.ParamByName('m2').Value:=DateTimePicker2.Date;
  111. DM.query.Params.ParamByName('d1').Value:=DateTimePicker1.Date;
  112. DM.query.Params.ParamByName('d2').Value:=DateTimePicker2.Date;
  113. DM.query.ExecSQL();
  114.  
  115.  
  116. end;
  117. end;
  118.  
  119.  
  120.  
  121.  
  122. procedure TForm6.FormActivate(Sender: TObject);
  123. begin
  124. DateTimePicker1.Date:=Date;
  125. DateTimePicker2.Date:=Date;
  126. end;
  127.  
  128. end.


winterfell Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: winterfell (статус: Посетитель)
Вопрос отправлен: 1 ноября 2010, 09:55
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 17 ноября 2010, 21:02; участников в обсуждении: 3.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 2 ноября 2010, 19:31 [#1]:

какая СУБД? Структура таблиц? Что значит автоматически - реализация на стороне сервера?
winterfell

winterfell (статус: Посетитель), 3 ноября 2010, 03:20 [#2]:

СУБД MS SQL. Вот ссылка на структуру таблиц http://narod.ru/disk/26949248000/%D0%9B%D0%B8%D1%81%D1%82%20Microsoft%20Excel.rar.html . Автоматически значит программа должна сама проверять каждый день есть день рождение у кого если есть то начисляла ему бонусы.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 3 ноября 2010, 06:05 [#3]:

сервер такого (автоматически выполнять действия при изменении даты)делать не будет. Значит надо писать клиента, который при наступлении следующего дня посылает запрос на сервер для внесения изменений.
BurcevD

BurcevD (статус: Посетитель), 17 ноября 2010, 21:02 [#4]:

почему не может. Если это MS SQL то можно сделать скрипт процедуры, в которой будет проводится вся проверка и запланировать ее запуск о расписанию.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:46
Выполнено за 0.03 сек.