|
From: <dav...@us...> - 2010-01-29 04:36:41
|
Revision: 894
http://instantobjects.svn.sourceforge.net/instantobjects/revision/?rev=894&view=rev
Author: davidvtaylor
Date: 2010-01-29 04:36:35 +0000 (Fri, 29 Jan 2010)
Log Message:
-----------
* Implement workaround for AnyDAC/MSSQL issue for blobs exceeding 8000 bytes
Modified Paths:
--------------
trunk/Source/Brokers/AnyDAC/InstantAnyDAC.pas
Modified: trunk/Source/Brokers/AnyDAC/InstantAnyDAC.pas
===================================================================
--- trunk/Source/Brokers/AnyDAC/InstantAnyDAC.pas 2010-01-29 04:24:56 UTC (rev 893)
+++ trunk/Source/Brokers/AnyDAC/InstantAnyDAC.pas 2010-01-29 04:36:35 UTC (rev 894)
@@ -681,24 +681,43 @@
SourceParam : TParam;
TargetParam : TADParam;
i : Integer;
+ Params : TADParams;
begin
// Don't call inherited
+ Params := (DataSet as TADQuery).Params;
for i := 0 to Pred(AParams.Count) do
begin
SourceParam := AParams[i];
- TargetParam := (DataSet as TADQuery).Params.FindParam(SourceParam.Name);
+ TargetParam := Params.FindParam(SourceParam.Name);
if assigned(TargetParam) then
AssignParam(SourceParam, TargetParam);
end;
end;
procedure TInstantAnyDACBroker.AssignParam(SourceParam: TParam; TargetParam: TADParam);
+
+{$IFDEF D12+}
+function ConvertBlobData(const Bytes: TBytes): RawByteString;
+ begin
+ SetLength(Result, Length(Bytes));
+ if length(Result) > 0 then
+ Move(Bytes[0], Result[1], Length(Bytes))
+ end;
+{$ENDIF}
+
begin
case SourceParam.DataType of
ftBoolean:
if UseBooleanFields then
TargetParam.Assign(SourceParam) else
TargetParam.AsInteger := ord(SourceParam.AsBoolean);
+ ftBlob:
+ // Temporary workaround for AnyDAC blob issue with MSSQL
+ {$IFDEF D12+}
+ TargetParam.AsBlob := ConvertBlobData(SourceParam.AsBlob);
+ {$ELSE}
+ TargetParam.AsBlob := SourceParam.AsBlob;
+ {$ENDIF}
else
TargetParam.Assign(SourceParam);
end;
|