Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 сен 2024, 08:30

1c + ADO + MS SQL

Автор t955938, 23 фев 2012, 16:55

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

t955938

Добрый день, уважаемые Знатоки!
Меня заинтересовала возможность подключения 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

А если так попробовать?
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

Большое спасибо за ответ!!!
Но, к сожалению,  теперь вылезает другая ошибка.

вызове метода контекста (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

А вот так?
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

Я разобрался.  Я, просто не правильно понял описание команды Delete. Мне нужно удалять записи в самой таблицы из внешней базы данных, а этой командой я пытался удалить «строку» из выборки запроса, а этого мне не нужно делать.
Большое спасибо за подробный ответ!!!
Спасибо форуму!!!
Удачи всем!!!!

Теги:

Похожие темы (3)

Рейтинг@Mail.ru

Поиск