|
Запись во внешний источник данных | ☑ | ||
---|---|---|---|---|
0
just86
18.06.18
✎
16:30
|
Здравствуйте. Подскажите, как можно записать во внешнюю базу на mssql тип данных типа Хранилище значений?
Задача передать историю изменения объекта в одной базе в другую (Версии объектов) |
|||
1
LeoKeyn
18.06.18
✎
16:35
|
(0) Делал вроде что то вроде такой задачи. Записывал подключением к другой sql базе
Попытка Соединение = Новый COMОбъект("ADODB.Connection"); Команда = Новый COMОбъект("ADODB.Command"); Выборка = Новый COMОбъект("ADODB.RecordSet"); Соединение.ConnectionString = "driver={SQL Server};" + "server="+ИмяСервераSQL+";"+ "uid="+ПользовательSQL+";"+ "pwd="+ПарольSQL+";"+ "database="+БазаДанныхSQL+";"; Соединение.ConnectionTimeout = 30; Соединение.CommandTimeout = 600; //Открытие соединение Соединение.Open(); Команда.ActiveConnection = Соединение; Сообщить("Успешно!"); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; |
|||
2
LeoKeyn
18.06.18
✎
16:39
|
(1) Попытка
Соединение = Новый COMОбъект("ADODB.Connection"); Команда = Новый COMОбъект("ADODB.Command"); Выборка = Новый COMОбъект("ADODB.RecordSet"); Соединение.ConnectionString = "driver={SQL Server};" + "server="+ИмяСервераSQL+";"+ "uid="+""+";"+ "pwd="+""+";"+ "database="+БазаДанныхSQL+";"; Соединение.ConnectionTimeout = 30; Соединение.CommandTimeout = 600; //Открытие соединение Соединение.Open(); Команда.ActiveConnection = Соединение; Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; УИД = XMLСтрока(Объект.ДокументСсылка.УникальныйИдентификатор()); Для Каждого Строка ИЗ Объект.Файлы Цикл ДвоичныйДокумент = Новый ДвоичныеДанные(Строка.ПутьКФайлу); ДвоичныйДокумент = Base64Строка(ДвоичныйДокумент); //Хранилище = Новый ХранилищеЗначения(ДвоичныйДокумент); ТекстТекущейИнструкции = "INSERT INTO "+ТаблицаSQL+" |([C_Link], [C_FileName], [C_File], [C_Format]) |VALUES ('"+УИД+"', '"+Строка.ИмяФайла+"', '"+ДвоичныйДокумент+"', '"+Строка.ФорматФайла+"')"; Попытка Соединение.Execute(ТекстТекущейИнструкции,,128); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; вот нашел, я сохранял в другую базу файлы прикрепленные |
|||
3
just86
18.06.18
✎
16:39
|
(1) Ну соединение у меня есть, запись в ту базу тоже есть, там данные отображаются. Вопрос только в типа Хранилище значений.
Делаю так: ЗаписьXML = Новый ЗаписьXML; ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); ЗаписьXML.ОткрытьФайл(ИмяВременногоФайла); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписатьXML(ЗаписьXML, ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(), НазначениеТипаXML.Явное); ЗаписьXML.Закрыть(); ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла); ХранилищеДанных = Новый ХранилищеЗначения(ДвоичныеДанные); УдалитьФайлы(ИмяВременногоФайла); и потом пытаюсь передать Хранилище данных в ту базу. Там хранилище не читается. Получить() возвращает неопределено |
|||
4
LeoKeyn
18.06.18
✎
16:42
|
(3) у меня тоже не получалось вроде и я как строку сохранял Base64Строка
|
|||
5
just86
18.06.18
✎
16:44
|
(4) отлично. спасибо. тоже буду гонять строку
|
|||
6
LeoKeyn
18.06.18
✎
16:47
|
(5) Пожалуйста :-) долго мучался с этим :-) приятно поделиться
Поделюсь, думаю поможет: Получение данных Попытка Соединение = Новый COMОбъект("ADODB.Connection"); Команда = Новый COMОбъект("ADODB.Command"); Выборка = Новый COMОбъект("ADODB.RecordSet"); Соединение.ConnectionString = "driver={SQL Server};" + "server="+ИмяСервераSQL+";"+ "uid="+""+";"+ "pwd="+""+";"+ "database="+БазаДанныхSQL+";"; Соединение.ConnectionTimeout = 30; Соединение.CommandTimeout = 600; //Открытие соединение Соединение.Open(); Команда.ActiveConnection = Соединение; Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Если Объект.ДокументСсылка.Пустая() Тогда ТекстИнструкции = "SELECT | * | FROM [Recourses].[dbo].[RecoursessFiles]" Иначе ТекстИнструкции = "SELECT | * | FROM "+ТаблицаSQL+" | WHERE C_Link='"+XMLСтрока(Объект.ДокументСсылка.УникальныйИдентификатор())+"'"; КонецЕсли; ///////////////////////////////////////// //Читаем записи //Попытка Команда.CommandText = ТекстИнструкции; Выборка = Команда.Execute(); Если Выборка.BOF = Ложь Тогда Выборка.MoveFirst(); Пока Выборка.EOF = Ложь Цикл //Сообщить("[C_DateTime]="+Дата(Выборка.Fields("C_DateTime").Value) // +", [C_Char]="+СокрЛП(Выборка.Fields("C_Char").Value) // +", [C_Numeric]="+Число(Выборка.Fields("C_Numeric").Value)); Строчка = Объект.Файлы.Добавить(); УИДСтрока = Выборка.Fields("C_Link").Value; Строчка.Основание = ПолучитьСсылку(УИДСтрока); Строчка.ИмяФайла = Выборка.Fields("C_FileName").Value; Строчка.ПутьКФайлу = Выборка.Fields("C_File").Value; Строчка.ФорматФайла = Выборка.Fields("C_Format").Value; //Сообщить(Выборка.Fields("C_Link").Value+", "+Выборка.Fields("C_FileName").Value+", "+Выборка.Fields("C_File").Value+", "+Выборка.Fields("C_Format").Value+", "); Выборка.MoveNext(); КонецЦикла; КонецЕсли; И перевод из двоичного вида ТекущаяСтрока = Элементы.Файлы.ТекущиеДанные; Режим = РежимДиалогаВыбораФайла.ВыборКаталога; Диалог = Новый ДиалогВыбораФайла(Режим); Диалог.Заголовок = "Выбор файла для сохранения"; //Диалог.Фильтр = "Файл двоичных данных (*.bin)|*.bin"; Если Не Диалог.Выбрать() Тогда Возврат ; Иначе ИмяФайла= Диалог.Каталог; КонецЕсли; Файл = ТекущаяСтрока.ПутьКФайлу; Файл = Base64Значение(Файл); ПолныйПутьКФайлу = СтрЗаменить(ИмяФайла+"\"+ТекущаяСтрока.ИмяФайла, "\\", "\"); Файл.Записать(ПолныйПутьКФайлу); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |