You are not logged in.
I can not understand how the most simple to convert a lot of records SQLRecord to JSON, and then back again, but without the use of TSQLRestServerFullMemory?
I try so, but the first call SQLServiceState.FillOne returns False:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Mormot, StdCtrls, SynCommons;
type
TSQLServiceState = class(TSQLRecord)
private
FState: Integer;
FUpdated: Double;
private
property State: Integer read FState write FState;
property Updated: Double read FUpdated write FUpdated;
end;
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
Raws = 5;
var
Form1: TForm1;
JSON: RawUTF8;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
TextWriter: TTextWriter;
i: Integer;
begin
JSON:= '';
Randomize;
TextWriter:= TTextWriter.CreateOwnedStream;
try
for i:= 1 to Raws do
TextWriter.AddJSONEscape(['Id', i, 'Updated', Now + Random(100), 'State', Random(100)]);
JSON:= TextWriter.Text;
finally
TextWriter.Free
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
SQLServiceState: TSQLServiceState;
begin
SQLServiceState:= TSQLServiceState.CreateAndFillPrepare(JSON);
try
while SQLServiceState.FillOne do //why False?
begin
Memo1.Lines.Add('Id : ' + IntToStr(SQLServiceState.ID));
Memo1.Lines.Add('Updated : ' + DateTimeToStr(SQLServiceState.Updated));
Memo1.Lines.Add('State : ' + IntToStr(SQLServiceState.State));
end;
finally
SQLServiceState.Free;
end;
end;
end.
Offline
The content created in Button1Click is not a valid JSON array content.
Check http://json.org/
You need to add TextWriter.Add('[') before the loop, and TextWriter.Add(']') after it.
Offline
Thank you for your help.
I fixed code, now it works.
In the example I have one more mistake - I have the wrong published section for TSQLServiceState.
Offline