|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Функция: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
хранимка, где она юзается: Код: sql 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.
Запускаю в менеджере SQL Код: sql 1. 2. 3. 4.
выдает 1,2,3... и т. д. - работает стало быть Запускаю через ADO (VBA): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
выдает "переменная объекта или переменная не задана" другие процедуры, запускаемые аналогично отрабатываются, эта не хочет. В чем прикол? Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2015, 15:48 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Palarm, дык в форуме VB и надо спрашивать пока вероятность того что какой-нибудь con не инициализирован примерно равна вероятности того что что-то не так с OUTPUT у адо ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2015, 16:31 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
а так? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
и еще SET NOCOUNT ON первой строкой в хранимку. А вообще, в ADO есть ADODB.Command для выполнения процедур ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2015, 16:47 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Родил таки: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Но блин, только с этой хранимкой такая трабла, остальные отрабатываются как выше написал. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2015, 20:41 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Потому что другие хранимки не генерят дополнительные сообщения (которые подавляет set nocount on) ЗЫ: Если лень писать кучу CreateParameter, есть Parametes.Refresh, который получает готовую коллекцию параметров с сервера (лишний, но часто не очень принципиальный запрос к серверу) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2015, 21:03 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Получаем Null. Хотелось бы функцию на VB сделать, типа: funSQLstr("параметры через разделитель") почему и потребность запустить хранимку с минимумом букв. Но если через CreateParameter делать, придется кроме вышеназванных еще и adVarWChar (или другой какой тип) и длину указывать. Потому как при adBSTR выдает опять же Null, а adVarWChar требует обязательной длины строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2015, 21:27 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Shocker.ProПотому что другие хранимки не генерят дополнительные сообщения (которые подавляет set nocount on)А почему тогда к примеру эта работает по старому вызову? Код: sql 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
"дополнительные сообщения" - что имеете в виду? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2015, 21:30 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
PalarmА почему тогда к примеру эта работает по старому вызову?потому что в ней есть set nocount on Palarm"дополнительные сообщения" - что имеете в виду?типа тех, которые выдает студия после выполнения запроса: "(1 row(s) affected)", а также варнинги, принты и т.п. Чтобы их все перебрать на клиенте используется NextRecordset в нужном количестве. А поскольку морочиться нужным количеством дело неблагодарное, обычно их подавляют set nocount on ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2015, 22:06 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Palarm Код: vbnet 1.
msdnParameters Optional. A Variant array of parameter values used in conjunction with the input string or stream specified in CommandText or CommandStream. (Output parameters will not return correct values when passed in this argument.) я никогда так не вызывал, просто писал: Код: vbnet 1. 2.
не знаю, как себя поведет указание Parameters в Execute, но по хелпу мне кажется, что это не то разумеется, была функция-обертка для вызова процедур ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2015, 22:13 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
потому что в ней есть set nocount on его не было только в функции - добавил туда, так же требует чего то задать. Ставить подавление первой строкой тоже не помогло. Чую, тут какая то фигня простая, а мессага может вообще не о том верещит. Ну да пес с ней, сделал обертку конкретно под эту хранимку. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2015, 09:33 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Есть подозрение, что хранимка не пашет через execute потому, что там есть вызов функции, чего нет в других хранимках, которые запускаются нормально. По крайней мере вызов самой функции дает такую же месагу, если делать так: Код: vbnet 1.
А в менеджере отрабатывает нормально. И запуск хранимки в другой хранимке так же отрабатывает нормально: Код: vbnet 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. 34. 35. 36. 37. 38. 39.
Стало быть все зло от функций - осталось лишь найти какое. Было бы проще (меньше буковок писать) во многих случаях вместо хранимок с выходными параметрами вызывать функции через Execute - но они вообще так не взлетают. Видимо надо делать их запуск так же через cmd.Parameters с оберткой на VB? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2015, 09:47 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Palarmвызов самой функции дает такую же месагу, если делать так: Код: vbnet 1.
потому что тут-то возвращается рекордсет и надо обращаться с ним как с рекордсетом: Код: vbnet 1.
PalarmА в менеджере отрабатывает нормальностудия просто скрывает от тебя реальный возврат и оформляет результат по-человечески. А когда сам запускаешь, тебе точно нужно понимать, что у тебя процедура возвращает и реагировать соответствующим образом. А с функциями нет никаких проблем. Еще момент - пользователь, под которым ты выполняешь это в студии и в АДО. Дело в том, что при обычной процедуре достаточно прав только на процедуру, в случае же динамических запросов нужны права на все объекты, которые выполняются в динамике и все таблицы которые запрашиваются в динамике. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2015, 11:23 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Shocker.Proпотому что тут-то возвращается рекордсет и надо обращаться с ним как с рекордсетом Точно! :) Shocker.ProЕще момент - пользователь, под которым ты выполняешь это в студии и в АДО. Дело в том, что при обычной процедуре достаточно прав только на процедуру, в случае же динамических запросов нужны права на все объекты, которые выполняются в динамике и все таблицы которые запрашиваются в динамике.Это да, но у меня пока смешанная авторизация: коннект к серваку через sa либо юзера с правами на все объекты кроме их модификации - а дальше на клиенте раздача на объекты приложения. Когда доберусь до админских дел - это будет отдельная грабля. Спасибо за помощь :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2015, 11:37 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Лапочка однако оказалась не та, пришлось ее разбить. Собрать данные в строку из запроса типа Код: sql 1.
не вопрос, а вот начиная с Код: sql 1.
пошли пляски с бубном Код: sql 1.
тут вообще карнавал. Потому как пишут в тырнетах и сам убедился динамический запрос типа Код: sql 1.
ацкое зло. Прикольно, что funSQLStr() у меня вообще то есть на VBA и работает прекрасно со всякими запросами, потому что траблы кавычками там не выходит. Дай думаю ее на T-SQL сделаю, говорят перенос логики на сервер признак ума. Ага Как говорится: не мешай механизму работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2015, 18:33 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
я вообще не очень понял, зачем ты там динамику пилишь. Динамика на сервере обычно требуется редко. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2015, 23:58 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Shocker.Proя вообще не очень понял, зачем ты там динамику пилишь. Динамика на сервере обычно требуется редко.В hp_SQLstr текст запроса является параметром, стало быть только динамикой и можно, в hp_InsertWrDoc пара предложений FROM одинаковые в двух местах, чтобы не писать 2 раза одно и тоже сделал динамический запрос. Привычка оптимизировать код, избегая копипаста. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2015, 03:32 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
PalarmВ hp_SQLstr текст запроса является параметромэто я вижу, но, повторяю, я не понимаю зачем. По хорошему, клиент не должен думать о деталях хранения информации, и уж тем более не иметь никакого понятия о языке SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2015, 08:32 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Palarmпара предложений FROM одинаковые в двух местахобычно такое оформляется в виде INLINE UDF или VIEW ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2015, 08:33 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
мне нужен только текст FROM - как создать VIEW без SELECT - не представляю. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2015, 17:10 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Palarmмне нужен только текст FROMскорее всего у тебя кривой подход, обычно не должно возникать в принципе такой необходимости. Если есть повторяемость, создаются подзапросы, которые можно вынести в VIEW или INLINE UDF. Нет, не спорю, существуют ситуации, когда запрос приходится именно конструировать, но это исключение, а не правило. Возможно, у тебя есть в этом необходимость, но "FROM одинаковые в двух местах" - это не основание, для этого делают представления. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2015, 17:33 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Palarmмне нужен только текст FROM - как создать VIEW без SELECT - не представляю.по другому - ты мыслишь не теми категориями, видимо очень много лепил динамических запросов на клиенте в свое время. На TSQL так не пишут. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2015, 17:34 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Имеешь в виду, что надо сделать что то вроде: ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2015, 19:12 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5.
а потом уже это подставлять в итоговый запрос как вложенное представление? Хотя странный подход - динамический вроде проще и нагляднее ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2015, 19:20 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Palarmпроще и нагляднеепочитай себя сам, что я могу добавить? Palarmтут вообще карнавалPalarmпошли пляски с бубномPalarmсам убедился динамический запрос .... ацкое зло.если запрос, разбавленный множеством кавычек, конкатенаций, convert-ов, задвоенных кавычек, без подсветки синтаксиса и т.п. проще и нагляднее - пиши динамику. Еще. Динамика компилируется каждый раз при вызове, каждый раз производится анализ таблиц и составляется план запроса. Не динамический запрос компилируется сразу, план составляется тоже сразу. Излишне говорить, что это влияет на производительность. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2015, 20:15 |
|
Результат хранимки через ADO
|
|||
---|---|---|---|
#18+
Так? Код: sql 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2015, 20:35 |
|
|
start [/forum/topic.php?fid=60&msg=39109860&tid=2155711]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 313ms |
total: | 469ms |
0 / 0 |