SQL数据库中的'照片'字段的数据类型为image长度为16。
利用下面的语句插入照片:
if OpenPictureDialog1.Execute then
dbimage1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
利用dbimage2来显示,但是显示时出错!请问为什么?如何做才能显示数据库中的照片?

解决方案 »

  1.   

    先uses jpeg;
    然后:
    存到数据库
    var
    pjpg:tjpegimage;
    pic:TMemoryStream;
    begin
    pjpg:=tjpegimage.Create;
    pjpg.LoadFromFile(F:\JPG.jpg);
    pic:=TMemoryStream.Create;
    pjpg.SaveToStream(pic);
    pic.Position:=0;
    TBlobField(dataset.FieldByName('Img')).LoadFromStream(pic);
    dataset.post;
    pic.Free;
    pjpg.free;
    end;
    从数据库取出
    var
    pjpg:tjpegimage;
    pic:TMemoryStream;
    begin
    pjpg:=tjpegimage.Create;
    pic:=TMemoryStream.Create;
    TBlobField(dataset.FieldByName('Img')).savetoStream(pic);
    pic.positon:=0;
    pjpg.LoadFromStream(pic);
    image.graphi.bmp.assign(pjpeg);
    end;
      

  2.   

    var
        MS_JpegStream:TMemoryStream;
        M_BitMap:TBitMap;
        M_Jpeg:TJpegImage;
    procedure TinsertForm.buttonSelectClick(Sender: TObject);
    var
    filename:string;
    begin
    image1.Picture.LoadFromFile('');
    if OpenDialog1.Execute then
    begin        filename:=extractfileext(OpenDialog1.FileName);        image1.Picture.LoadFromFile(OpenDialog1.FileName);        
            MS_JpegStream:=TMemoryStream.Create;
            M_BitMap:=TBitMap.Create;
            M_Jpeg:=TJpegImage.Create;
        if (filename='.bmp') or (filename='.BMP') then
          begin
            M_BitMap.LoadFromFile(OpenDialog1.FileName);
            M_Jpeg.Compress;
            M_Jpeg.Assign(M_BitMap);
          end
        else if (filename='.jpg') or (filename='.JPG') then
          begin
            M_Jpeg.LoadFromFile(OpenDialog1.FileName);
          end;
        M_Jpeg.SaveToStream(MS_JpegStream);
    end;
    end;procedure TinsertForm.btnSaveClick(Sender: TObject);
    begin
    //插入新的记录
    try
    adoquery1.close;
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('insert into hm_jc_dxal(tupian)values');
    adoquery1.SQL.Add('(:tupian)');
    adoquery1.Parameters.ParamByName('tupian').LoadFromStream(MS_JpegStream,ftblob);
    adoquery1.ExecSQL;ShowMessage('资料成功保存!');
    MS_JpegStream.Free;
    M_BitMap.Free;
    M_Jpeg.Free;
    except
    ShowMessage('资料保存失败!!');
    end;
    end;
    end;
      

  3.   

    var 
      MyJPEG : TJPEGImage;
      MS: TMemoryStream;
    begin
      openpicturedialog1.Execute;
      if openpicturedialog1.FileName<>'' then
      begin
        image.Picture.LoadFromFile(openpicturedialog1.FileName);
        openpicturedialog1.FileName:='';
        MyJPEG := TJPEGImage.Create;
        try
          with MyJPEG do
          begin
            Assign(Image.Picture.Graphic);
            MS:=TMemoryStream.create;
            SaveToStream(MS);
            MS.Position:=0;
            adotable1.Append;
            TBlobField(adotable1.FieldbyName('photo')).LoadFromStream(MS);
            adotable1.Post;
            messagebox(getactivewindow(),'图像保存完毕!','保存',mb_ok);
            image.Picture.CleanupInstance;
          end;
        finally
          MyJPEG.Free;
        end;
      end;
    显示图片
    var
      tempstream:TStringStream;
      tempjpeg:TJPEGImage;
    begin
      try
        tempstream:=TStringStream.Create(' ');
        TBlobField(adodataset1.FieldByName('photo')).SaveToStream(tempstream);
        tempstream.Position:=0;
        tempjpeg:=TJPEGImage.Create;
        tempjpeg.LoadFromStream(tempstream);
        DBImage1.Picture.Bitmap.Assign(tempjpeg);
      finally
        tempstream.Free;
        tempjpeg.Free;
      end;
    end;