fcl-db: base: implements AsBytes for TBlobField

git-svn-id: trunk@25294 -
This commit is contained in:
lacak 2013-08-19 12:06:36 +00:00
parent 9cf1ef90cd
commit 721d695ae4
2 changed files with 51 additions and 16 deletions

View File

@ -864,15 +864,17 @@ type
Function GetBlobStream (Mode : TBlobStreamMode) : TStream; Function GetBlobStream (Mode : TBlobStreamMode) : TStream;
protected protected
procedure FreeBuffers; override; procedure FreeBuffers; override;
function GetAsBytes: TBytes; override;
function GetAsString: string; override; function GetAsString: string; override;
function GetAsVariant: Variant; override; function GetAsVariant: Variant; override;
function GetAsWideString: WideString; override;
function GetBlobSize: Longint; virtual; function GetBlobSize: Longint; virtual;
function GetIsNull: Boolean; override; function GetIsNull: Boolean; override;
procedure GetText(var TheText: string; ADisplayText: Boolean); override; procedure GetText(var TheText: string; ADisplayText: Boolean); override;
procedure SetAsBytes(const AValue: TBytes); override;
procedure SetAsString(const AValue: string); override; procedure SetAsString(const AValue: string); override;
procedure SetText(const AValue: string); override; procedure SetText(const AValue: string); override;
procedure SetVarValue(const AValue: Variant); override; procedure SetVarValue(const AValue: Variant); override;
function GetAsWideString: WideString; override;
procedure SetAsWideString(const AValue: WideString); override; procedure SetAsWideString(const AValue: WideString); override;
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;

View File

@ -2737,7 +2737,7 @@ end;
{ TBlobField } { TBlobField }
Function TBlobField.GetBlobStream(Mode : TBlobStreamMode) : TStream; function TBlobField.GetBlobStream(Mode: TBlobStreamMode): TStream;
begin begin
Result:=FDataset.CreateBlobStream(Self,Mode); Result:=FDataset.CreateBlobStream(Self,Mode);
@ -2748,6 +2748,24 @@ procedure TBlobField.FreeBuffers;
begin begin
end; end;
function TBlobField.GetAsBytes: TBytes;
var
Stream : TStream;
Len : Integer;
begin
Stream := GetBlobStream(bmRead);
if Stream <> nil then
try
Len := Stream.Size;
SetLength(Result, Len);
if Len > 0 then
Stream.ReadBuffer(Result[0], Len);
finally
Stream.Free;
end
else
SetLength(Result, 0);
end;
function TBlobField.GetAsString: string; function TBlobField.GetAsString: string;
var var
@ -2756,7 +2774,7 @@ var
begin begin
Stream := GetBlobStream(bmRead); Stream := GetBlobStream(bmRead);
if Stream <> nil then if Stream <> nil then
With Stream do with Stream do
try try
Len := Size; Len := Size;
SetLength(Result, Len); SetLength(Result, Len);
@ -2776,7 +2794,7 @@ var
begin begin
Stream := GetBlobStream(bmRead); Stream := GetBlobStream(bmRead);
if Stream <> nil then if Stream <> nil then
With Stream do with Stream do
try try
Len := Size; Len := Size;
SetLength(Result, (Len+1) div 2); SetLength(Result, (Len+1) div 2);
@ -2799,7 +2817,8 @@ begin
s := GetAsString; s := GetAsString;
result := s; result := s;
end end
else result := Null; else
result := Null;
end; end;
@ -2807,29 +2826,29 @@ function TBlobField.GetBlobSize: Longint;
var var
Stream: TStream; Stream: TStream;
begin begin
Stream := GetBlobStream(bmread); Stream := GetBlobStream(bmRead);
if Stream <> nil then if Stream <> nil then
With Stream do with Stream do
try try
Result:=Size; Result:=Size;
finally finally
Free; Free;
end end
else else
result := 0; Result := 0;
end; end;
function TBlobField.GetIsNull: Boolean; function TBlobField.GetIsNull: Boolean;
begin begin
If Not Modified then if Not Modified then
result:= inherited GetIsnull Result:= inherited GetIsNull
else else
With GetBlobStream(bmread) do with GetBlobStream(bmRead) do
try try
Result:=(Size=0); Result:=(Size=0);
Finally finally
Free; Free;
end; end;
end; end;
@ -2841,12 +2860,26 @@ begin
TheText:=inherited GetAsString; TheText:=inherited GetAsString;
end; end;
procedure TBlobField.SetAsBytes(const AValue: TBytes);
var
Len : Integer;
begin
with GetBlobStream(bmWrite) do
try
Len := Length(AValue);
if Len > 0 then
WriteBuffer(AValue[0], Len);
finally
Free;
end;
end;
procedure TBlobField.SetAsString(const AValue: string); procedure TBlobField.SetAsString(const AValue: string);
var var
Len : Integer; Len : Integer;
begin begin
With GetBlobStream(bmwrite) do with GetBlobStream(bmWrite) do
try try
Len := Length(AValue); Len := Length(AValue);
if Len > 0 then if Len > 0 then
@ -2861,7 +2894,7 @@ procedure TBlobField.SetAsWideString(const AValue: WideString);
var var
Len : Integer; Len : Integer;
begin begin
With GetBlobStream(bmwrite) do with GetBlobStream(bmWrite) do
try try
Len := Length(AValue) * 2; Len := Length(AValue) * 2;
if Len > 0 then if Len > 0 then
@ -2923,8 +2956,8 @@ end;
procedure TBlobField.LoadFromStream(Stream: TStream); procedure TBlobField.LoadFromStream(Stream: TStream);
begin begin
With GetBlobStream(bmWrite) do with GetBlobStream(bmWrite) do
Try try
CopyFrom(Stream,0); CopyFrom(Stream,0);
finally finally
Free; Free;