大家好~~我在搜索中也找到很多相关的提目﹐出现率很高的是这个代码
var
  Ms:TmemoryStream;
  jpg:Tjpegimage;begin
  ms:=TmemoryStream.Create;
  Jpg.Assign(Image1.Picture.Graphic);
  Jpg.SaveToStream(Ms) ;
  Ms.Position :=0;
  ado.append;
  TBlobField(producttable.FieldByName('img')).LoadFromStream(Ms);
  producttable.Post;
  Ms.Free ;
  jpg.free;
end;
我在用的时候﹐怎幺老提示错误﹐说  地址 越位 ms:=TmemoryStream.Create;是这条错误
有没有什幺方法能存BMP﹐也能存jep的。在数据库中﹐size 一般以设多大。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var 
    MyJPEG : TJPEGImage;
    MS: TMemoryStream;
    begin
    MyJPEG := TJPEGImage.Create;
     try
        with MyJPEG do
        begin
          Assign(Image.Picture.Graphic);
          MS:=TMemoryStream.create;
          SaveToStream(MS);
          MS.Position:=0;
                    Table1.Edit;
                     TBlobField(Table1.FieldbyName('Image')).LoadFromStream(MS);
                     Table1.Post;
                     messagebox(getactivewindow(),'图像保存完毕!','保存',mb_ok);          
        end;
      finally
        MyJPEG.Free;
      end;
    end;
      

  2.   

    ado.append;~~~~~~~~~~~~~~~~~~~~
    producttable.append;
      

  3.   

    var
      Ms:TmemoryStream;
      jpg:Tfilestream;begin
      ms:=TmemoryStream.Create;
      Jpg:=tfilestream.create(path+name);
      ado.append;
      TBlobField(producttable.FieldByName('img')).LoadFromStream(Ms);
      producttable.Post;
      Ms.Free ;
      jpg.free;
    end;
      

  4.   

    var
      PicStream:TMemorystream;begin
      PicStream := TMemorystream.Create();
      Jpg.Assign(Image1.Picture.Graphic);
      Jpg.SaveToStream(Ms) ;
      Ms.Position :=0;
      PicStream.Position := 0;
      try
        ADO.append;
        TBlobField(producttable.FieldByName('img')).LoadFromStream(Ms);
        producttable.Post;
      finally
        PicStream.Free;
      end;
    end;
      

  5.   

    jinjazz(近身剪(N-P攻略)) ( ) 
           我用你的代碼試了一下﹐為什么會提示我﹐' connot assign a nil to a jpegimage ' 這個錯誤呢﹖我在FROM 上只有一個 TImage 控件﹐是不是還需要別的﹖謝謝﹐請完整一點我從來沒有做過這種類的﹗
      

  6.   

    我是想按一下 Button 出現一個輸入框﹐然后選擇路徑﹐找到圖片﹐找到后﹐
    顯示在From 上﹐按一下保存﹐再和別的數據一起保存到數據庫里。
    這種要怎么做呀﹖﹖
    j是不是還有別的方法﹐能不能說出一二﹐謝謝
      

  7.   

    用下面这个吧,网上很流行的,我改了改,没错的,虽然有点复杂
    //图片窗体
    unit Unit20;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, ExtDlgs, StdCtrls, ExtCtrls, Jpeg;
    type
      TForm20 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        OpenPictureDialog1: TOpenPictureDialog;
        ADOQuery1: TADOQuery;
        ADOQuery1dutycard: TStringField;
        ADOQuery1b: TBlobField;
        Panel1: TPanel;
        Image1: TImage;
        procedure Button1Click(Sender: TObject);
        procedure FormActivate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure Image1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      Form20: TForm20;
    implementation
    uses Unit2, Unit4;
    {$R *.dfm}
    function JpegStartsInBlob(PicField:TBlobField):integer;
       var
        ghy: TADOBlobstream;
        buffer:Word;
        hx: string;
       begin
        Result := -1;
        ghy := TADOBlobstream.Create(PicField, bmRead);
        try
         while (Result = -1) and (ghy.Position + 1 < ghy.Size) do
         begin
          ghy.ReadBuffer(buffer, 1);
          hx:=IntToHex(buffer, 2);
          if hx = 'FF' then begin
           ghy.ReadBuffer(buffer, 1);
           hx:=IntToHex(buffer, 2);
          if hx = 'D8' then Result := ghy.Position - 2
           else if hx = 'FF' then
                 ghy.Position := ghy.Position-1;
          end;
         end;
         finally
          ghy.Free
         end;
     end;procedure TForm20.FormActivate(Sender: TObject);
    var
    ghy:TADOBlobstream;
    pic:tjpegimage;
    begin
    if adoquery1.RecordCount>0 then
    begin
    ghy := TADOBlobstream.Create(Adoquery1b, bmRead);
    try
      ghy.Seek(JpegStartsInBlob(Adoquery1b),soFromBeginning);
      Pic:=TJpegImage.Create;
      try
       Pic.LoadFromStream(ghy);
       Image1.Picture.Graphic:=Pic;
      finally
       Pic.Free;
      end;
    finally
    ghy.Free
    end;
    button2.Enabled:=true;
    end
    else
    button2.Enabled:=false;
    end;procedure TForm20.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    image1.Picture:=nil;
    button1.Enabled:=false;
    end;procedure TForm20.Image1Click(Sender: TObject);
    begin
    if openpicturedialog1.Execute then
    begin
    button1.Enabled:=true;
    image1.Picture.LoadFromFile(openpicturedialog1.FileName);
    end;
    end;procedure TForm20.Button1Click(Sender: TObject);//保存
    var
    picstream:tadoblobstream;
    begin
    if adoquery1.RecordCount>0 then
    begin
    adoquery1.edit;
    picstream:=tadoblobstream.Create(tblobfield(adoquery1.fields[1]),bmWrite);
    picstream.LoadFromFile(openpicturedialog1.filename);
    picstream.Position:=0;
    adoquery1.edit;
    tblobfield(adoquery1.Fields[1]).loadfromstream(picstream);
    adoquery1.post;
    button1.Enabled:=false;
    button2.Enabled:=true;
    end
    else
    begin
    adoquery1.insert;
    picstream:=tadoblobstream.Create(tblobfield(adoquery1.fields[1]),bmWrite);
    picstream.LoadFromFile(openpicturedialog1.filename);
    picstream.Position:=0;
    adoquery1.insert;
    adoquery1['dutycard']:=form4.DBEdit1.Text;
    tblobfield(adoquery1.Fields[1]).loadfromstream(picstream);
    adoquery1.post;
    button1.Enabled:=false;
    button2.Enabled:=true;
    end;
    end;procedure TForm20.Button2Click(Sender: TObject);//删除
    begin
    image1.Picture:=nil;
    adoquery1.Delete;
    button2.Enabled:=false;
    end;
    end.
      

  8.   

    to rgn()
    type
      TForm20 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        OpenPictureDialog1: TOpenPictureDialog;
        ADOQuery1: TADOQuery;
        ADOQuery1dutycard: TStringField;
        ADOQuery1b: TBlobField;
        Panel1: TPanel;
        Image1: TImage;
        procedure Button1Click(Sender: TObject);
        procedure FormActivate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure Image1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);怎么会有
    ADOQuery1dutycard: TStringField;
        ADOQuery1b: TBlobField;
    这两句的,在哪里设置的?