Lazarus and DBMemo

Hi

I found out that i do not get an data in a TDBMemo field.
I use a Relativity Server and the Lazarus 1.4.

Is this a known problem?

Shalom
Manfred

Not yet. It can be a problem in Lazarus itself.
Can you test the same code with Delphi, pls?

Hi

I Forgot to mention: The Field in MySQL is a 

      `NOTE` mediumtext,

There is no Code i just connected the DataSource and the DataField in the Object Inspector.

In Delphi it works.

I did also try a different Component ( lzRichEdit ) with the same Problem:
Here i used following Code. But rtfString is always empty…

procedure TDM_hotel.load_rtf_stream(Sender: TObject);
var
    stream :TMemoryStream;
    rtfString : String;
begin
     //Get the data from the database as AnsiString
     //rtfString := tbl_hotel.FieldByName('NOTE').AsWideString;
     rtfString := tbl_hotel.FieldByName('NOTE').AsAnsiString;

     //Write the string into a stream
     stream := TMemoryStream.Create;
     stream.Clear;
     stream.Write(PAnsiChar(rtfString)^, Length(rtfString));
     stream.Position := 0;

     //Load the stream into the RichEdit
     frm_hotel.lzRichEdit_main.PlainText := False;
     frm_hotel.lzRichEdit_main.Lines.LoadFromStream(stream);

     stream.Free;
end;

Thanks, logged as bugs://71979

bugs://71979 got closed with status fixed.

it was difference between Delphi and FPC: TMemoryStream in FPC overrides GetSize so stream size always returned as 0.

as a workaround, pls update uDAMemDataset.pas as:

  TDABlobStream = class(TMemoryStream)
..
  protected
    {$IFDEF FPC}
    function  GetSize: Int64; override;
    {$ENDIF}
..
{$IFDEF FPC}
function  TDABlobStream.GetSize: Int64;
begin
  Result := GetBlobSize;
end;
{$ENDIF}

Sorry for the Question, but i am not quit shure where to Update:

  TDABlobStream = class(TMemoryStream)
  private
    FField: TBlobField;
    ffld_idx: integer;
    FDataSet: TDAMemoryDataset;
    FBuffer:  PMemDatasetrecord_Native;
    FMode: TBlobStreamMode;
    FOpened: Boolean;
    FModified: Boolean;
    FPosition: Longint;
    FCached: Boolean;
    function GetBlobSize: Longint;
    procedure GetBLOBRecordFromRecord(out aLocked:Boolean; out blob_size: integer; out blob_data: pointer);
    function GetBLOBRecordFromBuffer(Buffer: PMemDatasetrecord_Native; out blob_size: integer; out blob_data: pointer): PBLOBRecord;
    procedure Truncate;
  public
    constructor Create(Field: TBlobField; Mode: TBlobStreamMode);
    destructor Destroy; override;
    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    {$IFDEF DELPHIXE3UP}
    function Read(Buffer: TBytes; Offset, Count: Longint): Longint; override;
    function Write(const Buffer: TBytes; Offset, Count: Longint): Longint; override;
    {$ENDIF}
    function Seek(Offset: Longint; Origin: Word): Longint; override;
    function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
  end;
  TDABlobStream = class(TMemoryStream)
..
  protected
    {$IFDEF FPC}
    function  GetSize: Int64; override;
    {$ENDIF}
  public  //<<< existing line

The code looks now like this:

  TDABlobStream = class(TMemoryStream)
  private
    FField: TBlobField;
    ffld_idx: integer;
    FDataSet: TDAMemoryDataset;
    FBuffer:  PMemDatasetrecord_Native;
    FMode: TBlobStreamMode;
    FOpened: Boolean;
    FModified: Boolean;
    FPosition: Longint;
    FCached: Boolean;
    function GetBlobSize: Longint;
    procedure GetBLOBRecordFromRecord(out aLocked:Boolean; out blob_size: integer; out blob_data: pointer);
    function GetBLOBRecordFromBuffer(Buffer: PMemDatasetrecord_Native; out blob_size: integer; out blob_data: pointer): PBLOBRecord;
    procedure Truncate;
  protected
    {$IFDEF FPC}
    function  GetSize: Int64; override;
    {$ENDIF}
  public
    constructor Create(Field: TBlobField; Mode: TBlobStreamMode);
    destructor Destroy; override;
    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    {$IFDEF DELPHIXE3UP}
    function Read(Buffer: TBytes; Offset, Count: Longint): Longint; override;
    function Write(const Buffer: TBytes; Offset, Count: Longint): Longint; override;
    {$ENDIF}
    function Seek(Offset: Longint; Origin: Word): Longint; override;
    function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
  end;   

But where i have to insert / update this?

{$IFDEF FPC}
function  TDABlobStream.GetSize: Int64;
begin
  Result := GetBlobSize;
end;
{$ENDIF}

into implementation section

It works :wink:
Thank you for your Help.

Shalom
Manfred