Имя: Пароль:
1C
 
Работа с MSSQL в 1С через ADODB
0 rino
 
30.10.08
17:28
Здравствуйте.
У меня возникла задача, в которой необходимо данные из 1С записать в базу расположенную на MSSQL сервере. При этом сервер мб удаленным и к нему необходимо обращаться по адресу, имени БД, имени пользователя и т.д.
Полазил в интернете, нашел пару кодов работы, но запустив их у себя не получается, так как возникают ошибки.
Конфигурация у меня обычная.

Исходный код
//*******************************************
Процедура Сформировать()
   БД=CreateObject("ADODB.Connection");
   БД.ConnectionString = "Provider=SQLOLEDB;Data Source=QNT3;DatabaseName=domod_test2;Initial Catalog=domod_test2;UID=sa";
   Попытка
   БД.Open();
   Исключение
   Сообщить(ОписаниеОшибки());
   Предупреждение("Не удалось подключиться к IB ...")
   КонецПопытки;
   Запрос=СоздатьОбъект("ADODB.Recordset");
   Запрос.ActiveConnection = БД;
   Запрос.Source = "select * from budget_provod";
   Запрос.Open();
   кол = 0;
   Пока Запрос.Eof()=0 Цикл
   кол = Запрос.Fields("SUMMA").Value;
   //обрабатываем Recordset
   Запрос.MoveNext();
   КонецЦикла;
   Сообщить(кол);
   Запрос.Close();
   БД.Close();
КонецПроцедуры

Результатом работы этого когда является ошибка:

кол = Запрос.Fields("SUMMA").Value;
{C:\DOCUMENTS AND SETTINGS\USER\РАБОЧИЙ СТОЛ\ТЕСТОВАЯ ШТУКА.ERT(17)}: Тип переменой не поддерживается

Вопрос: что я делаю не так? и как правильно? Если есть возможность дать ссылку на нормальный ресурс, где можно изучить информацию по работы с 1С и MSSQL.
1 ДенисЧ
 
30.10.08
17:30
77 через АДО не любит полей типа NUMERIC.
Такие поля нужно CAST'овать к VARCHAR'у.
2 Cap_1977
 
30.10.08
17:30
(0) Число(Запрос.Fields("SUMMA").Value)
3 leshikkam
 
30.10.08
17:30
1) Юзай 1С++ - удобней;
2) Вместо Select * пиши
Select Cast(SUMMA as numeric(20,5)) as Сумма From budget_provod
а при получении:
Запрос.Fields("Сумма").Value
4 physbox
 
30.10.08
17:31
(3) а "as decimal" 1С съедает?
5 leshikkam
 
30.10.08
17:36
(4) 1С++ поддерживает, ADODB.Connection - не знаю.
6 rino
 
30.10.08
18:33
все, спасибо сделал и понял )
а вопрос такой, как нибудь можно записывать данные в таблицу используя конструкцию

Запрос.Fields("SUMMA").Value = кол;

???
Или нужно делать SQL запрос типа INSERT???
7 КонецЦикла
 
30.10.08
18:50
Если изменять что-то - лучше наверное чтобы был порядковый номер (типа identity) для однозначного поиска записи
Тогда можно update делать, ну или удалять-добавлять
8 leshikkam
 
30.10.08
18:54
>Или нужно делать SQL запрос типа INSERT???
нужно делать либо insert либо update
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.