我已成功以数据流村图片入数据库,却没有办法将它完整的取出来,仍用数据流么?怎么写呢?真心请教各位!在线等

解决方案 »

  1.   

    你既然已经成功保存了,自然用相反的方式也就能读出来,不过,你用BDE吗?在BDE的设置里面:BlobSize,BlobSize需要设置大一些,否则,所取得的图片等大容量类型数据就会被截断,你的dbimage业就黑了一块了。
      

  2.   

    我用sql server数据库,已把text in row设成off,存取应该都没问题,只是存图片的函数是assign可他的相反函数是什么?我试了很多种方法都不行,清指点迷路的人
      

  3.   

    我用SQL保存过图象文件,可以保存超过32K的文件 
    你的问题很可能和你的数据库缓存设置有关 
      

  4.   

    procedure SavePicture(img:TImage); 
      var 
        JPGImg: TJPEGImage; 
        ADOData: TADOBlobStream; 
    begin 
          JPGImg := TJPEGImage.Create; 
          ADOData := 
    TADOBlobStream.Create(TBlobField(DataModule1.PatientInfoTable.FieldByName('图像1')), bmWrite); 
          try 
            JPGImg.Assign(img.Picture.Bitmap); 
            JpgImg.SaveToStream(ADOData); 
          finally 
            JPgImg.Free; 
            ADOData.Free; 
          end; 
    end; 读取代码如下: 
    procedure LoadPicture(img: TImage); 
      var 
        PicFieldName: string; 
        PicData: TADOBlobStream; 
        Pic: TJPEGImage; 
      begin 
        case img.Tag of 
          0: PicFieldName := '图像1'; 
          1: PicFieldName := '图像2'; 
          2: PicFieldName := '图像3'; 
          3: PicFieldName := '图像4'; 
        end; 
        if not DataModule1.PatientInfoTable.FieldByName(PicFieldName).isNUll then 
        begin 
          PicData := 
            TADOBlobStream.Create(TBlobField(DataModule1.PatientInfoTable.FieldByName(PicFieldName)), bmRead); 
         //重点在下面 
          pic := TJPEGImage.Create; 
          try 
            pic.LoadFromStream(PicData); 
            img.Picture.Assign(pic); 
          finally 
            PicData.Free; 
            pic.Free; 
          end; 
        end 
        else 
          img.Picture.Assign (nil); 
      end; 
      

  5.   

    我用如下的代码从一表中取出image字段并存入另一表中相同字段,尽管已有显示结果,可黑块仍未去掉
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Stream1, Stream2 : TBlobStream;
      i:integer;
    begin
       i:=1;
       query1.Close;
       query1.SQL.Clear;
       query1.SQL.Add('select * from dbo.chartinter');
       query1.Open;
       query1.First;
       while not query1.Eof do
       begin
       Stream1:= TBlobStream.Create(tblobfield(query1.fieldbyname('solpicture')), bmRead);
        table2.Open;
        Table2.insert;
        table2.FieldByName('ikey').asstring:=inttostr(i);
      try
         image1.Picture.Bitmap.LoadFromStream(stream1);//此处我用来显示一下从table1中取出的图片,结果还有一块是黑的
         showmessage('1');
        Stream2 := tblobstream.Create(tblobfield(Table2.FieldByName('solpicture')), bmReadWrite);
        try
          Stream2.CopyFrom(Stream1, Stream1.Size);
        finally
          Stream2.Free;
        end;
      finally
        Stream1.Free;
      end;
      Table2.Post;
      table2.Close;
      i:=i+1;
      query1.Next;
      end;
      table2.Active:=true;
    end;
    数据库缓存设置是否可以自己设置他的大小,怎么设置呢?
      

  6.   

    我解决了,确是bde的设置,谢谢朋友的帮忙,出门靠朋友说的真对,谢谢大花脸,谢谢海浪,谢谢彩儿