调试时出现:stream might not have been initialized  
这个怎么初始化unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtDlgs, DB, ADODB, ExtCtrls, StdCtrls, jpeg;type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Image1: TImage;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    OpenPictureDialog1: TOpenPictureDialog;
    SavePictureDialog1: TSavePictureDialog;
    Image2: TImage;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
Stream:TMemoryStream;
begin
try
  Stream := TMemoryStream.Create; // 创建内存流
  Image1.Picture.Graphic.SaveToStream(Stream); // 将图片保存到内存流中
  Stream.Position :=0;
  adoquery1.Close;
  adoquery1.SQL.Clear;  adoQuery1.SQL.Add('Insert into tbltemp (Image,name) values (:photo,'''+edit1.text+''')'); // 进行插入操作
  adoQuery1.Parameters.ParamByName('photo').LoadFromStream(Stream,ftBlob); // 读取保存的内存图
  adoquery1.ExecSQL;  finally  Stream.Free; // 释放内存流end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Stream:TMemoryStream;
Jpg:TjpegImage;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Text:='SELECT * FROM tbltemp where id=23'; // 查询图片
ADOQuery1.Open;
if not ADOQuery1.FieldByName('Image').IsNull then
begin
  Stream:=TMemoryStream.Create ;
  Jpg:=TjpegImage.Create ;
  TBlobField(ADOQuery1.FieldByName('Image')).SaveToStream(Stream); // 显示的转换为BlobField并保存到内存流
  Stream.Position :=0;
  jpg.LoadFromStream(Stream); // 加载图片
  image2.Picture.Assign(Jpg);
 Stream.Position :=0;
end
else  
begin
  image2.Picture :=nil;end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
  begin
    Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);end;
end;end.

解决方案 »

  1.   

    没看到哪里错了,流还要怎么初始化,我用的时候都是TMemoryStream.Create就行了
    楼主显示的是哪一行出错?
      

  2.   

    你这个应该算是个警告吧,Button2Click,这个过程中,流没有在一开始时被创建,你在开始时创建就没事了,用完free
      

  3.   

    56行    Stream.Free; // 释放内存流这个
      

  4.   

    这个问题……你既然try Stream := TMemoryStream.Create; 
    那你应该在这个try 里面 free 掉这个 Stream,而不是在
    finally 里面!
      

  5.   

    改成这样:try
      Stream := TMemoryStream.Create; // 创建内存流
      ...
      Stream.Free; // 释放内存流
    finallyend;