Delphi вмъква изображение в база данни firebird

имам таблица (служител) с много полета.

име, фамилия, бащино име, изображение и т.н.

Използвам dbExpress (TclientDataset) и имам код в събитието After Post

 clientdataset1.applyupdates(0)

и работи, но искам да вмъкна/актуализирам и изображението, но не го записва в база данни (Fire bird)

търсене на id в google, но не отговаря на това, което искам, моля, помогнете, благодаря


person chaco    schedule 01.09.2014    source източник
comment
Какъв тип поле се опитвате да използвате, когато записвате изображение в база данни. Когато работите с бази данни и записвате всякакви двоични данни (изображения, файлове), най-често използваният тип поле е Blob тип поле.   -  person SilverWarior    schedule 01.09.2014
comment
да, използвам blob fieldtype за изображение   -  person chaco    schedule 02.09.2014


Отговори (1)


По-долу е източникът и DFM на проект, който съставих, за да видя дали ще получа същия проблем като вас. Аз не. Той успешно зарежда и записва .BMP файлове в полето CDS1Image.

Не казахте какъв е вашият тип колона, но в моя FB db колоната 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

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
person MartynA    schedule 01.09.2014
comment
сега работи, благодарение на вашия прав dbimage не обработва JPEG файлове - person chaco; 02.09.2014