powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Возврат результата выполнения хранимой процедуры в ADODB.Recordset
5 сообщений из 5, страница 1 из 1
Возврат результата выполнения хранимой процедуры в ADODB.Recordset
    #33650746
khabarova_vi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Пишу макрос, в котором неоходимо результат выполнения хранимой процедуры вернуть в 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 строк) выполнение хранимой процедуры прекращается.
...
Рейтинг: 0 / 0
Возврат результата выполнения хранимой процедуры в ADODB.Recordset
    #33650834
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это просто... Уж такова специфика работы с ADO. Первой строкой в хранимой пр-ре set nocount on. Если пр-ра возвращает более одного набора их перебор осуществляется через NextRecordset. Удачи.
...
Рейтинг: 0 / 0
Возврат результата выполнения хранимой процедуры в ADODB.Recordset
    #33653346
khabarova_vi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, buser. Попробую. Надеюсь что получится :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Возврат результата выполнения хранимой процедуры в ADODB.Recordset
    #37372833
pol_ar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опция
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
...
Рейтинг: 0 / 0
Возврат результата выполнения хранимой процедуры в ADODB.Recordset
    #37372853
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что демонстрируют эти примеры? И что значит не работает? Запустите вариант 2а в SSMS и посмотрите результат...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Возврат результата выполнения хранимой процедуры в ADODB.Recordset
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]