testjsondataset.pp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. program testjsondataset;
  2. {$mode objfpc}{$H+}
  3. uses
  4. Classes, sysutils, DB, fpjsondataset, fpjson, jsonparser;
  5. Function ExtractData(Const AFileName : string) : TJSONObject;
  6. Var
  7. F : TFIleStream;
  8. P : TJSONParser;
  9. D : TJSONData;
  10. begin
  11. Result:=Nil;
  12. F:=TFileStream.Create(AFileName,fmOpenRead);
  13. try
  14. P:=TJSONParser.Create(F);
  15. try
  16. D:=P.Parse;
  17. if (D.JSONType=jtObject) then
  18. Result:=D as TJSONObject
  19. else
  20. FreeAndNil(D);
  21. finally
  22. P.Free;
  23. end;
  24. finally
  25. F.Free;
  26. end;
  27. end;
  28. Procedure DumpDataset(DS : TDataset);
  29. Var
  30. I,J : Integer;
  31. begin
  32. I:=0;
  33. Writeln('Dataset contains ',DS.RecordCount,' records');
  34. While not DS.EOF do
  35. begin
  36. Inc(I);
  37. Writeln('=== Record ',I,' : ',DS.RecNo,' ===');
  38. For J:=0 to DS.Fields.Count-1 do
  39. With DS.Fields[J] do
  40. Writeln(FieldName,' : ',AsString);
  41. DS.Next;
  42. end;
  43. Writeln('Dataset contained ',I,' records');
  44. end;
  45. Procedure DoTest4(Const AFileName : string);
  46. Var
  47. DS : TExtjsJSONObjectDataset;
  48. begin
  49. DS:=TExtjsJSONObjectDataset.Create(Nil);
  50. try
  51. DS.LoadFromFile(AFileName);
  52. DS.Open;
  53. DumpDataset(DS);
  54. finally
  55. DS.Free;
  56. end;
  57. end;
  58. Procedure DoTest1(Const AFileName : string);
  59. Var
  60. D,M : TJSONObject;
  61. DS : TExtjsJSONObjectDataset;
  62. I,J : Integer;
  63. F : TFieldDef;
  64. begin
  65. D:=ExtractData(AFileName);
  66. try
  67. DS:=TExtjsJSONObjectDataset.Create(Nil);
  68. try
  69. DS.Rows:=D.Arrays['rows'];
  70. DS.Metadata:=D.Objects['metaData'];
  71. DS.OwnsData:=False;
  72. DS.Open;
  73. For I:=0 to DS.FieldDefs.Count-1 do
  74. begin
  75. F:=DS.FieldDefs[i];
  76. Writeln('FieldDefs.Add(''',F.Name,''',',F.DataType,',',F.Size,');');
  77. end;
  78. DumpDataset(DS);
  79. finally
  80. DS.Free;
  81. end;
  82. finally
  83. D.Free;
  84. end;
  85. end;
  86. Procedure DoTest2(Const AFileName : string);
  87. Var
  88. D,M : TJSONObject;
  89. DS : TExtjsJSONObjectDataset;
  90. I,J : Integer;
  91. F : TFieldDef;
  92. begin
  93. D:=ExtractData(AFileName);
  94. DS:=TExtjsJSONObjectDataset.Create(Nil);
  95. DS.Rows:=D.Arrays['rows'];
  96. With DS do
  97. begin
  98. FieldDefs.Add('ID',ftLargeint,0);
  99. FieldDefs.Add('Name',ftString,20);
  100. FieldDefs.Add('Email',ftString,30);
  101. end;
  102. DS.Open;
  103. DumpDataset(DS);
  104. end;
  105. Procedure DoTest3(Const AFileName : string);
  106. Var
  107. DS : TExtjsJSONObjectDataset;
  108. I,J : Integer;
  109. F : TFieldDef;
  110. begin
  111. DS:=TExtjsJSONObjectDataset.Create(Nil);
  112. try
  113. With DS do
  114. begin
  115. FieldDefs.Add('ID',ftLargeint,0);
  116. FieldDefs.Add('Name',ftString,20);
  117. FieldDefs.Add('Email',ftString,30);
  118. Open;
  119. // Record 1
  120. Append;
  121. FieldByName('ID').AsInteger:=3;
  122. FieldByName('Name').AsString:='Michael';
  123. FieldByName('Email').AsString:='[email protected]';
  124. Post;
  125. // Record 2
  126. Append;
  127. FieldByName('ID').AsInteger:=4;
  128. FieldByName('Name').AsString:='jonas';
  129. FieldByName('Email').AsString:='[email protected]';
  130. Post;
  131. DumpDataset(DS);
  132. First;
  133. // insert record 1
  134. Insert;
  135. FieldByName('ID').AsInteger:=1;
  136. FieldByName('Name').AsString:='Florian';
  137. FieldByName('Email').AsString:='[email protected]';
  138. Post;
  139. DumpDataset(DS);
  140. Writeln('First');
  141. First;
  142. Writeln('Editing record ', RecNo,' ',FieldByName('Name').AsString);
  143. Edit;
  144. FieldByName('ID').AsInteger:=12;
  145. FieldByName('Name').AsString:='Marco';
  146. FieldByName('Email').AsString:='[email protected]';
  147. Post;
  148. First;
  149. DumpDataset(DS);
  150. First;
  151. Next;
  152. Writeln('Deleting record ', RecNo,' ',FieldByName('Name').AsString);
  153. Delete;
  154. First;
  155. DumpDataset(DS);
  156. SaveToFile(AFileName,True);
  157. end;
  158. finally
  159. DS.Free
  160. end;
  161. end;
  162. begin
  163. Writeln('Test 1');
  164. DoTest1('test.json');
  165. Writeln('Test 2');
  166. DoTest2('test.json');
  167. Writeln('Test 3');
  168. DoTest3('test3.json');
  169. Writeln('Test 4');
  170. DoTest4('test.json');
  171. end.