|
|
|
Данные из хранимой процедуры
|
|||
|---|---|---|---|
|
#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:37 |
|
||
|
Данные из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Лучше приведи код хранимой процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2007, 09:44 |
|
||
|
Данные из хранимой процедуры
|
|||
|---|---|---|---|
|
#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, 10:25 |
|
||
|
Данные из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
в начале процедуры выставьте SET NOCOUNT ON PS: если этого не указывать, то в рекордсет попадает служебная информация о выполнении ХП I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2007, 11:31 |
|
||
|
Данные из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Попробовал. Не прокатывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2007, 11:58 |
|
||
|
Данные из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
После rs.Open cmd проверь ощибки которые вернул сервер. Может у тебя прав на запуск процедуры не хватает? Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2007, 19:23 |
|
||
|
Данные из хранимой процедуры
|
|||
|---|---|---|---|
|
#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, 14:17 |
|
||
|
Данные из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
HandKotв начале процедуры выставьте SET NOCOUNT ON avtolik , перед процедурой это не тоже самое, что и в начале процедуры. SET NOCOUNT ON должно стоять после begin. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2007, 16:33 |
|
||
|
Данные из хранимой процедуры
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2007, 17:21 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34865111&tid=2163261]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 219ms |
| total: | 375ms |

| 0 / 0 |
