117 lines
2.8 KiB
ObjectPascal
117 lines
2.8 KiB
ObjectPascal
unit FMMain;
|
|
|
|
interface
|
|
|
|
uses
|
|
System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
|
|
System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,
|
|
FMX.StdCtrls, FMX.Layouts, FMX.Memo, FMX.Edit,
|
|
SynCrossPlatformJSON;
|
|
|
|
type
|
|
TForm1 = class(TForm)
|
|
lbl1: TLabel;
|
|
edtValue: TEdit;
|
|
lbl2: TLabel;
|
|
lbl3: TLabel;
|
|
mmoJSON: TMemo;
|
|
grpTable: TGroupBox;
|
|
btnRewind: TButton;
|
|
btnNext: TButton;
|
|
grpORM: TGroupBox;
|
|
btnRewindORM: TButton;
|
|
btnNextORM: TButton;
|
|
procedure edtValueChange(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure btnNextClick(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure btnORMClick(Sender: TObject);
|
|
private
|
|
public
|
|
doc: variant;
|
|
table: TJSONTableObject;
|
|
end;
|
|
|
|
var
|
|
Form1: TForm1;
|
|
|
|
implementation
|
|
|
|
{$R *.fmx}
|
|
|
|
procedure TForm1.btnNextClick(Sender: TObject);
|
|
begin
|
|
if table.Step(Sender=btnRewind) then
|
|
mmoJSON.Text := JSONVariant(table.RowValues) else
|
|
mmoJSON.Text := 'null';
|
|
end;
|
|
|
|
type
|
|
TSQLRecordPeople = class(TPersistent)
|
|
private
|
|
fRowID: integer;
|
|
fData: TByteDynArray;
|
|
fFirstName: string;
|
|
fLastName: string;
|
|
fYearOfBirth: integer;
|
|
fYearOfDeath: word;
|
|
published
|
|
property RowID: integer read fRowID write fRowID;
|
|
property FirstName: string read fFirstName write fFirstName;
|
|
property LastName: string read fLastName write fLastName;
|
|
property Data: TByteDynArray read fData write fData;
|
|
property YearOfBirth: integer read fYearOfBirth write fYearOfBirth;
|
|
property YearOfDeath: word read fYearOfDeath write fYearOfDeath;
|
|
end;
|
|
|
|
procedure TForm1.btnORMClick(Sender: TObject);
|
|
var people: TSQLRecordPeople;
|
|
begin
|
|
people := TSQLRecordPeople.Create;
|
|
try
|
|
if table.StepObject(people,Sender=btnRewindORM) then
|
|
mmoJSON.Text := ObjectToJSON(people) else
|
|
mmoJSON.Text := 'null';
|
|
finally
|
|
people.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TForm1.edtValueChange(Sender: TObject);
|
|
begin
|
|
doc.value := edtValue.Text;
|
|
mmoJSON.Text := doc;
|
|
end;
|
|
|
|
procedure TForm1.FormCreate(Sender: TObject);
|
|
var json: string;
|
|
FN: TFileName;
|
|
level: integer;
|
|
begin
|
|
doc := JSONVariant('{"test":1234,"name":"Joh\"n\r","zero":0.0}');
|
|
assert(doc.test=1234);
|
|
assert(doc.name='Joh"n'#13);
|
|
assert(doc.name2=null);
|
|
assert(doc.zero=0);
|
|
json := doc;
|
|
assert(json='{"test":1234,"name":"Joh\"n\r","zero":0}');
|
|
doc.name2 := 3.1415926;
|
|
doc.name := 'John';
|
|
json := doc;
|
|
assert(json='{"test":1234,"name":"John","zero":0,"name2":3.1415926}');
|
|
FN := 'people.json';
|
|
for level := 1 to 4 do
|
|
if FileExists(FN) then
|
|
break else
|
|
FN := IncludeTrailingPathDelimiter('..')+FN;
|
|
table := TJSONTableObject.Create(UTF8FileToString(FN));
|
|
assert(length(table.FieldNames)=6);
|
|
end;
|
|
|
|
procedure TForm1.FormDestroy(Sender: TObject);
|
|
begin
|
|
table.Free;
|
|
end;
|
|
|
|
end.
|