Ниже приведен текст функции глобального модуля, выполняещей размещение файла в таблице базы данных:
Функция глЗаписатьФайлВБазу (ИмяФайла ) Экспорт Перем Соединение , СтрокаКоннекта , Выборка , ЗапросАДО ; Перем Текст ; Если МонопольныйРежим()=1 Тогда Предупреждение("Невозможно выполнить запрос в монопольном режиме!" ,10 ); //Действия Возврат 0 ; //******** КонецЕсли; Соединение =СоздатьОбъект("ADODB.Connection" ); СтрокаКоннекта ="driver={SQL Server};server=" +глСервер +";uid=sa;pwd=" +глПароль +";Database=" +глБазаДанных ; Попытка Соединение .Open (СтрокаКоннекта ); Исключение Предупреждение("Невозможно установить соединение с базой данных!" ); //Действия Возврат 0 ; //******** КонецПопытки; Выборка =СоздатьОбъект("ADODB.Recordset" ); Выборка =Соединение .Execute ("SELECT MAX(Number) FROM pics" ,,ПараметрыАДО .Получить ("adCmdText" )); Если Выборка .EOF ()=0 Тогда ТекНомерСтроки =Выборка .Fields (0 ).Value ; Если ПустоеЗначение(ТекНомерСтроки )=1 Тогда ТекНомерСтроки =0 ; КонецЕсли; Иначе ТекНомерСтроки =0 ; КонецЕсли; Выборка .Close (); Если ФС.СуществуетФайл (ИмяФайла )=0 Тогда Возврат 0 ; КонецЕсли; Текст =СоздатьОбъект("Текст" ); ВремКаталог =КаталогВременныхФайлов(); ИмяФайлаФормы =КаталогПользователя()+"z.frm" ; ИмяФайлаПустышки =ВремКаталог +"z.txt" ; ИмяФайлаРезультата =КаталогПользователя()+"my.rez" ; ИмяФайлаАрхива =ВремКаталог +"zzz.rar" ; //Пустышка Если ФС.СуществуетФайл (ИмяФайлаПустышки )=1 Тогда Текст .Открыть (ИмяФайлаПустышки ); КонецЕсли; Текст .Очистить (); Текст .Добавитьстроку ("Тест" ); Текст .Записать (ИмяФайлаПустышки ); //Архивирование КомандаСистемы("c:rar.exe a -m5 -md4096 -ep " +ИмяФайлаАрхива +" " +ИмяФайла ); РазмерФайла =0 ; ФС.АтрибутыФайла (ИмяФайлаАрхива ,РазмерФайла ,,,,,); //Форма Если ФС.СуществуетФайл (ИмяФайлаФормы )=1 Тогда Текст .Открыть (ИмяФайлаФормы ); КонецЕсли; Текст .Очистить (); Текст .ДобавитьСтроку ("8.0" ); Текст .ДобавитьСтроку ("2" ); Текст .ДобавитьСтроку ("1 SQLINT 0 4 " "" " 1 Number " "" "" ); Текст .ДобавитьСтроку ("2 SQLIMAGE 0 " +РазмерФайла +" " "" " 2 Picture " "" "" +РазделительСтрок); Текст .Записать (ИмяФайлаФормы ); //Слияние КомандаСистемы("copy /B /Y " +ИмяФайлаПустышки +"+" +ИмяФайлаАрхива +" " +ИмяФайлаРезультата ); ЗапросАДО =СоздатьОбъект("ADODB.Command" ); ЗапросАДО .ActiveConnection =Соединение ; ЗапросАДО .CommandTimeout =60 ; ТекстЗапроса ="BULK INSERT sertificat.dbo.pics FROM '" +ИмяФайлаРезультата +"' WITH(FORMATFILE = '" +ИмяФайлаФормы +"')" ; //Сообщить(ТекстЗапроса); ЗапросАДО .CommandText =ТекстЗапроса ; ЗапросАДО .Execute (); Если ФС.СуществуетФайл (ИмяФайлаФормы )=1 Тогда ФС.УдалитьФайл (ИмяФайлаФормы ); КонецЕсли; Если ФС.СуществуетФайл (ИмяФайлаПустышки )=1 Тогда ФС.УдалитьФайл (ИмяФайлаПустышки ); КонецЕсли; Если ФС.СуществуетФайл (ИмяФайлаАрхива )=1 Тогда ФС.УдалитьФайл (ИмяФайлаАрхива ); КонецЕсли; Если ФС.СуществуетФайл (ИмяФайлаРезультата )=1 Тогда ФС.УдалитьФайл (ИмяФайлаРезультата ); КонецЕсли; Выборка =Соединение .Execute ("SELECT MAX(Number) FROM pics" ,,ПараметрыАДО .Получить ("adCmdText" )); Если Выборка .EOF ()=0 Тогда НовНомерСтроки =Выборка .Fields (0 ).Value ; Иначе НовНомерСтроки =0 ; КонецЕсли; Выборка .Close (); Соединение .Close (); ЗапросАДО ="" ; Выборка ="" ; Соединение ="" ; Если ТекНомерСтроки =НовНомерСтроки Тогда ЗаписьЖурналаРегистрации(ИмяФайла ,"Файлы" ,"Ошибка при помещении файла в базу" ,,5 ); Возврат 0 ; ИначеЕсли ТекНомерСтроки <НовНомерСтроки Тогда ЗаписьЖурналаРегистрации(ИмяФайла +" (заархивирован) " +РазмерФайла +" байт." ,"Файлы" ,"Файл успешно размещен в базе" ,,3 ); Возврат НовНомерСтроки ; КонецЕсли; КонецФункции
//________________________________________________________
ПараметрыАДО =СоздатьОбъект("СписокЗначений" );
ПараметрыАДО .ДобавитьЗначение ("adCmdText" ,1 );
ПараметрыАДО .ДобавитьЗначение ("adCmdTable" ,2 );
ПараметрыАДО .ДобавитьЗначение ("adCmdStoredProc" ,4 );
В случае удачного выполнения операции функция возвращает номер, характеризующий место файла в таблице. При положительном, либо отрицательном результате операции ведется запись в журнал регистрации.
Обратите внимание: в данном примере считается что архиватор «rar.exe » находится на диске «С: »
Вернуться к статье "Организация хранилища файлов внутри базы данных 1C+MS-SQL"
|