首页 > 其他分享 >Firedac 在数据表中插入BLOB数据的方法

Firedac 在数据表中插入BLOB数据的方法

时间:2024-08-18 10:18:17浏览次数:13  
标签:img Firedac Create st 数据表 BLOB il1 qry1

准备在一个比较简单的数据表中插入图片。

该数据表的创建代码如下:

CREATE TABLE "imagelist" (
"id"  INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"name"  ftstring(10) NOT NULL DEFAULT 'image',
"pic"  BLOB
);

我准备把一个TIMAGELIST(命名为il1)中的图片导入数据表中。

首先想到的方法很简单,就是直接通过append数据的方法,代码如下:

复制代码
 1 var i:integer;
 2     img:TBitmap;
 3     imdata:TBlobField;
 4     st:TMemoryStream;
 5     S:string;
 6 begin
//首先清空数据库
7 qry1.ExecSQL('delete from imagelist'); 8 qry1.Open('select * from imagelist'); 9 img:=TBitmap.Create;; 10 imdata:=TBlobField.Create(self); 11 st:=TMemoryStream.Create; 12 for i:=0 to il1.Count-1 do 13 begin 14 img:=TBitmap.Create; 15 il1.GetBitmap(i,img); 16 s:=format('image%.2d',[i+1]); 17 st.Clear; 18 img.SaveToStream(st); 19 st.Position:=0; 20 qry1.Append; 21 qry1.Fields[1].AsString:=s; 22 TBlobField(qry1.Fields[2]).LoadFromStream(st); 23 qry1.Post; 24 end; 25 26 end;
复制代码

但还是觉得这种方法略显繁琐,而且在append和post数据之间如果数据量大,可能会被意外中断导致数据错误,后来想通过直接执行ExecSQL的方法添加,方法二的代码如下:

复制代码
 1   st:=TMemoryStream.Create;
 2   for i:=0 to il1.Count-1 do
 3   begin
 4     img:=TBitmap.Create;
 5     s:=Format('images%d',[i+1]);
 6     il1.GetBitmap(i,img);
 7     st.Clear;
 8     img.SaveToStream(st);
 9     st.Position:=0;
10     qry1.SQL.Text:='insert into imagelist(name,pic) values(:name,:pic)';
11     qry1.Params.ParamByName('name').AsString:=s;
12     qry1.Params.ParamByName('pic').LoadFromStream(st,ftBlob);
13     qry1.ExecSQL;
14   end;
复制代码

最后建了个button,测试了下直接附参数的形式添加文件图片如下:

复制代码
1 procedure Turlf.Button1Click(Sender: TObject);
2 var DT:TParam;
3 begin
4     DT:=TParam.Create(nil);
5     DT.LoadFromFile('F:\Url\images\PIC15.BMP',ftBlob);
6     qry1.ExecSQL('INSERT INTO IMAGELIST(NAME,PIC) VALUES(:NAME,:PIC)',
7                  ['testimage',DT.AsBlob]);
8 end;
复制代码

运行之后数据库如下:

 

 也算是成功的吧。

顺便说一句,刚才的所有的代码中,创建的对象都没有释放,这是个不好的习惯。

 

如果dt定义为TFdParam,在FireDac中是否可以更好一点呢?

 

转载https://www.cnblogs.com/luohq001/p/16835631.html

标签:img,Firedac,Create,st,数据表,BLOB,il1,qry1
From: https://www.cnblogs.com/ynmsnc/p/18365329

相关文章

  • Blob测量(例子)
      通过定位黑色塑料件的中心位置来定位目标,代码流程median_image中值滤波,去除亮点和暗点,让图片模糊化threshold阈值二值化,获取塑料件select_shape去除细小的干扰 dev_close_window()list_files('Pic',['files','follow_links'],ImageFiles)tuple_rege......
  • 斑点寻找工具Blob
    斑点概述斑点分析 探测并且分析图像中的二维形状Blob是先根据用户设定好的灰阶范围对图像进行分割,然后对目标进行查找和分析。斑点报告多种属性:面积质心周长主轴……..应用场景Blob分析非常适合以下场合的应用:对象在尺寸、形状和/或方向上差异很大(训练模型很难或......
  • 【专题】2024无人驾驶网约车乘坐意愿调查报告合集PDF分享(附原数据表)
     原文链接:https://tecdat.cn/?p=37335 科技迅猛发展,无人驾驶技术从科幻走进现实,2024年无人驾驶网约车成热议话题。阅读原文,获取专题报告合集全文,解锁文末208份无人驾驶网约车相关行业研究报告。报告表明,近60%受访者期待,00后更积极,80后较谨慎。性别上男性更乐观,城市级别......
  • 前端二进制文件转blob链接
    背景有的时候后端返回文件,文件是属于stream类型(二进制格式),我们获取到二进制格式的文件后可能是需要下载,也直接在页面上预览等等。代码<template><divclass="app"><iframe:src="iframeSrc"scrolling="auto"style="border:0;height:100vh;wid......
  • MyBatis 根据数据表反向生成 java 实体类等
    MyBatis根据数据表反向生成java实体类等  1、MyBatis根据已有的数据表生成对应的Java实体类的配置文件:mybatisReverseGeneratorConfig.xml此文件放到项目的根目录下 1<?xmlversion="1.0"encoding="UTF-8"?>2<!DOCTYPEgeneratorConfiguration......
  • 创建数据表与认识PDO学习
    pdo\config\database.php<?php/***返回一个数组数据库连接配置*pdo扩展为PHP访问数据库定义了一个轻量级的一致接口*pdophpdataobject为php提供了数据访问抽象层不管使用哪种数据库服务,都可以使用相同的函数(方法)去查询数据**///phpinfo();namespace......
  • 前端使用JS内置Blob实现下载各种形式的文件实例
    在前端开发中,JavaScript的Blob对象允许你创建一个包含原始数据的类文件对象。使用Blob可以轻松实现在客户端生成和下载各种类型的文件,例如文本文件、图片、CSV等。下面是一些使用Blob实现文件下载的示例:1.下载文本文件functiondownloadTextFile(filename,text){c......
  • 【专题】2023年中国数字金融调查报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34685原文出处:拓端数据部落公众号随着数字化转型的深入推进,新客户的增长速度已达顶峰,用户运营成为推动存量增长的关键手段。调查数据显示,相比去年,网上银行用户比例有所下降,而手机银行用户比例基本持平。阅读原文,获取专题报告合集全文,解锁文末249份......
  • 【专题】2024家·生活智能家居趋势报告合集PDF分享(附原数据表)
    原文链接: https://tecdat.cn/?p=37146近二十载间,中国消费市场见证了从产品创新到渠道创新的双重飞跃,无论是耐用消费品还是快速消费品,均在线上线下平台绽放出前所未有的丰富选择,多数行业已转型为以消费者为核心导向的买方市场格局。阅读原文,获取专题报告合集全文,解锁文末218份智......
  • 数据表或视图不存在[错误代码] SQLSTATE[42S02],数据库表不存在
    问题分析:有一些用户在升级的过程中遇到升级中断的问题  导致这个问题的出现有几种可能性:第一种是由于以往升级的过程中数据表丢失,从而影响升级。第二种是人为改动或二开过数据库表,导致升级时数据表和官方不一致,从而影响升级。如:网站搬家处理不当,后台版本与数据库版本不一致。 ......