//打开图像
procedure TForm1.Button1Click(Sender: TObject);
begin
  opendialog1.execute ;
  Image1.picture.loadfromfile(opendialog1.filename);
end;
//保存图像到oracle数据库
procedure TForm1.Button2Click(Sender: TObject);
var
  picture : TPicture ;
begin
  picture := TPicture.Create ;
  picture.LoadFromFile(opendialog1.filename);
  query1.DatabaseName := Database1.DatabaseName ;
  query1.Close;
  query1.SQL.Clear ;
  query1.SQL.Text := 'insert into TB_CS_PIC(CS_ID,CS_PIC) VALUES (:CS_ID,:CS_PIC)';
  query1.ParamByName('CS_ID').asFloat:= 101 ;
  query1.ParamByName('CS_PIC').asSign(picture);
  try
    query1.ExecSql ;
  except
  end;
  query1.Close;
  query1.Free ;
  picture.Free ;
end;
//从oracle数据库中读取图像
procedure TForm1.ReadClick(Sender: TObject);
var
  uQuery : TQuery ;
begin
  uQuery := TQuery.Create(Application);
  try
    with uQuery do
    begin
      DataBaseName := Database1.DatabaseName ;
      Close ;
      Sql.Clear ;
      Sql.Text := 'SELECT CS_PIC FROM TB_CS_PIC WHERE  CS_ID = 66 ' ;
      try
        Open ;
        Image1.Picture.Bitmap.Assign(TBlobField(FieldByName('CS_PIC'))) ;
      Except
      end;
    end;
  finally
    uQuery.Close;
    uQuery.Free ;
  end;
end;出现的问题是:当图像只有几k是,保存和读取都是正常的,但是如果大一点的话,从oracle数据库中读出来的是图像是一片黑,不知是保存的问题还是读取的问题,请高手指教,不胜感激。。

解决方案 »

  1.   

    关于二进制流的问题是这样产生的:在用户对流进行操作的时候,程序对流的大小有一个限制,如果是Oracle数据库的话,默认的大小是32K,所以你的图像只要大于32K就会截为32k的,所以文件会出错!而这个默认的尺寸是可以改变的,改变的方法就是:
    打开你的DBE Administrator管理器-->Configuration页-->展开Configuration->Drivers-->Native-->Oracle,点到Oracle上,右边会出现一系列的属性,你可以修改Blob Size属性为你需要的大小 ,然后再重新编译你的程序就OK了!