Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Сохранение BLOB данных в SQLite с использованием DataSnap REST сервера в приложениях на Firemonkey

Delphi , Базы данных , BLOB поля

Введение

В статье рассматривается процесс сохранения BLOB данных, в частности, логотипа предприятия, в базу данных SQLite через DataSnap REST сервер в контексте использования приложений на Firemonkey. Для работы с данными используется FireDac Memtable, который обеспечивает эффективное управление данными на стороне клиента.

Проблема

При работе с "стандартными" типами данных через FDMemTable и функцию ApplyUpdate все происходит гладко. Однако, при попытке сохранить BLOB данные, например, логотип компании, возникают сложности. В частности, отсутствует возможность использовать функции PARAMS и EXECUTE FDQuery, так как на стороне клиента отсутствует FDQuery, а FDMemtable не имеет функции ExecSQL. Также отмечается, что объект TBlobStream, который мог бы помочь в решении задачи, не реализован на стороне Firemonkey.

Решение

В подтвержденном ответе представлен код, который демонстрирует, как можно отправить BLOB поля на DataSnap REST сервер. На стороне клиента создается TMemoryStream и TBlobField заполняется данными из этого потока. После этого данные в виде TFDJSONDeltas отправляются на сервер.

var
   mes: TMemoryStream;
   FDMemUp: TFDMemTable;
   LDeltaList: TFDJSONDeltas;
begin
   mes:= TMemoryStream.Create;
   FDMemUp:= TFDMemTable.Create(nil);
   FDMemUp.CachedUpdates:= true;
   FDMemUp.FieldDefs.Add('IMAGE', ftBlob);
   FDMemUp.FieldDefs.Add('ID', ftInteger);
   FDMemUp.CreateDataSet;
   // ... (дальше идет заполнение потока данными, которые будут сохранены как BLOB)
   FDMemUp.Append;
   (FDMemUp.FieldByName('ID') as TIntegerField).AsInteger:= 106;
   (FDMemUp.FieldByName('IMAGE') as TBlobField).LoadFromStream(mes);
   FDMemUp.Post;
   // ... (дальше идет отправка данных на сервер)
end;

На стороне сервера данные из BLOB поля считываются обратно в TMemoryStream для дальнейшего использования, например, для вставки в базу данных или создания изображения.

function TDMCore.SendData(const ADeltaList: TFDJSONDeltas): boolean;
var
   LApply: IFDJSONDeltasApplyUpdates;
   mes: TMemoryStream;
begin
   // ... (инициализация и чтение данных)
   mes:= TMemoryStream.Create;
   LApply.Values[0].First;
   while not LApply.Values[0].Eof do
   begin
      mes.Clear;
      (LApply.Values[0].Fields[1] as TBlobField).SaveToStream(mes);
      mes.Position:= 0;
      // ... (дальше идет обработка данных из потока)
      LApply.Values[0].Next;
   end;
   result:= true;
end;

Заключение

Таким образом, для сохранения BLOB данных в базу данных SQLite через DataSnap REST сервер в приложениях на Firemonkey, необходимо использовать TMemoryStream для работы с BLOB данными и функции TFDJSONDeltas для отправки данных на сервер. Сервер, в свою очередь, должен уметь обрабатывать полученные BLOB данные и вставлять их в соответствующие поля базы данных.

В представленных примерах кода показано, как заполнить BLOB поле данными из потока и как извлечь эти данные на стороне сервера для дальнейшей обработки. Это решение позволяет эффективно работать с BLOB данными в контексте использования Firemonkey и DataSnap REST сервера.

Создано по материалам из источника по ссылке.

Процесс сохранения BLOB данных в базу SQLite через DataSnap REST сервер в приложениях на Firemonkey.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: BLOB поля ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 01:31:46/0.0031089782714844/0