powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
6 сообщений из 6, страница 1 из 1
Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
    #39547307
Alasska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу помочь!
Задача. Нужно получить данные прямым запросом 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";
...
Рейтинг: 0 / 0
Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
    #39547326
Пришелец-прораб
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй Команда.CommandType = 4; поставить
...
Рейтинг: 0 / 0
Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
    #39547339
Alasska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пришелец-прораб, спасибо за отзыв!

Пробовала 4.
Выходит ошибка: Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][SQL Server Native Client 11.0]Ошибка синтаксиса, отсутствие разрешения или другая неспецифическая ошибка

не знаю, что это значит(
...
Рейтинг: 0 / 0
Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
    #39547345
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alasska,

В начале запроса добавь set nocount on
...
Рейтинг: 0 / 0
Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
    #39547370
Alasska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
court,
УРА! Спасибо большое!!! Отработал. ТЗ получилась.

Только у соединения осталось:
Еще. Соединение.Errors.Item - неверное число параметров
Соединение.Properties.Item - неверное число параметров

И см картинку

Модератор: Тема перенесена из форума "ERP и учетные системы".
...
Рейтинг: 0 / 0
Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
    #39549645
Фотография Владимир Лазурко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первое, что бросилось в глаза - селектах нолок не установлен.
Код: sql
1.
|from dynamic_rekv


а надо
Код: sql
1.
|from dynamic_rekv nolock

Может что изменилось с моего последнего погружения в SQL из 1С.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Прямой запрос sql в 1С. (ADODB.Recordset): Операция не допускается, если объект закрыт.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]