我打算在数据库中保存图像信息,下暂时想到两个方案:1、直接将图像保存到数据库中。这样的好处是可以保证图像与其他信息的完整性。2、将图像放到一定的位置,然后在数据库中放置图像的路径信息。我用Access数据库,请问第一种方法的具体实现??另外比较一下两种方法的好处,到底那个更具有优点?还是另有高招?

解决方案 »

  1.   

    存入(bmp是例子, 随便什么文件都可以)
    imagestream:=tfilestream.create('d:\test.bmp',fmShareDenyNone);
    Sqlclause:='insert into  table values(:aa)';
            tempquery.SQL.Clear;
            tempquery.SQL.Add(SqlClause);
            Tempquery.Parameters.ParamByName('aa').LoadFromStream(imagestream,ftblob);
            tempquery.ExecSQL;取出
    SqlClause:='select * from table';
          tempquery:=tadoquery.Create(application);
          try
            tempquery.SQL.Clear;
            tempquery.SQL.Add(SqlClause);
            tempquery.open;
            while not tempquery.Eof do
            begin          filename:='d:\test1.bmp'
    (tempquery.fieldbyname('image') as TBlobField).savetofile(filename);
              imagestream:=TFileStream.Create(filename,fmShareDenyNone);
    tempquery.Next;
            end;
          finally
            tempquery.Free;
          end;
        end;
      

  2.   

    另一,别人的例子.//Save to database
    Image1.Picture.LoadFromFile('FileName');
    if not (Image1.Picture.Graphic Is TBitmap) then
    begin
      ClipBoard.Assign(Image1.Picture);
      Image1.Picture.Bitmap.Assign(ClipBroad);
      ClipBoard.Clear;
    end;//Change the picture that's not belonged to .bmp to .bmp
        // picture 
    Table1.Edit;
    Table1.FieldByName('Image').Assign(Image1.Picture);
    Table1.Post;
    //get from database
    Image1.Picture.Bitmap.Assign(TPicture(Table1.FieldByName('Image')));
      

  3.   

    还是用这段代码吧,别人的.procedure TDriverInfoForm.BitBtn1Click(Sender: TObject);
    var
            ImageField:TField;
            Picture:TPicture;
            
    begin
      
    if OpenPicDlg.Execute then
    Begin
            with DataSource.DataSet do
            try
              Query.Edit;
              ImageField := FindField('Pic');
              if ImageField <> nil then
              begin
                Picture := TPicture.Create;
                try
                  Query.Edit;
                  Picture.LoadFromFile(OpenPicDlg.FileName);
                  if Picture.Graphic is TBitmap then
                    ImageField.Assign(Picture)
                  else
                  SaveGraphicToBlobField(Picture.Graphic, ImageField);
                finally
                  Picture.Free;
                  end;
              end;
              
            except
            end;
    End;
    end;procedure SaveGraphicToBlobField(AGraphic: TGraphic; AField: TField);
    var
      BlobStream: TStream;
    begin
      if AField is TBlobField then
        with AField as TBlobField do
        begin
          {$IFNDEF DELPHI3}
          BlobStream := TBlobStream.Create(AField as TBlobField, bmWrite);
          {$ELSE}
          BlobStream := DataSet.CreateBlobStream(AField, bmWrite);
          {$ENDIF}
          try
            AGraphic.SaveToStream(BlobStream);
          finally
            BlobStream.Free;
          end;
        end;
    end;
      

  4.   

    用流的人比较多!顺便同事想问一下,怎么能让DBIMAGE读JPG格式图片?