clientdataset(fdmemtable).delta(data)序列為JSON


clientdataset(fdmemtable).delta(data)序列為JSON

clientdataset和fdmemtable,都是DELPHI官方提供的內存表控件,許多的3層客戶端都使用它們作數據集,因為3層客戶端需要內存表數據集。

clientdataset的時代,REST API尚不流行。因此clientdataset只支持序列為二進制和XML,不支持序列為JSON。

firedac fdmemtable出來的時候,提倡物聯網時代,REST API已經開始大行,因此fdmemtable支持序列為二進制、XML和JSON。

但是fdmemtable自帶方法序列出來的JSON,非常不友好,一點兒都不人性。如果使用fdmemtable自帶方法序列出的JSON,進行跨平台(語言)之間進行REST API對接,

據說是會被對方罵的。

鑒於此,詠南封裝了clientdataset(fdmemtable).data序列為JSON,clientdataset(fdmemtable).delta序列為JSON的方法,使clientdataset和fdmemtable序列出來的JSON是一樣的。

帶來的好處是,使DELPHI最常用的二種內存表數據集,可以真正方便地同其他開發語言通過REST API進行三方對接,從而真正實現跨平台、跨設備之間進行互聯的物聯網初衷。

delta序列為json:

新增、修改和刪除后的數據都會序列為JSON。

data序列為json

procedure TForm1.Button1Click(Sender: TObject);
begin
  ClientDataSet1.Append;
  ClientDataSet1['unitid'] := '1';
  ClientDataSet1['unitname'] := '個';
  ClientDataSet1.Post;

  ClientDataSet1.Append;
  ClientDataSet1['unitid'] := '2';
  ClientDataSet1['unitname'] := '雙';
  ClientDataSet1.Post;

  var jo: TynJsonCross := TynJsonCross.Create;
  Memo1.Text := jo.DeltaToJson(ClientDataSet1.Delta, 'tunit', '', 'unitid');
  jo.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FDMemTable1.Append;
  FDMemTable1['unitid'] := '1';
  FDMemTable1['unitname'] := '個';
  FDMemTable1.Post;

  FDMemTable1.Append;
  FDMemTable1['unitid'] := '2';
  FDMemTable1['unitname'] := '雙';
  FDMemTable1.Post;

  var jo: TynJsonCross := TynJsonCross.Create;
  Memo1.Text := jo.DeltaToJson(FDMemTable1, 'tunit', '', 'unitid');
  jo.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ClientDataSet1.Append;
  ClientDataSet1['unitid'] := '1';
  ClientDataSet1['unitname'] := '個';
  ClientDataSet1.Post;

  ClientDataSet1.Append;
  ClientDataSet1['unitid'] := '2';
  ClientDataSet1['unitname'] := '雙';
  ClientDataSet1.Post;

  var jo: TynJsonCross := TynJsonCross.Create;
  Memo1.Text := jo.DataSetToJson(ClientDataSet1);
  jo.Free;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  FDMemTable1.Append;
  FDMemTable1['unitid'] := '1';
  FDMemTable1['unitname'] := '個';
  FDMemTable1.Post;

  FDMemTable1.Append;
  FDMemTable1['unitid'] := '2';
  FDMemTable1['unitname'] := '雙';
  FDMemTable1.Post;

  var jo: TynJsonCross := TynJsonCross.Create;
  Memo1.Text := jo.DataSetToJson(FDMemTable1);
  jo.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ClientDataSet1.CreateDataSet;
  FDMemTable1.CreateDataSet;
  FDMemTable1.CachedUpdates := True;
end;

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM