Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
18 Дек 2017, 19:42
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: 1c + ADO + MS SQL  (Прочитано 12879 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн t955938

  • **
  • Сообщений: 87
  • РЕПУТАЦИЯ: 1
  • КПД: 1%
  • Регистрация: 2011-03-20
  • Сайт: 
  • Профессия: Ученик 1С
1c + ADO + MS SQL
« Первое сообщение: 23 Фев 2012, 16:55 »
Добрый день, уважаемые Знатоки!
Меня заинтересовала возможность подключения 1С к сторонней базе данных посредством ADO.
В частности у меня 1С 8.1 и база MS SQL server 2005.
С получением данных проблем не возникает, да и с редактированием и удалением тоже. Во всех этих случаях я составлял запрос в Connection.Execute.
Но я вычитал в книжке «!С: ПРЕДПРИЯТИЕ 7.7/8.0 системное программирование», что можно удалить текущую запись и оператором Delete.
Подскажите, пожалуйста, что я делаю не правильно. Я думаю, что причина в используемом провайдере.

Текст обработки:
 Connection = Новый COMОбъект("ADODB.Connection");
Connection.ConnectionTimeOut =600;
Connection.CursorLocation = 3;
  Connection.Open("Provider=SQLOLEDB;Password=955938;Data Source=andrey;Persist Security Info=True;User ID=user_1c;Initial Catalog=sait");
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandText ="select * from nomenclature";
Command.CommandType = 1;
RecordSet = Новый ComОбъект("ADODB.RecordSet");
RecordSet.CursorType = 3;
RecordSet.LockType = 2;
RecordSet = Command.Execute();
Пока RecordSet.EOF() = 0 Цикл
RecordSet.Delete(1);
  RecordSet.MoveNext();
КонецЦикла;

Выдается ошибка:
 Ошибка при вызове метода контекста (Delete): Произошла исключительная ситуация (ADODB.Recordset): Current Recordset does not support updating. This may be a limitation of the provider, or of the selected locktype.
RecordSet.Delete();



Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
Re: 1c + ADO + MS SQL
« Ответ #1: 23 Фев 2012, 19:12 »
А если так попробовать?
db = Новый COMОбъект("ADODB.Connection");
rs =  Новый ComОбъект("ADODB.RecordSet");
db.ConnectionString = "Provider=SQLOLEDB;Password=955938;Data Source=andrey;Persist Security Info=True;User ID=user_1c;Initial Catalog=sait";
db.Open();
rs.ActiveConnection = db;
rs.CursorType = 3;
rs.LockType = 2;
rs.Source = "select * from nomenclature";
rs.Open();
Пока rs.Eof()=0 Цикл
     Сообщить(rs.Fields(0).Value);
     rs.Delete(1);
     //обрабатываем Recordset
     rs.MoveNext();
КонецЦикла;
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн t955938

  • **
  • Сообщений: 87
  • РЕПУТАЦИЯ: 1
  • КПД: 1%
  • Регистрация: 2011-03-20
  • Сайт: 
  • Профессия: Ученик 1С
Re: 1c + ADO + MS SQL
« Ответ #2: 23 Фев 2012, 19:37 »
Большое спасибо за ответ!!!
Но, к сожалению,  теперь вылезает другая ошибка.

вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Command text was not set for the command object.
rs.Open();
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Command text was not set for the command object.

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
Re: 1c + ADO + MS SQL
« Ответ #3: 24 Фев 2012, 00:49 »
А вот так?
 
Connection = Новый COMОбъект("ADODB.Connection");
Connection.ConnectionTimeOut =600;
Connection.CursorLocation = 3;
  Connection.Open("Provider=SQLOLEDB;Password=955938;Data Source=andrey;Persist Security Info=True;User ID=user_1c;Initial Catalog=sait");
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandText ="select * from nomenclature";
Command.CommandType = 1;
RecordSet = Новый ComОбъект("ADODB.RecordSet");
RecordSet = Command.Execute();
RecordSet.CursorType = 3;
RecordSet.LockType = 2;
Пока RecordSet.EOF() = 0 Цикл
RecordSet.Delete(1);
  RecordSet.MoveNext();
    КонецЦикла;
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн t955938

  • **
  • Сообщений: 87
  • РЕПУТАЦИЯ: 1
  • КПД: 1%
  • Регистрация: 2011-03-20
  • Сайт: 
  • Профессия: Ученик 1С
Re: 1c + ADO + MS SQL
« Ответ #4: 24 Фев 2012, 09:25 »
Я разобрался.  Я, просто не правильно понял описание команды Delete. Мне нужно удалять записи в самой таблицы из внешней базы данных, а этой командой я пытался удалить «строку» из выборки запроса, а этого мне не нужно делать.
Большое спасибо за подробный ответ!!!
Спасибо форуму!!!
Удачи всем!!!!


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
141 Сообщений
AIFrame
71 Сообщений
ilyay ilyay
65 Сообщений
alex0402
52 Сообщений
andron81_81
44 Сообщений
oleg-x
41 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
BuhRust
31 Сообщений
Golickoff Golickoff
27 Сообщений
alexandr_ll
23 Сообщений

* Кто онлайн

  • Точка Гостей: 346
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal