xtool/contrib/mORMot/SQLite3/Samples/27 - CrossPlatform Clients/FMMain.pas

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.