When I have more than one GUIDField in the DataSet, the last character in some field is displayed wrong.
The brace at the end is displayed incorrectly.
Code: Select all
unit Unit56;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, MemDS, VirtualDataSet,
Vcl.Grids, Vcl.DBGrids, DBAccess, Uni, System.Generics.Collections;
type
TGUIDClass = class
GUID1: TGUID;
GUID2: TGUID;
end;
TForm56 = class(TForm)
VirtualDataSet1: TVirtualDataSet;
gfGUID1: TGuidField;
gfGUID2: TGuidField;
UniDataSource1: TUniDataSource;
DBGrid1: TDBGrid;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure VirtualDataSet1GetFieldValue(Sender: TObject; Field: TField; RecNo:
Integer; out Value: Variant);
procedure VirtualDataSet1GetRecordCount(Sender: TObject; out Count: Integer);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
FGUIDList : TObjectList<TGUIDClass>;
end;
var
Form56: TForm56;
implementation
{$R *.dfm}
procedure TForm56.FormDestroy(Sender: TObject);
begin
FreeAndNil( FGUIDList);
end;
procedure TForm56.FormCreate(Sender: TObject);
begin
FGUIDList := TObjectList<TGUIDClass>.Create( True);
for var i := 0 to 10 do
begin
var lGUIDObject := TGUIDClass.Create;
lGUIDObject.GUID1 := TGUID.NewGuid;
lGUIDObject.GUID2 := TGUID.NewGuid;
FGUIDList.Add( lGUIDObject);
end;
VirtualDataSet1.Open;
end;
procedure TForm56.VirtualDataSet1GetFieldValue(Sender: TObject; Field: TField;
RecNo: Integer; out Value: Variant);
begin
// If I leave only one of the fields in it is displayed correctly, no matter which field
case Field.Index of
0: Value := FGUIDList[ RecNo-1].GUID1.ToString;
1: Value := FGUIDList[ RecNo-1].GUID2.ToString;
end;
end;
procedure TForm56.VirtualDataSet1GetRecordCount(Sender: TObject; out Count:
Integer);
begin
Count := FGUIDList.Count;
end;
end.