Upgrading RODA stream read erro

what driver you are using? ADO, FireDAC or something else?

i’m using SDAC driver

ok reverted back to the previous version and i can confirm that the idadataset which the TDABinDataStreamer.DoWriteDatasetData receives is different from that one in the latest version
in the sence that datmemo is recognised as string
as in the latest version it is recognised as variant array of byte
so the idadataset must stream datmemo differently…

looks like, it was DA_WIDEMEMO_conversion define. in your case, you should disable it.

hmmmm
did that but no go…
will retest

i’ve disabled the option in the inc file, rebuilded but it doesn’t seem to work… or i’m doing something wrong…

can you create a simple testcase for me? I’d like test it locally. you can send it to support@

at this moment, you can use your workaround with VariantToWriterAsStr

this is the origin
C:\Program Files (x86)\RemObjects Software\Data Abstract for Delphi\Source\Server\uDANativeDatabaseAccessSupport.pas

function TDANativeDatabaseAccess_Dataset.GetNativeFieldValue(
Index: Integer): Variant;
var
fld: TField;
begin
fld := FDataset.Fields[Index];
if fld.IsNull then
Result := Null
else
case fld.DataType of
ftBcd: Result := fld.AsCurrency;
ftFMTBcd: Result := DecimalToString(BCDToDecimal(fld.AsBCD),{$IFDEF Use_FormatSettings}FormatSettings.{$ENDIF}DecimalSeparator);
{$IFNDEF FPC}
ftWideString: Result := TWideStringField(fld).Value;
{$IFDEF DELPHI10UP}ftOraTimeStamp,{$ENDIF}
ftTimeStamp: Result := VarFromDateTime(fld.AsDateTime);
{$ENDIF FPC}
{$IFDEF DELPHI10UP}
ftWideMemo: begin
{$IFDEF DA_WIDEMEMO_conversion}
if (fCorrectType[Index] = 0) and (FDASQLCommand is TDAEBaseDataset) and (TDAEBaseDataset(fDASQLCommand).GetFields[Index].DataType = datMemo) then
Result := StringToAnsiBytes(TWideMemoField(fld).Value)
else
{$ENDIF}
Result := TWideMemoField(fld).Value;
end;
{$ENDIF DELPHI10UP}
ftBlob, ftMemo: begin
{$IFDEF DELPHI2009UP}
Result := BytesToVariant(TBlobField(fld).AsBytes);
{$ELSE}
Result := BytesToVariant(StringToAnsiBytes(TBlobField(fld).AsString));
{$ENDIF}
end
else
Result := fld.Value;
end;
end;

if it is a ftMemo it writes as a variant array of byte
this wasn’t the case in the 9.5 version

the ftmemo entry wasn’t there…

so what is your advise for change?

called from unit uDAESQLCommand

tthese changes in 9.6 don’t touch bin1, so your fix was correct

Thanks, logged as bugs://82997

ok i’ll apply the fix for the time being

better fix is (uDaBinAdapter.pas):

function TDABinDataStreamer.DoWriteDatasetData(const Source: IDADataset; var aDataForAppend: TDADataForAppend; aDataIndex: Integer = -1): Integer;
..
            datMemo,
            datBlob: VariantToWriterAsStr(fldstypes[i], val, fWriter);

bugs://82997 got closed with status fixed.

ok!