Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 i.e.

 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.

like image 294
Shirish11 Avatar asked Jan 26 '26 01:01

Shirish11


1 Answers

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;
like image 95
Ondrej Kelle Avatar answered Jan 29 '26 13:01

Ondrej Kelle



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!