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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 4 692

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

Здравствуйте, эксперты!
Подскажите пожалуйста как мне вызывать процедуру stored procedure-у MSSQL в Delphi?

Приложение:
  1. USE [bonus_dbTest]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[Commit_Actions] Script Date: 11/01/2010 11:44:09 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. ALTER PROCEDURE [dbo].[Commit_Actions]
  9.  
  10. AS
  11. DECLARE
  12. @err int,
  13. @action_id int,
  14. @member_id int,
  15. @enabled tinyint,
  16. @date_added datetime,
  17. @birthday_date tinyint,
  18. @equal_date datetime,
  19. @limit money,
  20. @date_from datetime,
  21. @date_to datetime,
  22. @bonus_money money,
  23. @bonus_percent money,
  24. @description varchar(100),
  25. @comment varchar(100),
  26. @card_id int,
  27. @bonus money,
  28. @date_of_birth datetime,
  29. @void int,
  30. @current_bonus money,
  31. @doc_summs money;
  32.  
  33. SELECT action_id,
  34. member_id,
  35. enabled,
  36. date_added,
  37. birthday_date,
  38. equal_date,
  39. limit,
  40. date_from,
  41. date_to,
  42. bonus_money,
  43. bonus_percent,
  44. description,
  45. comment
  46. FROM action
  47. WHERE enabled = 1 and
  48. getdate() between ISNULL(date_from, convert (datetime, '010101', 112)) and
  49. ISNULL(date_to, convert (datetime, '490101', 112));
  50. DECLARE c_cardowner CURSOR FOR
  51. SELECT card_id,
  52. bonus,
  53. date_of_birth
  54. FROM vcard
  55. WHERE active = 1;
  56.  
  57. BEGIN
  58. /* set nocount on;
  59. set @err = 0;
  60. begin transaction;
  61.  
  62. OPEN c_action;
  63. FETCH NEXT FROM c_action INTO @action_id, @member_id, @enabled, @date_added, @birthday_date,
  64. @equal_date, @limit, @date_from, @date_to, @bonus_money, @bonus_percent, @description,
  65. @comment;
  66. WHILE @@FETCH_STATUS = 0
  67. BEGIN
  68.  
  69. IF @equal_date IS NOT NULL and DATEDIFF(day, @equal_date, getdate()) = 0 begin
  70. OPEN c_cardowner;
  71. FETCH NEXT FROM c_cardowner INTO @card_id, @bonus, @date_of_birth;
  72. WHILE @@FETCH_STATUS = 0
  73. BEGIN
  74. if @bonus_money IS NULL set @bonus_money = (@bonus * @bonus_percent)/100;
  75. select @void = 1
  76. from doc
  77. where card_id = @card_id and
  78. oper_type = 5 and
  79. DATEDIFF(day, doc_date, getdate()) = 0 and
  80. doc_items = @action_id and
  81. id_1C = '';
  82. IF @@ROWCOUNT = 0 and @bonus_money > 0 begin
  83. select @current_bonus = bonus + @bonus_money
  84. from vcurrent_card
  85. where card_id = @card_id;
  86. update card
  87. set bonus = @current_bonus
  88. where card_id = @card_id and
  89. active = 1;
  90. insert into doc(id_1C, card_id, sync_id, oper_type, doc_number, doc_date,
  91. doc_type, doc_summ, doc_bonus, doc_items)
  92. values ('', @card_id, 0, 5, '', getdate(), @description + @comment, 0, @bonus_money,
  93. @action_id);
  94. end;
  95. FETCH NEXT FROM c_cardowner INTO @card_id, @bonus, @date_of_birth;
  96. END;
  97. CLOSE c_cardowner;
  98. END;
  99.  
  100. IF @birthday_date = 1 begin
  101. OPEN c_cardowner;
  102. FETCH NEXT FROM c_cardowner INTO @card_id, @bonus, @date_of_birth;
  103. WHILE @@FETCH_STATUS = 0
  104. BEGIN
  105. if @bonus_money IS NULL set @bonus_money = (@bonus * @bonus_percent)/100;
  106. select @void = 1
  107. from doc
  108. where card_id = @card_id and
  109. oper_type = 5 and
  110. DATEDIFF(day, doc_date, getdate()) = 0 and
  111. doc_items = @action_id and
  112. id_1C = '';
  113. IF @@ROWCOUNT = 0 and @bonus_money > 0 and DATEPART(month,getdate()) =
  114. DATEPART(month,@date_of_birth) and DATEPART(day,getdate()) = DATEPART(day,
  115. @date_of_birth) begin
  116. select @current_bonus = bonus + @bonus_money
  117. from vcurrent_card
  118. where card_id = @card_id;
  119. update card
  120. set bonus = @current_bonus
  121. where card_id = @card_id and
  122. active = 1;
  123. insert into doc(id_1C, card_id, sync_id, oper_type, doc_number, doc_date,
  124. doc_type, doc_summ, doc_bonus, doc_items)
  125. values ('', @card_id, 0, 5, '', getdate(), @description + @comment, 0, @bonus_money,
  126. @action_id);
  127. end;
  128. FETCH NEXT FROM c_cardowner INTO @card_id, @bonus, @date_of_birth;
  129. END;
  130. CLOSE c_cardowner;
  131. END;
  132.  
  133. IF @limit IS NOT NULL begin
  134. OPEN c_cardowner;
  135. FETCH NEXT FROM c_cardowner INTO @card_id, @bonus, @date_of_birth;
  136. WHILE @@FETCH_STATUS = 0
  137. BEGIN
  138. if @bonus_money IS NULL set @bonus_money = (@bonus * @bonus_percent)/100;
  139.  
  140. select @doc_summs = ISNULL(sum(doc_summ),0)
  141. from doc
  142. where card_id = @card_id and
  143. oper_type in (1, 2) and
  144. doc_date between ISNULL(@date_from, convert (datetime, '010101', 112)) and
  145. ISNULL(@date_to, convert (datetime, '490101', 112));
  146.  
  147. select @void = 1
  148. from doc
  149. where card_id = @card_id and
  150. oper_type = 5 and
  151. doc_items = @action_id and
  152. id_1C = '';
  153. IF @@ROWCOUNT = 0 and @bonus_money > 0 and @doc_summs > @limit begin
  154. select @current_bonus = bonus + @bonus_money
  155. from vcurrent_card
  156. where card_id = @card_id;
  157. update card
  158. set bonus = @current_bonus
  159. where card_id = @card_id and
  160. active = 1;
  161. insert into doc(id_1C, card_id, sync_id, oper_type, doc_number, doc_date,
  162. doc_type, doc_summ, doc_bonus, doc_items)
  163. values ('', @card_id, 0, 5, '', getdate(), @description + @comment, 0, @bonus_money,
  164. @action_id);
  165. end;
  166. FETCH NEXT FROM c_cardowner INTO @card_id, @bonus, @date_of_birth;
  167. END;
  168. CLOSE c_cardowner;
  169. END;
  170. FETCH NEXT FROM c_action INTO @action_id, @member_id, @enabled, @date_added,
  171. @birthday_date,
  172. @equal_date, @limit, @date_from, @date_to, @bonus_money, @bonus_percent, @description,
  173. @comment;
  174. END;
  175. CLOSE c_action;
  176. Commit Transaction;
  177. DEALLOCATE c_action;
  178. DEALLOCATE c_cardowner;
  179. if @@Error <> 0 or @err <> 0 goto PROBLEM;
  180. return @err;
  181. PROBLEM:
  182.  
  183. return 1;
  184. */
  185.  
  186. return 1;
  187. END
  188.  


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

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


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

Мини-форум пуст.

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

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