Версия для печати темы (http://pro1c.org.ua/index.php?s=d3b626a6959ffd94e6fd4faaab0a4371&showtopic=50853)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Базы данных _ SQLite чтение BASE64

Автор: ILzuv 06.03.19, 11:47

Доброго времени суток

Во внешний файл SQLite сохраняю строку BASE64. Выполняю запрос в SQLite, COMобъект возвращает значение этого поля,но поле не равно тому что в SQLite хранится. Запись происходит корректная.
Код соединения:

лСоединение = Новый COMОбъект( "ADODB.Connection" );
//лСоединение.
лСоединение.ConnectionTimeout = пТаймаут_Подключения;
лСоединение.CommandTimeout = пТаймаут_Команды;
лСоединение.Open( пСтрока_Подключения );
лКоманда = Новый COMObject( "ADODB.Command" );
лКоманда.ActiveConnection = лСоединение;
лКоманда.CommandText = "PRAGMA journal_mode = WAL";
лКоманда.Execute();
лКоманда.CommandText = "PRAGMA synchronous = 1";
лКоманда.Execute();
лКоманда.CommandText = "PRAGMA page_size = 4096";
лКоманда.Execute();
лКоманда.CommandText = "PRAGMA cache_size = 4000";
лКоманда.Execute();
лКоманда.CommandText = "PRAGMA case_sensitive_like = 1";
лКоманда.Execute();


SQL
Select *
from Table where Table.ID= '" + п_ID + "'


COMобъект.fields в нужном поле содержит не то что по факту в базе SQLite

Автор: Vladal 13.03.19, 14:01

Поле, в котором хранится перекодированная картинка какого типа?
Не наложены ли на него ограничения?

Вот посмотрел
http://pro1c.org.ua/redirect.php?https://stackoverflow.com/questions/7331310/how-to-store-image-as-blob-in-sqlite-how-to-retrieve-it

Может там дело в способе преобразования?
Без помещения кодированной картинки в SQLite, назад из Base-64 картинка преобразовывается без ошибок?

В 1С хранил небольшие картинки прямо в тексте процедур на примере этой темы:
http://pro1c.org.ua/index.php?showtopic=22966

Автор: ILzuv 18.03.19, 10:57

Vladal @ 13.03.19, 14:01 * ,

Я пытаюсь прочитать подпись сформированную КриптоПро менеджером. Менеджер мне возвращает подпись в двоичных данных и после мне их надо передавать в BASE64. Я пробовал записать в виде двоичных в sqlite. Но у 1С не получается передать строку такой длинны и в sqlite у меня в конце строки "...", буквально три точки, обратно я уже ничего прочитать не смогу.

Статьи прочту, найду решение, напишу.

Но мне кажется все дело в COM объекте у 1С. Надеюсь параметр какой COM объекту нужно поменять, что бы заработало. Или он просто не может читать BASE64.

Возможно я как то не правильно пытался записать двоичные данные в sqlite. Просто отправлял переменную содержащую двоичные данные в запрос для sqlite. Может из временного файла текст вытянуть в запрос. Извращаться не пробовал. Может кто пробовал?

Автор: ILzuv 18.03.19, 14:34

ILzuv @ Сегодня, 10:57 * ,

Цитата(Vladal @ 13.03.19, 14:01) *
Без помещения кодированной картинки в SQLite, назад из Base-64 картинка преобразовывается без ошибок?

Двоичные данные пробовал преобразовывать, все в порядке. И в базу записывает что надо, а чтение возвращает бред.

Автор: Vladal 19.03.19, 10:35

Цитата(ILzuv @ 06.03.19, 11:47) *
COMобъект.fields в нужном поле содержит не то что по факту в базе SQLite

http://pro1c.org.ua/redirect.php?https://stackoverflow.com/questions/8499633/how-to-display-base64-images-in-html/8499716
Цитата(ILzuv @ 18.03.19, 10:57) *
Но у 1С не получается передать строку такой длинны и в sqlite у меня в конце строки "...", буквально три точки, обратно я уже ничего прочитать не смогу.

Значит ли это, что ком-объект режет строку?
Можно ли это сделать на стороне SQL-сервера?
Или может другим способом, например, подключиться к серверу по adodb и сделать обычный insert/update с нужными данными?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
http://pro1c.org.ua