
Kuzevich
Восстановление битой базы SQLite3 "database disk image is malformed"
Попалась мне база писем для Outlook, настроенная через MDaemon Outlook Connector.
Проблема была в том что Outlook перестал открываться. Оказалось что данный файл базы поврежден. Сам файл представляет собой хранилище SQLite3
Для того чтобы работать с базой SQLite3 нужно скачать исполняемые файлы, SQLite3-tools отсюда: https://www.SQLite3.org/download.html на момент написания статьи это SQLite3-tools-win32-x86-3420000.zip
При открытии базы средствами SQLite3 и попытке с ней что-то сделать появляется ошибка:
/****** CORRUPTION ERROR *******/
/****** database disk image is malformed ******/
/****** ERROR: near "ORDER": syntax error ******/
/**** ERROR: (11) database disk image is malformed *****/
Есть программы для восстановления, например SQLite Database Recovery, но они платные, а бесплатных аналогов я, к сожалению, не нашел!
Поэтому решил дествовать вручную.
При попытке сделать восстановить через dump, способами описанными здесь https://infostart.ru/1c/articles/402536/ , здесь https://stackoverflow.com/questions/18259692/how-to-recover-a-corrupt-SQLite3-database и здесь https://mobi-c.ru/help/error2.htm появляется та же самая ошибка.
В итоге помогла команда ".recover"
SQLite3.exe LocalCache.db ".recover" >> LocalCache.sql
А затем загрузка полученного дампа в новый файл базы данных
SQLite3.exe LocalCache_new.db < LocalCache.sql
Полученным восстановленным файлом подменяем файл который лежал в папке Outlook'a и все заработало!
Как передать картинку (ХранилищеЗначений) по Com-соединению из одной базы 1С в другую
db = Новый COMобъект("V83.COMConnector"); Попытка соединение= db.Connect(СтрокаПодключения); Исключение сообщить("база не открыта"); Предупреждение(ОписаниеОшибки()); Возврат ложь; КонецПопытки; НоваяНоменклатура=Справочники.Номенклатура.НайтиПоКоду("ВашКод"); GUID = НоваяНоменклатура.УникальныйИдентификатор(); GUIDCom = соединение.NewObject("УникальныйИдентификатор", Строка(GUID)); НоменклатураСсылкаCom = ТекПодключение.Справочники.Номенклатура.ПолучитьСсылку(GUIDCom); НовКартинкаОбъект = Соединение.Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент(); НовКартинкаОбъект.Объект = НоменклатураСсылкаCom; НовКартинкаОбъект.Наименование = НоваяНоменклатура.ОсновноеИзображение.Наименование; НовКартинкаОбъект.ВидДанных = Соединение.Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение; НовКартинкаОбъект.ИмяФайла = НоваяНоменклатура.ОсновноеИзображение.ИмяФайла; Картинка=НоваяНоменклатура.ОсновноеИзображение.Хранилище.Получить(); Двоичные = Картинка.ПолучитьДвоичныеДанные(); ДвоичныеСтрокой = Base64Строка(Двоичные); ДвоичныеCOM = Соединение.Base64Значение(ДвоичныеСтрокой); МояКартинкаCOM = Соединение.NewObject("Картинка",ДвоичныеCOM); НовКартинкаОбъект.Хранилище = Соединение.NewObject("ХранилищеЗначения",МояКартинкаCOM); НовКартинкаОбъект.Записать();
При загрузке файла обмена РИБ, сообщение "не недостаточно памяти"
Старенький слабенький компьютер после перепроведения центральной базы не смог принять файл обмена с сообщением "не недостаточно памяти". После него программа вылетала.
Помогло ограничение на количество объектов в транзакции (я поставил 100)
Открыть firewall для подсетей VK (вконтакте)
Официальный ответ техподдержки:
роботы VK ходят с таким заголовком: Mozilla/5.0 (compatible; VKRobot/1.0)
ip адреса всегда могут измениться, на них лучше не ориентироваться, примерный список можно получить тут:
https://bgp.he.net/search?search%5Bsearch%5D=vkontakte&commit=Search