|
|
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Егоров Александрkharkov_max, Для нескольких рекордсетов вам уже ответили.... +1 Вообще, при ADODB чтении выходных данных из процедуры нужно иметь ввиду следующее: Любая строчка информацонного сообщения порождает закрытый рекордсет (ЗаписиSQL.State=0) для каждого select в теле ХП возвращается свой рекордсет. все рекордсеты можно получить методом NextRecordset В вашем случае лучше всего оформить процедуру так: Код: plaintext При чтении делаем следующее: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 18:15 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Возможно Вы меня не так поняли. У меня есть хранимая процедура, в которую я из 1С должен передать данные. Запускаю в SQL ее вот в таком виде: exec ЕЕ.dbo.ПН 333,'20090301','20090314' и она дает результат. Теперь мне необходимо из 1С обратится к ней со своими переменными не (333,'20090301','20090314' ), а какими нибудь другими... Т.е. я из 1С должен влиять на результат выполнения хранимой процедуры своими данными 1С. В данных момент, как я понимаю, я процедуру запускаю, но в нее не передаются параметры, поэтому у меня наименования столбцов есть, а данных нет. Если вот это: Код: plaintext 1. 2. 3. 4. 5. не верно, я уберу, только вот вопрос как тогда передать мои параметры в хранимку ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 18:24 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Егоров Александрkharkov_max, Для нескольких рекордсетов вам уже ответили. С хранимкой надобность в выполнении именно параметризированого запроса отпадает, так как параметры можно указать прямо в тескте запроса, выигрыша от использования sp_executesql уже не будет. Дабы не молоть чепуху, покажите код вашей процедуры, или хотя бы заголовок с парметрами (от "create procedure" до "as") Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 18:30 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#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. 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. 69. 70. 71. 72. И она работает.... Параметры для передачи в хранимую процедуру, необходимы!!! Осталась одна проблема. Хранимая процедура выводит 2 таблицы, как мне получить данные из этих таблиц. Как я понимаю мне необходимо Recordset установить в нужную таблицу и провести цикл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 20:12 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
kharkov_max...В данных момент, как я понимаю, я процедуру запускаю, но в нее не передаются параметры, поэтому у меня наименования столбцов есть, а данных нет. Раз наименования столбцов есть - значит параметры передаются, но, возможно, не те. Приведите параметы вызова CreateParameter для дат. У вас, видимо, ошибка при создании типов параметров и передаются неправильные значения. Я боюсь, что дату из албанского языка передать как datetime будет сложно благодаря уникальной внутренней стрктуре даты в 1С. (в примере с sp_execute дата передается как varchar(8), а уж sp_execute сам преобразует дату в datetime). Объявите даты-параметры как varchar(8) в хранимой процедуре - при сравнении с датами строка yyyymmdd преобразуется к дате неяво, и передавайте даты как строки (см пример с sp_execute) Если ошибки - посмотрите профайлером, что передается при вызове execute. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 20:34 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
kharkov_maxИ она работает.... Параметры для передачи в хранимую процедуру, необходимы!!! Ну, главное чтобы работало. :) По поводу параметров. Они нужны когда вам нужно быстро и много раз выполнять один и тот же запрос с разными условиями. Использование параметров позволяет в этом случае более эффективно использовать ресурсы сервера. У вас же - открывается соединение, исполняется единственный раз запрос и соединение закрывается. Использование параметризированных запросов теряет всякий смысл. А раз так - много проще сфоримровать готовую строку запроса внутри 1С. kharkov_max Осталась одна проблема. Хранимая процедура выводит 2 таблицы, как мне получить данные из этих таблиц. Как я понимаю мне необходимо Recordset установить в нужную таблицу и провести цикл? ну ведь уже было. Я так понимаю вам надо как-то так: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 07:46 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Егоров Александрkharkov_maxИ она работает.... [quot kharkov_max] Осталась одна проблема. Хранимая процедура выводит 2 таблицы, как мне получить данные из этих таблиц. Как я понимаю мне необходимо Recordset установить в нужную таблицу и провести цикл? ну ведь уже было. Я так понимаю вам надо как-то так: Код: plaintext Такое ЗаписиSQL=ЗаписиSQL.NextRecordset; Не понимает, ошибка .... Если кто знает как, подскажите пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 08:01 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
kharkov_max, А ошибку не прведете? в васике используется Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 08:13 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
kharkov_max, И еще... вам бы это в отдельную процедуру выделить, например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 08:23 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Вроде вот так ЗаписиSQL = ЗаписиSQL.NextRecordset(); Работает )) Буду ковырять дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 08:29 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
kharkov_max, Ой! Извините, на работе запарка.... скобки забыл! Это же метод, а не свойство! на скобки только васику наплевать... :) Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 08:29 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Егоров Александрkharkov_max, И еще... вам бы это в отдельную процедуру выделить, например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Где то так и хочу сделать )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 08:31 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
В итоге хочу получить на выходе функции массив таблиц Т.е. если в другой хранимке их будет 5 то получится Т1,Т2,Т3 ..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 08:34 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
kharkov_max, Ну можно результат функции возвращать как СписокЗначений, или как оно сейчас в 8-ке называется? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 08:36 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Продолжая тему... А как узнать количесво мной получаемых объектов Recordset ? Нужно для цикла по объектам ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 10:08 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Не уже ли никто не знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 11:32 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
kharkov_max, в АДО вроде нет счетчика рекордсетов, но могу и ошибаться... попробуйте так (правда код семерки): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 11:37 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Пока ПустоеЗначение(ЗаписиSQL)=0 Цикл Сообщить (ЗаписиSQL.Properties.Count); ЗаписиSQL=ЗаписиSQL.NextRecordset(); КонецЦикла; Так не работает, буду искать дальше.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 12:17 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
kharkov_max, счетчиков NextRecordset нет. поэтому нужно оборачивать вызов NextRecordset в "попытка;исключение;КонецПопытки" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 12:25 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Да, и не надо этого - Записи.Close(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 12:31 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Мне цикл нужен Как это дело реализовать ? Может цикл с выходом по ошибке ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 12:38 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Сделал.. вроде работает ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 13:13 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#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. 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. Данная функция использует переменные SQL запроса которые описываются тут: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Возможно кривовато выглядит, но работает. Всем спасибо, думаю тему можно закрывать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 13:31 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Апну тему. В строке поиска в виндах вбейте *ADO*.chm (лениво полный путь приводить) и получите полное руководство по методам и свойствам ADO. Это снимет многие ваши вопросы в дальнейшем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 14:07 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, за то что сюда вклиниваюсь, но у меня проблема с RecordSet. Ситуация такая, надо после получения данных запроса вывести ProgressBar в 1С в последующей работе с результатами запроса, соотвественно, я добавил в запрос select @@ROWCOUNT и на выходе у меня получилось два RecordSet. Проблема в том, что данные из второго мне нужны до начала обработки результатов первого. И вот такая вещь, не срабатывает: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 11:01 |
|
||
|
|

start [/forum/topic.php?fid=28&msg=35878888&tid=1522928]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
190ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 556ms |

| 0 / 0 |
