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
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
Thank you for your Help.
Shalom
Manfred