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.
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;