|
|
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Делаю вывод что параметры просто не передаются для моего запроса, т.к. таблица есть а данных нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 13:42 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Параметры в запросе вроде указываются как :param, а не как @param. Соответственно, при создании параметра нужно указывать его имя "param". Не знаю, можно ли в MS SQL использовать неименованные параметры, а в Oracle можно указать вместо имени параметра "?" И добавлять параметры в том порядке, как они следуют в запросе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 13:43 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
semyonsПараметры в запросе вроде указываются как :param, а не как @param. Соответственно, при создании параметра нужно указывать его имя "param". Не знаю, можно ли в MS SQL использовать неименованные параметры, а в Oracle можно указать вместо имени параметра "?" И добавлять параметры в том порядке, как они следуют в запросе Похоже действительно запрос должен выглядеть вот так: select Поставщик, ИмяПоставщика, КодМаг, ДатаПриход, НомНакл, ДатаНакл from ankStr..Приходы where Линия = :n and ДатаПриход between :ДатаПриходаС and :ДатаПриходаПо Т.е. параметры должны идти не через @ а через : После выполнения запроса в таком виде, начало ругаться на неизвестный параметр. Вот как теперь мои параметры туда передать ..... Народ помогите пожалуйста, вижу что осталось чуть чуть до решения. Вот вся функция: Функция ЗапросSQL (SQLServer,Login,Password,ТекстSQL) //Функция выборки данных из SQL сервера и передача во временную таблицу 1С СтрокаСоединения = ("Provider=SQLOLEDB;Driver={SQL Server}; Deleted=No; Data Source = ") + SQLServer + (";UID=") + Login + ("; PWD=") + Password + (";"); Подключение = Новый ComObject("ADODB.Connection"); Подключение.ConnectionString=СтрокаСоединения; Попытка Подключение.Open(СтрокаСоединения); Состояние ("Подключение к серверу SQL..."); Исключение Сообщить(ОписаниеОшибки()); Возврат Ложь; КонецПопытки; СоединениеSQL = Новый COMObject("ADODB.Command"); СоединениеSQL.ActiveConnection = Подключение; СоединениеSQL.NamedParameters = Истина; СоединениеSQL.CommandText = ТекстSQL; СоединениеSQL.CommandType = 1; //СоединениеSQL.Prepared = Истина; Param1 = СоединениеSQL.CreateParameter("n",3,1,1,1); СоединениеSQL.Parameters.Append(Param1); Param2 = СоединениеSQL.CreateParameter("ДатаПриходаС",200,1,8,Формат(НачалоПериода,"ДФ=ггггММдд"));//Формат(НачалоПериода,"ДФ=ггггММдд")); СоединениеSQL.Parameters.Append(Param2); Param3 = СоединениеSQL.CreateParameter("ДатаПриходаПо",200,1,8,Формат(КонецПериода,"ДФ=ггггММдд")); СоединениеSQL.Parameters.Append(Param3); //Сообщить (Param3.Value); Состояние ("Выполнение запроса SQL..."); ЗаписиSQL = Новый ComObject("ADODB.RecordSet"); ЗаписиSQL = СоединениеSQL.Execute(); Таблица = Новый ТаблицаЗначений; Состояние ("Заполнение временной таблицы..."); Для НомерСтолбца = 0 По ЗаписиSQL.Fields.Count-1 Цикл //Создание и добавление колонок во временную таблицу ИмяСтолбца =ЗаписиSQL.Fields.Item(НомерСтолбца).Name; Таблица.Колонки.Добавить(ИмяСтолбца); Сообщить(ИмяСтолбца); КонецЦикла; Сообщить (ЗаписиSQL.EOF); Пока ЗаписиSQL.EOF = 0 Цикл // Заполнение созданной таблицы НоваяСтрока = Таблица.Добавить(); Для НомерСтолбца = 0 По ЗаписиSQL.Fields.Count-1 Цикл НоваяСтрока.Установить(НомерСтолбца,ЗаписиSQL.Fields(НомерСтолбца).Value); Сообщить ("Test " + ЗаписиSQL.Fields(ИмяСтолбца).Value + ИмяСтолбца); КонецЦикла; ЗаписиSQL.MoveNext(); КонецЦикла; Состояние ("Закрываем соединение с SQL..."); ЗаписиSQL.Close(); Подключение.Close(); Возврат Таблица; // Возврат таблицы значений запроса SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 14:13 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
СоединениеSQL.Parameters.Count говорит что параметров 0. ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 14:20 |
|
||
|
Выпольнить запрос 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. Оригинальный текст моей программы VBA Accces: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 15:04 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Блин, не досмотрел - чего это у вас у типа int длина 1? Param1 = СоединениеSQL.CreateParameter("@n",3,1, 4 ,1); СоединениеSQL.Parameters.Append(Param1); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 15:12 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
VladimirKrУфф... Вот так должно получиться - я проверял: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Оригинальный текст моей программы VBA Accces: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Да действительно работает ... Уважаемый подскажите пожалуйста почему Вы ТекстЗапроса="select Поставщик, ИмяПоставщика, КодМаг, ДатаПриход, НомНакл, ДатаНакл from ankStr..Приходы where Линия = @n and ДатаПриход between @ДатаПриходаС and @ДатаПриходаПо" ПараметыЗапроса="@n int,@ДатаПриходаС datetime,@ДатаПриходаПо datetime" ParamSqlText=СоединениеSQL.CreateParameter(,130,1,5000,ТекстЗапроса) СоединениеSQL.Parameters.Append(ParamSqlText); ParamParamText=СоединениеSQL.CreateParameter(,130,1,5000,ПараметыЗапроса) СоединениеSQL.Parameters.Append(ParamParamText); Добавили в параметры. Я пол инета перерыл нигде такого не встречал, и в описании нигде нет, если у Вас есть инфа по этому поводу поделитесь пожалуйста. За запрос огромное спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 15:25 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Дык он использует выполнение хранимой процедуры sp_executesql, в параметры которой передаются текст запроса, список параметров и параметры. Эта хранимка возвращает набор записей. Кстати, не пробывали в CommandType передавать 2 вместо 1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 15:35 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Потому что исследование профайлером показало, что выполнить запрос напрямую с передачей параметров через ADO не получается. Но есть хранимая процедура sp_executesql (См. БОЛ на соседнем форуме). Эта хранимая процедура выполняет tsql текст с параметрами, имея первым параметром строку с tsql текстом, вторым параметром - строку описания параметров, используемых в тексте, и далее параметры для строки sql-текста. Этакий аналог временной хранимой процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 15:36 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Народ огромное спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 15:38 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
semyons... Кстати, не пробывали в CommandType передавать 2 вместо 1? Не прокатит. 2 - Это же чтение таблицы напрямую (ADО просто подставит select * from ) к началу текста запроса и попробует выполнить - ну и получит ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2009, 15:41 |
|
||
|
Выпольнить запрос 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 11:08 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
На нижнюю часть сообщения не обращайте внимание, случайно попало ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 11:09 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
kharkov_max, Если я правильно понял вы пытаетесь выполнить несколько команд tsql на одном вызове Execute(). АДО так не работает. Одна команда tsql - один execute. в вашем случае Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 11:24 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
И вообще похоже что вам лучше обернуть все в хранимку, возващающей рекордсет. Тогда ваш первоначальный запрос сведется к "exec MyProc1 @in, @ДатаПриходаС, @ДатаПриходаПо"; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 11:27 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
1. Т.е. в параметрах СоединениеSQL.Execute (""), мне нужно указать Код SQL моего запроса ? Я вас правильно понял ? 2. А если у меня запросы связаны. Т.е. Результат 2го это данные 1го, а результат 3го это результат 2го. Я сделаю так СоединениеSQL.Execute(1й, запрос) СоединениеSQL.Execute(2й, запрос) СоединениеSQL.Execute(3й, запрос) у меня будет результат 3го запроса ? 3. Если до select у меня есть код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Мой запрос отработает ? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 11:32 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Мда.. Я не разобравшись в предыдущем сообщении написал чушь... Не могда бы мне кинуть кусок кода, как можно использовать хранимую процедуру ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 12:14 |
|
||
|
Выпольнить запрос 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. Но наткнулся на след проблему. Результат хранимой процедуры есть 2 таблицы. На данный момент я вычитываю столбцы первой, но не могу прочитать данные Т.е. Код: plaintext 1. Не отрабатывает. Подскажите пожалуйста как правильно обращаться к результату запроса если запрос выдает несколько таблиц ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 13:47 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Народ ну помогите кто нить. Убрал из хранимой процедуры 2ю таблицу. На выходе есть колонки но нет данных Recordset. В SQL хранимка трабатывает с данными. Где то я с RecordSet не докрутил.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 15:05 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
kharkov_max, Давайте так (если я ошибаюсь - поправьте). Вам надо в 1С получить некий набор данных, который суть импорт данных из другой системы. При этом набор данных полчуается не "прямой выборкой", а результат некоей обработки "первичных" данных по некоему алгоритму, который от структуры и значений данных, хранящихся в 1С, не зависят. Собственно вам тогда лучше сделать процедуру непосредственно на сервере (содержащую те самые create table, insert...into и результирующий select), которая подготавливает полностью данные в том виде, который требуется вам получить в 1С. Из 1Са вам достаточно будет вызвать эту процедуру с необходимымми параметрами. Весь код процедуры будет "внутри" сервера, и в 1С вам не надо будет заморачиваться с вызовом каждой команды через АДО. И код этой процедуры нет необходимости писать в 1С - для этого есть более эффективные инструменты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 15:37 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Я уже так и сделал. Подключил свою обработку к хранимой процедуре на сервере. Т.е. кода SQL уже в 1С нет. Смог подключится к серверу из хранимки мне сейчас в 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. Подскажите что я делаю не верно. Как я понимаю нужно делать так (при использовании хранимых процедур): 1. Создать соединение ComObject("ADODB.Connection") 2. Создать COMObject("ADODB.Command") и добавить мои переменные .Parameters.Append(СоединениеSQL.CreateParameter 3. Потом ComObject("ADODB.RecordSet") и в цикле выбирать данные из Recordset. Вот вроде все сделал, но не работает, где то ошибся ... ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 16:05 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Этому не пугайтесь: Код: plaintext 1. 2. 3. 4. 5. 6. Это значения переменных которые необходимы SQL запросу и которые выбираются из массива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 16:07 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Плюс паралельный вопрос. Если хранимая процедура делает выборку 2х таблиц, как правильно через ADO, к ним обращаться и выбирать данные. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 16:10 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
Скорее всего нет данных потому, что имя процедуры я передаю и запускаю верно, а параметры передаю не верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 16:16 |
|
||
|
Выпольнить запрос SQL из 1С
|
|||
|---|---|---|---|
|
#18+
kharkov_max, Для нескольких рекордсетов вам уже ответили. С хранимкой надобность в выполнении именно параметризированого запроса отпадает, так как параметры можно указать прямо в тескте запроса, выигрыша от использования sp_executesql уже не будет. Дабы не молоть чепуху, покажите код вашей процедуры, или хотя бы заголовок с парметрами (от "create procedure" до "as") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 16:42 |
|
||
|
|

start [/forum/topic.php?fid=28&msg=35876604&tid=1522928]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
179ms |
get topic data: |
10ms |
get forum data: |
4ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 516ms |

| 0 / 0 |
