|
Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
|
|||
---|---|---|---|
#18+
Прошу помочь! Задача. Нужно получить данные прямым запросом SQL и далее загрузить в 1С. Пока только хочу получить ТЗ. Опыта мало, прошу помочь! С SQL не работала. Подключение к SQL-серверу проходит успешно. Процедура срабатывает корректно на простоv запросе "SELECT * FROM objects". С переменными не проходит. Выходит ошибка: Произошла исключительная ситуация (ADODB.Recordset): Операция не допускается, если объект закрыт. Прошерстила интернет. Говорят надо через Parameters. Но в моем случае ничего передавать не надо. Еще. Соединение.Errors.Item - неверное число параметров Соединение.Properties.Item - неверное число параметров Подскажите, что я не так делаю? Процедура. //////////////////////////////////////////////////////////////////////////////////////////// //Подключение к SQL-серверу Попытка Соединение = Новый COMОбъект("ADODB.Connection"); Команда = Новый COMОбъект("ADODB.Command"); Выборка = Новый COMОбъект("ADODB.RecordSet"); Соединение.ConnectionString = "driver={****};" + "server="+ИмяСервераSQL+";"+ "uid="+ПользовательSQL+";"+ "pwd="+ПарольSQL+";"+ "database="+БазаДанныхSQL+";"; Соединение.ConnectionTimeout = 30; Соединение.CommandTimeout = 600; //Открытие соединения Соединение.Open(); Команда.ActiveConnection = Соединение; Команда.CommandType = 1; Сообщить("Успешное подключение!"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Команда.CommandText = ТекстЗапроса; Команда.CommandType = 1; Выборка = Команда.Execute(); ТаблицаРезультат = новый ТаблицаЗначений; // создаем поля таблицы Для НомерСтолбца = 0 По Выборка.Fields.Count-1 Цикл ИмяНовойКолонки = Выборка.Fields(НомерСтолбца).Name; ТаблицаРезультат.Колонки.Добавить(ИмяНовойКолонки);//, Новый ОписаниеТипов("Строка")); Сообщить(ИмяНовойКолонки); КонецЦикла; // идем в начало списка Если Не Выборка.Eof Тогда Выборка.MoveFirst(); КонецЕсли; // для каждой полученной записи Пока Не Выборка.eof Цикл НоваяСтрока = ТаблицаРезультат.Добавить(); // заполняем строку Для каждого Колонка из ТаблицаРезультат.Колонки Цикл ИмяКолонки = Колонка.Имя; Значение = Выборка.Fields.Item(ИмяКолонки).Value; Если Значение <> Null Тогда НоваяСтрока[ИмяКолонки] = Значение; КонецЕсли; КонецЦикла; // переходим к сл. строке Выборка.MoveNext(); КонецЦикла; //Закрытия соединения Попытка Соединение.Close(); Сообщить("Соединение закрыто!"); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; ///////////////////////////////////////////////////////////////////////////////////////// Запрос рабочий, точно. ТекстЗапроса = "declare @qd datetime |set @qd = (SELECT DATEADD(d, DATEDIFF(d, 0, GETDATE()), 0)) | //|--ObjType объектов |declare @objtype_pers int |set @objtype_pers = (select id from AppObjTypes where objname='REC_PERSONAL') | //|--RekvID используемых реквизитов |declare @RekvID_TN int |set @RekvID_TN = (select id from rekvs where rekvs.ObjTypeID = @objtype_pers and rekvs.RekvName = 'TABN') | //|--Таблицы с датами --Табельный номер |DECLARE @tn TABLE (DB datetime,id_obj int) | |INSERT INTO @tn (DB, id_obj) |select MAX(date_begin), object_id |from dynamic_rekv |where date_begin <= @qd and ID_AppObjRekv=@RekvID_TN |group by object_id | |select o.id,tn.charval as tabn |from objects o |left join dynamic_rekv tn on tn.object_id = o.id and tn.date_begin in (SELECT db from @tn where id_obj = tn.object_id) and tn.ID_AppObjRekv=@RekvID_TN |where o.id_type_object=@objtype_pers"; ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 12:18 |
|
Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
|
|||
---|---|---|---|
#18+
попробуй Команда.CommandType = 4; поставить ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 12:38 |
|
Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
|
|||
---|---|---|---|
#18+
Пришелец-прораб, спасибо за отзыв! Пробовала 4. Выходит ошибка: Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][SQL Server Native Client 11.0]Ошибка синтаксиса, отсутствие разрешения или другая неспецифическая ошибка не знаю, что это значит( ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 12:45 |
|
Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
|
|||
---|---|---|---|
#18+
Alasska, В начале запроса добавь set nocount on ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 12:54 |
|
Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
|
|||
---|---|---|---|
#18+
court, УРА! Спасибо большое!!! Отработал. ТЗ получилась. Только у соединения осталось: Еще. Соединение.Errors.Item - неверное число параметров Соединение.Properties.Item - неверное число параметров И см картинку Модератор: Тема перенесена из форума "ERP и учетные системы". ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2017, 13:10 |
|
Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
|
|||
---|---|---|---|
#18+
Первое, что бросилось в глаза - селектах нолок не установлен. Код: sql 1.
а надо Код: sql 1.
Может что изменилось с моего последнего погружения в SQL из 1С. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2017, 15:26 |
|
|
start [/forum/topic.php?fid=28&fpage=10&tid=1518450]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 248ms |
total: | 396ms |
0 / 0 |