【问题标题】:Insert image into SQL Server 2000 table将图像插入 SQL Server 2000 表
【发布时间】:2017-12-02 20:44:34
【问题描述】:

如何将图像插入 SQL Server 2000 表并查看该图像
在 delphi 中使用 TDBImage 控件或使用 Fast-Report 打印它?
以下解决方案仅适用于 SQL Server 2005+

SELECT * FROM OPENROWSET(BULK N'C:\TestImage.jpg', SINGLE_BLOB)

【问题讨论】:

  • 您使用哪些客户端组件?
  • @Victoria FireDAC
  • 毫不奇怪,SQL 2000 是古老的历史,4 年前就已正式停止支持。微软甚至拒绝为其发布安全补丁。甚至 SQL 2005 支持也在去年结束。无论如何,SQL Server 服务是否使用对 C:\ root 具有写入权限的 Windows 帐户?
  • @JerryDodge 你是对的,问题是客户仍在使用旧的会计系统,不幸的是它只需要 SQL 2000。是的,SQL Server 服务使用的是 Windows 帐户。
  • 当然它使用的是Windows帐户,我的问题是这个帐户是否有写入文件所在的目录?

标签: sql-server delphi sql-server-2000 firedac fastreport


【解决方案1】:

如何将图片插入数据库?

有一个IMAGE 类型字段(应该在 SQL Server 2000 中可用):

CREATE TABLE MyTable (
   ID INT PRIMARY KEY,
   Picture IMAGE
)

并在其中插入图像:

FDQuery1.SQL.Text := 'INSERT INTO MyTable (ID, Picture) VALUES (:ID, :Picture)';
FDQuery1.ParamByName('ID').AsInteger := 1;
FDQuery1.ParamByName('Picture').AsStream := TFileStream.Create('C:\Image.jpg', fmOpenRead);
FDQuery1.ExecSQL;

上面创建的流将在查询未准备后或下一次赋值后释放。

如何在 TDBImage 控件中显示图像?

例如,使用TDataSourceTFDQueryTDBImage 控件放在您的表单上。现在连接这些组件并为图像设置源字段:

DataSource1.DataSet := FDQuery1;
DBImage1.DataSource := DataSource1;
DBImage1.DataField := 'Picture';

并查询数据,例如:

FDQuery1.SQL.Text := 'SELECT Picture FROM MyTable WHERE ID = :ID';
FDQuery1.ParamByName('ID').AsInteger := 1;
FDQuery1.Open;

【讨论】:

  • 谢谢,但是插入语句应该来自sql本身而不是来自Delphi,有可能吗?
  • 不客气!我有点迷茫,为什么这个问题被标记为 Delphi 和 FireDAC,但是,试试this script。你可以基于它写一个存储过程。
【解决方案2】:

使用 TADOQuery 将图像插入表中;

Create Table new_table(
var1...,
var2...,
.,
.,
.,
image1 as type image ,
)

将以下内容添加到您的用户界面: Jpeg(有时默认不添加)

将以下对象添加到您的项目中:

  • TOpenPictureDialog (oppCompanyLogo)
  • TImage (imgCompanyLogo)
  • TButton

按钮的事件如下:

if oppCompanyLogo.Execute then
begin
  imgCompanyLogo.Picture.LoadFromFile(oppCompanyLogo.FileName);
end;
  • 图像现在分配给TIamge (imgCompanyLogo) 对象;
  • 添加

    var JPG : TJPEGImage`
    JPG := TJPEGImage.Create;
    JPG.Assign(imgCompanyLogo.Picture);
    
  • 图像现在分配给 Jpeg 图像 JPG,

现在我们将使用TADOQuery 简单地将图像添加到表格中:

  • 假设 - 您已经创建了与数据库的连接(要设置此连接,请创建新帖子)

    with TADOQuery_name do
      begin
         Close;
         Tablename := tablename1;
         Open;
         Insert;
         FieldByName('Var1')...;
         FieldByName('Var2')...;
         .
         .
         .
         FieldByName('Image1').Assign(JPG);
         Post;
         Close;
       End;
    

简单...

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 2019-02-22
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2010-11-15
    • 2013-01-15
    • 2020-10-09
    相关资源
    最近更新 更多