小弟初次涉及到数据库中的图片操作,用的是MS_SQL Server,在其中建立了Image类型的字段存储图片,界面上用的Express 的TdxDBGraphicEdit ,绑定数据后发现只能打开存储BMP格式的图片文件,其他的它们应该都支持的,那要如何操作呢?请执教!谢谢!

解决方案 »

  1.   

    给你一段代码不过是c++的,应该和pascal差不多自己研究以下了
    void __fastcall TForm2::BitBtn2Click(TObject *Sender)
    {
       OpenPictureDialog1->FileName="";
         if (OpenPictureDialog1->Execute())
            {
               String f=OpenPictureDialog1->FileName;
               if (FileExists(f))
                  {
                     String ext=ExtractFileExt(f).LowerCase();
                     if (ext==".bmp" || ext==".jpg"|| ext==".jpeg")
                         {
                            String jpg=ChangeFileExt(ExtractFileName(f),".jpg");
                            TJPEGImage *j=new TJPEGImage;
                            if (ext==".bmp")
                               {
                                  Graphics::TBitmap *b=new Graphics::TBitmap;
                                  b->LoadFromFile(f);
                                  j->Assign(b);
                                  j->CompressionQuality=90;
                                  j->Compress();
                                  delete b;
                               }
                            else
                               {
                                  TFileStream *fs=new TFileStream(f,fmOpenRead);
                                  j->LoadFromStream(fs);
                                  delete fs;
                               }
                            DataModule3->USRIFTable->Edit();
                        //  DataModule1->ADODataSet1->Edit();
                        //  DBEdit2->Text=jpg;                        TField *zd = DataModule3->USRIFTable->FieldByName("PHOTO");
                        //  TField *zd=DataModule1->ADODataSet1->FieldByName("照片图像");
                            zd->Clear();  // 先清字段
                            TStream *bs=DataModule3->USRIFTable->CreateBlobStream(zd,bmWrite);
                            bs->Position=0;
                            j->SaveToStream(bs);
                            delete j;
                            delete bs;
                            DispJpg();
                         }
                  }
            }
      

  2.   

    procedure Tfrm_customer.btn_imageClick(Sender: TObject);
    var
    strm:Tmemorystream;
    begin
    strm:=tmemorystream.Create;
    if not openpicturedialog1.Execute then exit;
    image1.Picture.Bitmap.LoadFromFile(openpicturedialog1.filename);
    image1.Picture.Bitmap.SaveToStream(strm);//将图像数据写入内存流
    adotable1.Edit;
    (adotable1.FieldByName('cus_image') as TBlobField).loadfromstream(strm);//从内存流中装载图像数据
    //adotable1.FieldValues['cus_imagef']:=extractfilename(openpicturedialog1.filename);
    strm.Free;
    end;在上段代码中,可以装载BMP图像数据,若要装载JPG图像数据,则相应代码为:
    procedure Tfrm_customer.btn_imageClick(Sender: TObject);
    var
    strm:Tmemorystream;
    begin
    strm:=tmemorystream.Create;
    if not openpicturedialog1.Execute then exit;
    TJPEGImage(image1.Picture.Graphic).LoadFromFile(openpicturedialog1.filename); //类型强制转换
    TJPEGImage(image1.Picture.Graphic).SaveToStream(strm);//将图像数据写入内存流
    adotable1.Edit;
    (adotable1.FieldByName('cus_image') as TBlobField).loadfromstream(strm);//从内存流中装载图像数据
    strm.Free;
    end;
      

  3.   

    用TFileStream吧,可以搞定任何文件。//ADOTable
    var
      TmpFileStream : TFileStream;
    begin 
      ...
      open;
      locate...
      edit;
      if FileExists(trim(edtFileName.Text)) then begin
      TmpFileStream := TFileStream.Create(trim(edtFileName.Text), fmOpenRead);
      try
        TBlobField(FieldByName('ImageField')).LoadFromStream(TmpFileStream);              
        Post;
      finally
        TmpFileStream.Free;
      end;
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
       if OpenPictureDialog1.Execute then
       Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
       ADOTable1.Append;
       TBlobField(ADOTable1.FieldByName('FImage')).LoadFromFile(OpenPictureDialog1.FileName);
       ADOTable1.Post;
    end;