Delphi将图像插入数据库firebird

Delphi将图像插入数据库firebird,delphi,delphi-xe2,Delphi,Delphi Xe2,我有很多字段的表(雇员) 名字、姓氏、中间名、图像等 我正在使用dbExpress(TclientDataset)并在发布后的事件中包含代码 clientdataset1.applyupdates(0) 它可以工作,但我也想插入/更新图像,但它不会将图像保存到数据库(Fire bird) id在google中搜索,但它不符合我的要求,请帮助,谢谢下面是我整理的一个项目的来源和DFM,看看我是否遇到了与您相同的问题。 我不。它成功地将.BMP文件加载并保存到CDS1Image字段 你没有说你的

我有很多字段的表(雇员)

名字、姓氏、中间名、图像等

我正在使用dbExpress(TclientDataset)并在发布后的事件中包含代码

 clientdataset1.applyupdates(0)
它可以工作,但我也想插入/更新图像,但它不会将图像保存到数据库(Fire bird)


id在google中搜索,但它不符合我的要求,请帮助,谢谢

下面是我整理的一个项目的来源和DFM,看看我是否遇到了与您相同的问题。 我不。它成功地将.BMP文件加载并保存到CDS1Image字段

你没有说你的列类型是什么,但是在我的FBDB中,Image列被定义为BLOB

顺便说一句,我不确定你想处理什么样的图像,但有一个长期存在的问题是TDBImage不能处理JPEG

procedure TForm2.GetImage;
var
  ImageFN : String;
  MS : TMemoryStream;
begin
  if OpenDialog1.Execute then begin
    ImageFN := OpenDialog1.FileName;
  end;

  MS := TMemoryStream.Create;
  MS.LoadFromFile(ImageFN);
  MS.Seek(0, soBeginning);
  try
    CDS1.Edit;
    CDS1Image.LoadFromStream(MS);
    CDS1.Post;
  finally
   MS.Free;
  end;
end;

procedure TForm2.RefreshCDS;
begin
  CDS1.ApplyUpdates(0);
  CDS1.Close;
  CDS1.Open;
end;

procedure TForm2.CDS1NewRecord(DataSet: TDataSet);
var
  ID : Integer;
begin
  Inc(ID);
  if SqlQuery2.Active then
    SqlQuery2.Close;
  SqlQuery2.Open;
  ID := 1 + SqlQuery2.Fields[0].AsInteger;

  CDS1.FieldByName('ID').AsInteger := ID;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  CDS1.Open;
end;

procedure TForm2.btnGetImageClick(Sender: TObject);
begin
  GetImage;
end;

procedure TForm2.btnRefreshClick(Sender: TObject);
begin
  RefreshCDS;
end;
DFM

对象格式2:TForm2
左=256
Top=95
标题='Form2'
ClientHeight=303
ClientWidth=452
颜色=clBtnFace
Font.Charset=默认字符集
Font.Color=clWindowText
字体高度=-11
Font.Name='Tahoma'
Font.Style=[]
OldCreateOrder=False
OnCreate=FormCreate
PixelsPerInch=96
text高度=13
对象DBGrid1:TDBGrid
左=8
Top=8
宽度=320
高度=120
数据源=数据源1
TabOrder=0
TitleFont.Charset=默认字符集
TitleFont.Color=clWindowText
标题字体高度=-11
TitleFont.Name='Tahoma'
TitleFont.Style=[]
终止
对象DBNavigator1:TDBNavigator
左=24
顶部=144
宽度=240
高度=25
数据源=数据源1
TabOrder=1
终止
对象btnRefresh:TButton
左=350
Top=8
宽度=75
高度=25
标题=‘刷新’
TabOrder=2
OnClick=btnRefreshClick
终止
对象DBImage1:TDBImage
左=128
Top=175
宽度=105
高度=105
数据字段='IMAGE'
数据源=数据源1
TabOrder=3
终止
对象BTN时间:t按钮
左=350
Top=64
宽度=75
高度=25
标题='GetImage'
TabOrder=4
OnClick=btnGetImageClick
终止
对象SQLConnection1:TSQLConnection
DriverName=‘火鸟’
LoginPrompt=False
参数字符串=(
'DriverUnit=Data.DBXFirebird'
'DriverPackageLoader=TDBXDynalinkDriverLoader,DbxCommonDriver180'+
“bpl”
'DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader,Borla'+
'nd.Data.DbxCommonDriver,版本=18.0.0.0,区域性=中性,PublicK'+
'eyToken=91D62EB5B0D1B1B'
'MetaDataPackageLoader=TDBXFirebirdMetaDataCommandFactory,DbxFire'+
“birdDriver180.bpl”
'MetaDataAssemblyLoader=Borland.Data.TDBXFirebirdMetaDataCommandF'+
'actory,Borland.Data.DbxFirebirdDriver,版本=18.0.0.0,区域性=n'+
'eutral,PublicKeyToken=91D62EB5B0D1B1B'
'GetDriverFunc=getSQLDriverINTERBASE'
'LibraryName=dbxfb.dll'
'LibraryNameOsx=libsqlfb.dylib'
'VendorLib=fbclient.dll'
'VendorLibWin64=fbclient.dll'
'VendorLibOsx=/Library/Frameworks/Firebird.framework/Firebird'
'Database=d:\delphi\firebird\databases\employee.fdb'
“User_Name=sysdba”
'密码=主密钥'
'角色=角色名称'
'MaxBlobSize=-1'
“LocaleCode=0000”
“IsolationLevel=ReadCommitted”
“SQLDialogue=3”
“CommitRetain=False”
'WaitOnLocks=True'
“TrimChar=False”
'BlobSize=-1'
'ErrorResourceFile='1!'
'RoleName=RoleName'
'服务器字符集='
“Trim Char=False')
已连接=真
左=40
Top=24
终止
对象SQLQuery1:TSQLQuery
MaxBlobSize=1
参数=
SQLConnection=SQLConnection1
左=112
Top=24
终止
对象数据源1:TDataSource
数据集=CDS1
左=272
Top=88
终止
对象CDS1:TClientDataSet
活动=真
聚合=
CommandText='select*from maimages'
参数=
ProviderName='DataSetProvider1'
AfterOpen=CDS1AfterOpen
OnNewRecord=CDS1NewRecord
左=280
Top=24
对象CDS1ID:TIntegerField
字段名='ID'
必需=真
终止
对象CDS1NAME:TStringField
FieldName='NAME'
尺寸=50
终止
对象CDS1IMAGE:TBlobField
字段名='IMAGE'
尺寸=1
终止
终止
对象DataSetProvider1:TDataSetProvider
数据集=SQLQuery1
选项=[poAllowCommandText,poUseQuoteChar]
左=184
Top=24
终止
对象OpenDialog1:TopEndDialog
过滤器='BMPs |*.Bmp'
左=400
Top=32
终止
对象SQLQuery2:TSQLQuery
活动=真
MaxBlobSize=1
参数=
SQL.Strings=(
'从maimages中选择最大(ID)')
SQLConnection=SQLConnection1
左=16
顶部=120
终止
终止

将图像保存到数据库时,您尝试使用什么字段类型。在使用数据库和保存任何二进制数据(图像、文件)时,最常用的字段类型是Blob字段类型。是的,我对图像使用Blob字段类型现在它可以工作了,这要感谢您的右dbimage不处理JPEG文件
object Form2: TForm2
  Left = 256
  Top = 95
  Caption = 'Form2'
  ClientHeight = 303
  ClientWidth = 452
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object DBGrid1: TDBGrid
    Left = 8
    Top = 8
    Width = 320
    Height = 120
    DataSource = DataSource1
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
  end
  object DBNavigator1: TDBNavigator
    Left = 24
    Top = 144
    Width = 240
    Height = 25
    DataSource = DataSource1
    TabOrder = 1
  end
  object btnRefresh: TButton
    Left = 350
    Top = 8
    Width = 75
    Height = 25
    Caption = 'Refresh'
    TabOrder = 2
    OnClick = btnRefreshClick
  end
  object DBImage1: TDBImage
    Left = 128
    Top = 175
    Width = 105
    Height = 105
    DataField = 'IMAGE'
    DataSource = DataSource1
    TabOrder = 3
  end
  object btnGetImage: TButton
    Left = 350
    Top = 64
    Width = 75
    Height = 25
    Caption = 'GetImage'
    TabOrder = 4
    OnClick = btnGetImageClick
  end
  object SQLConnection1: TSQLConnection
    DriverName = 'Firebird'
    LoginPrompt = False
    Params.Strings = (
      'DriverUnit=Data.DBXFirebird'

        'DriverPackageLoader=TDBXDynalinkDriverLoader,DbxCommonDriver180.' +
        'bpl'

        'DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader,Borla' +
        'nd.Data.DbxCommonDriver,Version=18.0.0.0,Culture=neutral,PublicK' +
        'eyToken=91d62ebb5b0d1b1b'

        'MetaDataPackageLoader=TDBXFirebirdMetaDataCommandFactory,DbxFire' +
        'birdDriver180.bpl'

        'MetaDataAssemblyLoader=Borland.Data.TDBXFirebirdMetaDataCommandF' +
        'actory,Borland.Data.DbxFirebirdDriver,Version=18.0.0.0,Culture=n' +
        'eutral,PublicKeyToken=91d62ebb5b0d1b1b'
      'GetDriverFunc=getSQLDriverINTERBASE'
      'LibraryName=dbxfb.dll'
      'LibraryNameOsx=libsqlfb.dylib'
      'VendorLib=fbclient.dll'
      'VendorLibWin64=fbclient.dll'
      'VendorLibOsx=/Library/Frameworks/Firebird.framework/Firebird'
      'Database=d:\delphi\firebird\databases\employee.fdb'
      'User_Name=sysdba'
      'Password=masterkey'
      'Role=RoleName'
      'MaxBlobSize=-1'
      'LocaleCode=0000'
      'IsolationLevel=ReadCommitted'
      'SQLDialect=3'
      'CommitRetain=False'
      'WaitOnLocks=True'
      'TrimChar=False'
      'BlobSize=-1'
      'ErrorResourceFile='
      'RoleName=RoleName'
      'ServerCharSet='
      'Trim Char=False')
    Connected = True
    Left = 40
    Top = 24
  end
  object SQLQuery1: TSQLQuery
    MaxBlobSize = 1
    Params = <>
    SQLConnection = SQLConnection1
    Left = 112
    Top = 24
  end
  object DataSource1: TDataSource
    DataSet = CDS1
    Left = 272
    Top = 88
  end
  object CDS1: TClientDataSet
    Active = True
    Aggregates = <>
    CommandText = 'select * from maimages'
    Params = <>
    ProviderName = 'DataSetProvider1'
    AfterOpen = CDS1AfterOpen
    OnNewRecord = CDS1NewRecord
    Left = 280
    Top = 24
    object CDS1ID: TIntegerField
      FieldName = 'ID'
      Required = True
    end
    object CDS1NAME: TStringField
      FieldName = 'NAME'
      Size = 50
    end
    object CDS1IMAGE: TBlobField
      FieldName = 'IMAGE'
      Size = 1
    end
  end
  object DataSetProvider1: TDataSetProvider
    DataSet = SQLQuery1
    Options = [poAllowCommandText, poUseQuoteChar]
    Left = 184
    Top = 24
  end
  object OpenDialog1: TOpenDialog
    Filter = 'BMPs|*.Bmp'
    Left = 400
    Top = 32
  end
  object SQLQuery2: TSQLQuery
    Active = True
    MaxBlobSize = 1
    Params = <>
    SQL.Strings = (
      'select max(ID) from maimages')
    SQLConnection = SQLConnection1
    Left = 16
    Top = 120
  end
end