source upload
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
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.
|
Reference in New Issue
Block a user