|
Возврат результата выполнения хранимой процедуры в ADODB.Recordset
|
|||
---|---|---|---|
#18+
Здравствуйте! Пишу макрос, в котором неоходимо результат выполнения хранимой процедуры вернуть в ADODB.Recordset . Что только ни делала. Использовала и ADODB.Recordset.Open и ADODB.Command.Execute - ничего не получается. Хранимая процедура выполняется но ADODB.Recordset после ADODB.Recordset.Open или ADODB.Command.Execute закрыт. Последняя строчка в хранимой процедуре - простой селект, два входных параметра каждый из которых представляет собой строку в формате - 'гггг.мм.дд'. Синтаксис вызова в SQL Query Analyser: execute dbo.spx_report_RNU46_spis @data1='2005.01.01', @data2='2005.12.31' . Вызов возвращает 87 строк. Результат вызова т.е. эти 87 строк необходимо вставить в активный рабочий лист активной рабочей книги. За последние дни мучений с этим вопросом выяснилось что хранимая процедура выполняется но не полностью, т.е. после первого оператора который обрабатывает некоторое количество записей (т.е. после того как первый раз происходит 87 rows affected) выполнение хранимой процедуры прекращается, а первый такой оператор это insert в предварительно созданную таблицу. Логично. Этот оператор строк не возвращает поэтому после выполнения set ADODB.Recordset = ADODB.Command.Execute() рекордсет оказывается пустым и переводится в состояние "закрыт". И что с этим делать не знаю. Как сделать так чтобы процедура выполнилась до конца? insert #reg_47_all(idinv, invno, nameinv, first_cost, numgr, real_srok, pred_sobstv, srok_pol_pred_use, spec_koef, norm_amort, MonthWear, YearWear, TotalWear, date_expl, date_ist, nseries, idTaxes) select distinct t.idinv, a.invno, a.nameinv, 0, ta.Numgr, ta.Srok_1, IsNull(a. srok_pred_use, 0), IsNull(a.srok_pol_pred_use, 0), IsNull(a.spec_koef,0), 0, 0, 0, 0, null, null, t.nseries, ta.idtaxes from taxes_history t (nolock), assets a (nolock), taxes ta (nolock) where dtstart between @date1 and @date2time and a.idinv = t.idinv and a.idtaxes_nu = ta.idtaxes and num_rnu = @RNU46 and t.status In(@stWork, @stHand, @stWithdrawal, @stInpRest, @stStorage) /**/and t.IdInv in (select IdInv from taxes_history th where th.status=4 and th.dtstart between @date1 and @date2time /**/and IdInv in (select IdInv from history h, reason r where h.IdEnt=r.IdEnt and r.Name like 'Списание%' and h.DateP between @date1 and @date2time)) Вот после этого оператора (после того как в таблицу #reg_47_all было вставлено 87 строк) выполнение хранимой процедуры прекращается. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2006, 07:22 |
|
Возврат результата выполнения хранимой процедуры в ADODB.Recordset
|
|||
---|---|---|---|
#18+
Это просто... Уж такова специфика работы с ADO. Первой строкой в хранимой пр-ре set nocount on. Если пр-ра возвращает более одного набора их перебор осуществляется через NextRecordset. Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2006, 09:00 |
|
Возврат результата выполнения хранимой процедуры в ADODB.Recordset
|
|||
---|---|---|---|
#18+
Спасибо, buser. Попробую. Надеюсь что получится :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2006, 20:39 |
|
Возврат результата выполнения хранимой процедуры в ADODB.Recordset
|
|||
---|---|---|---|
#18+
Опция set nocount on помогает, но не во всех случаях. Посмотрите, может знаете в чем здесь дело... --Вариант 1 - работает... set nocount on select * into #tmp from pol_temp insert #tmp select * from pol_temp insert #tmp select * from pol_temp select * from #tmp drop table #tmp --Вариант 2 - НЕ работает... set nocount on SET ANSI_WARNINGS OFF declare @temptable as table( DatabaseName nvarchar(128), LogSize float(7), LogSpaceUsed float(7), Status1 int) INSERT INTO @temptable EXEC ('DBCC SQLPERF(LOGSPACE) WITH NO_INFOMSGS') select * from @temptable ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2011, 13:58 |
|
|
start [/forum/topic.php?fid=17&fpage=42&tid=1350673]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 20ms |
total: | 141ms |
0 / 0 |