|
|
|
Ошибка в связке Access2000+SQLServer2000+ХП с курсором
|
|||
|---|---|---|---|
|
#18+
Имеем: Есть навороченная ХП. В ХП один раз используется курсор. В Query Analyzer (QA) все хорошо выполняется. Запуск ХП в Access дает ошибку "Сохраненная процедура выполена успешно, но ни одной записи не возвращено". В начале ХП есть "SET NOCOUNT ON", перед результирующим Select'ом "SET NOCOUNT OFF", т.е. в QA при запуске ХП четко формируется только одна таблица-результат (без служебных сообщений). Для поиска причин порезал ХП, осталось: Код: 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. Код: plaintext 1. 2. 3. 4. Вообще похожая ситуация с ХП и Access у меня была. Как я понял, Access почему-то хочет, чтобы операция с курсором была в САМОМ НАЧАЛЕ ХП. Действительно, если вот это с начала ХП я забираю Код: plaintext 1. 2. то все в Access начинает работать. Возникла идея, что Access хочет видеть в начале ХП работу с курсором, поэтому в начале создавать временнею таблицу #Табл1 нельзя. Но мне она и нужна очень. Хорошо, тогда забрал первый SELECT и написал так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 20:05:05 |
|
||
|
Ошибка в связке Access2000+SQLServer2000+ХП с курсором
|
|||
|---|---|---|---|
|
#18+
указывать SET NOCOUNT OFF не нужно Каким образом принимаются данные в Аксес? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 10:13:39 |
|
||
|
Ошибка в связке Access2000+SQLServer2000+ХП с курсором
|
|||
|---|---|---|---|
|
#18+
В оригинальной ХП этого нет "SET NOCOUNT OFF". Это уже появилось в процессе, когда резал ХП и искал место, которое Access'у не нравится. Результаты ХП пока никуда не передаются. Просто по Enter запускаю ХП в Access (где перечень всех ХП на сервере виден). Тут же и дается ошибка. Чего удалось увидеть в результате экспериментов: 1. Если в оригинальной (большой) ХП в цикле обработки курсора Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. то ошибки не возникает (выдается пустая таблица). 2. если перенести работу с курсором в начало ХП, то все начинает работать, но мне надо сделать до работы курсора несколько выборок... Вообще похожие проблемы у меня уже были с другими ХП, но там все вылечилось переносом работы с курсором в начало процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 15:10:05 |
|
||
|
Ошибка в связке Access2000+SQLServer2000+ХП с курсором
|
|||
|---|---|---|---|
|
#18+
BAlex: Можете сконструировать законченный тестовый пример, воспроизводящий ошибку (чтобы я мог его у себя протестировать), и выложить его здесь? Дело в том, что моя попытка воспроизвести поведение Access, описанное вами, не удалась. Что я делал: 1. По образцу кода автора темы создаю следующую не особенно изящную процедуру: Код: 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. 27. 28. 29. 30. 31. 32. 33. 2.Запускаю вышеприведённую процедуру двойным кликом в окне базы данных Access. Ошибки не возникает, отображается результирующая таблица. 3. Удаляю строку set nocount on в начале процедуры, и запускаю процедуру снова таким же образом; появляется сообщение "Сохраненная процедура выполнена успешно, но ни одной записи не возвращено." Всё это совершенно закономерно, поскольку Access ожидает лишь один результирующий набор записей, а без set nocount on процедура их генерирует множество. Так что, мне кажется, ошибка у автора темы порождается той частью кода, которую он нам не показал. Эксперименты проводились на MS Access 2000 SP3, MS SQL Server 2000 SP3. Я, конечно, ещё попробую на MS Access 2002, но вряд ли, как мне кажется, дело в этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 16:34:51 |
|
||
|
Ошибка в связке Access2000+SQLServer2000+ХП с курсором
|
|||
|---|---|---|---|
|
#18+
Хорошо, попробую что-то удобоваримое выставить. Вот только сейчас дошло, что поля там на украинском языке... Надеюсь, это не будет проблемой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 18:03:49 |
|
||
|
Ошибка в связке Access2000+SQLServer2000+ХП с курсором
|
|||
|---|---|---|---|
|
#18+
В общем, мучился, мучился... Так и не победил. Если написать похожую МАЛЕНЬКУЮ процедуру, чтобы создать таблицу, а потом курсор, то все работает. А вот эта большая ХП никак результат в Access не дает, хотя все в QA супер... В общем, на коротком примере повторить не получается. Нужные таблицы выгрузил в отдельную базу. Как-то можно разместить файл mdf? (самое обидное, в QA все сделал, осталось только в Access увидеть результат...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2004, 20:37:33 |
|
||
|
Ошибка в связке Access2000+SQLServer2000+ХП с курсором
|
|||
|---|---|---|---|
|
#18+
>>Запуск ХП в Access дает ошибку "Сохраненная процедура выполена успешно, но ни одной записи не возвращено". Это не ошибка - это нормальное сообщение Access о успешно отрботавшей процедуре, КОГДА она вернула сообщение типа (NNN row(s) affected). SET NOCOUNT ON отключает именно его. SET NOCOUNT OFF не надо делать... нигде. Иначе будет "Сохраненная процедура выполена успешно, но ни одной записи не возвращено" Равно Access плохо реагирует на print "тру-ля-ля" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 06:45:41 |
|
||
|
|

start [/forum/topic.php?fid=45&tid=1669534]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
73ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 221ms |
| total: | 378ms |

| 0 / 0 |
