
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
11.10.2007, 09:37
|
|||
|---|---|---|---|
|
|||
Данные из хранимой процедуры |
|||
|
#18+
Народ, если не сложно растолкуйте такой вопрос. Я из Excel-а пытаюсь выполнить хранимую процедуру. Оная должна вернуть данные в виде таблицы. Проблема в том, что при выплнении программы (при обращении к Recordset для получения данных) возникает ошибка: "Run-time error '3704': Операция не допускается, если объект закрыт" Я использовал разные примеры, которые находил в учебниках, что очень небогато, из встроенного хелпа. Все одно вылетает эта ошибка. Может хранимая поцедура должна иметь определенную структуру? Сейчас она требует один входящи параметр - дату. И выдает таблицу из 3-х полей и 3 записей На всякий случай привожу простой код запроса Dim cn As New ADODB.Connection cn.ConnectionString = "Provider=SQLOLEDB.1;Password=pass;" & _ "Persist Security Info=True;User ID=sa;" _ & "Initial Catalog=Basa1;Data Source=Name_SQLServer" cn.Open Dim cmd As New ADODB.Command cmd.CommandType = adCmdStoredProc cmd.CommandText = "bsl_sp_EXCEL_ShipmentAndOrder" Set cmd.ActiveConnection = cn cmd.Parameters.Refresh cmd.Parameters(1) = "10.10.2007" Dim rs As New ADODB.Recordset 'Set rs = cmd.Execute() ' либо так пробовал rs.Open cmd ' либо так Worksheets("Лист1").Cells(3, 3) = rs.Fields(0) ' а здесь и возникает эта ошибка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.10.2007, 09:44
|
|||
|---|---|---|---|
Данные из хранимой процедуры |
|||
|
#18+
Лучше приведи код хранимой процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.10.2007, 10:25
|
|||
|---|---|---|---|
|
|||
Данные из хранимой процедуры |
|||
|
#18+
Вообще вся процедура довольно объемная, но на этапе отладки я ее упростил максимально. Привожу этот простой код. При запуске, скажем, в Query Analyzer все прекрасно работает ALTER PROCEDURE [dbo].[bsl_sp_EXCEL_ShipmentAndOrder] @date_current DATETIME AS BEGIN DECLARE @sum_order float, @sum_fact float CREATE TABLE #Result ( s_name varchar(20), s_order float, s_fact float, s_cod int ) insert into #Result exec BSL_SP_EXCEL_ORDERSHIPMENT @date_current select s_name, s_fact, s_order from #Result order by cod END ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.10.2007, 11:31
|
|||
|---|---|---|---|
Данные из хранимой процедуры |
|||
|
#18+
в начале процедуры выставьте SET NOCOUNT ON PS: если этого не указывать, то в рекордсет попадает служебная информация о выполнении ХП I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.10.2007, 11:58
|
|||
|---|---|---|---|
|
|||
Данные из хранимой процедуры |
|||
|
#18+
Попробовал. Не прокатывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
11.10.2007, 19:23
|
|||
|---|---|---|---|
Данные из хранимой процедуры |
|||
|
#18+
После rs.Open cmd проверь ощибки которые вернул сервер. Может у тебя прав на запуск процедуры не хватает? Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.10.2007, 14:17
|
|||
|---|---|---|---|
|
|||
Данные из хранимой процедуры |
|||
|
#18+
Нее, не выдает никакой ошибки. В общем я заметил следующее. Есле в процедуре стоит просто селект из любой таблицы, то все работает. Как только я этот селект делаю во временную таблицу, и только потом беру результат из временной таблицы, то все стопорится. Т.е. так вот работает: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON SET NOCOUNT ON go ALTER PROCEDURE [dbo].[s_proс1] AS BEGIN select field1, field2,field3 from table1 END А вот так уже не работает: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON SET NOCOUNT ON go ALTER PROCEDURE [dbo].[s_proc2] AS BEGIN CREATE TABLE #Result ( field1 varchar(20), field2 float, field3 float ) INSERT INTO #Result select field1, field2,field3 from table1 select * from #Result END Что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.10.2007, 16:33
|
|||
|---|---|---|---|
Данные из хранимой процедуры |
|||
|
#18+
HandKotв начале процедуры выставьте SET NOCOUNT ON avtolik , перед процедурой это не тоже самое, что и в начале процедуры. SET NOCOUNT ON должно стоять после begin. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
12.10.2007, 17:21
|
|||
|---|---|---|---|
Данные из хранимой процедуры |
|||
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=60&mobile=1&tid=2163261]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
148ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 456ms |

| 0 / 0 |
