简体   繁体   中英

TStream warning in delphi

I have the following code snippet

 Procedure TFrm.Retrieve(mystring : string);
  var 
   bs : TStream;
   ...
  begin
    ...
    bs:=nil;
    //bs:= TStream.create; 
    try
     bs := CreateBlobStream(FieldByName('Picture'), bmRead);
    finally
     bs.Free;
    end;
  ... 
  end;   

I have a problem understanding the initialisation of bs variable.

If I dont initialize it , a but obvious warning i get.

 Variable 'bs' might not have been initialized.

Now if I do it as the commented part ie

 bs:= TStream.create;

I get the following warning.

Constructing instance of 'TStream' containing abstract method 'TStream.Read'
Constructing instance of 'TStream' containing abstract method 'TStream.Write'

and finally it works totally fine if I use

 bs:=nil;

Am I Doing it correct by assigning it to Nil ?

Any views appreciated.

TStream is abstract so you shouldn't instantiate it (calling an abstract method causes a runtime error). Instead, you should instantiate a non-abstract descendant. When you're done you should Free the instance.

For example:

var
  Stream: TStream;
begin
  try
    Stream := CreateBlobStream(FieldByName('Picture'), bmRead);
    try
      // ...
    finally
      Stream.Free;
    end;
  except 
    // handle exceptions
  end;
end;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM