sampledarw.lpr 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. program sampledarw;
  2. {$mode objfpc}
  3. uses
  4. Classes, SysUtils, Web, DB, dadataset;
  5. Type
  6. { TSampleForm }
  7. TSampleForm = Class(TComponent)
  8. Private
  9. divWrapper : TJSHTMLElement;
  10. btnDeleteData,
  11. btnAddData,
  12. btnEditData,
  13. btnGetData : TJSHTMLButtonElement;
  14. tblBody : TJSHTMLElement;
  15. FConn : TDAConnection;
  16. FDataset : TDADataset;
  17. procedure AfterLoad(DataSet: TDataSet);
  18. procedure BindElements;
  19. procedure CreateDataset;
  20. function DoAddDataClick(aEvent: TJSMouseEvent): boolean;
  21. procedure DoAfterApplyUpdates(Sender: TDataset; info: TResolveResults);
  22. procedure DoCountriesOpen(DataSet: TDataSet);
  23. function DoDeleteDataClick(aEvent: TJSMouseEvent): boolean;
  24. function DoEditDataClick(aEvent: TJSMouseEvent): boolean;
  25. function DoGetDataClick(aEvent: TJSMouseEvent): boolean;
  26. procedure ShowCountries;
  27. Public
  28. Procedure Show;
  29. end;
  30. { TSampleForm }
  31. procedure TSampleForm.CreateDataset;
  32. begin
  33. FConn:=TDaConnection.Create(Self);
  34. FConn.URL:='/proxy/Server/bin';
  35. FConn.StreamerType:=stBin;
  36. FDataset:=TDaDataset.Create(Self);
  37. FDataset.DAConnection:=FConn;
  38. FDataset.TableName:='Country';
  39. FDataset.AfterOpen:=@DoCountriesOpen;
  40. FDataset.AfterApplyUpdates:=@DoAfterApplyUpdates;
  41. FDataset.AfterLoad:=@AfterLoad;
  42. FDataset.DAOptions:=[doRefreshAllFields];
  43. end;
  44. procedure TSampleForm.DoAfterApplyUpdates(Sender: TDataset; info: TResolveResults);
  45. Var
  46. I : Integer;
  47. ACount,aSucceeded : Integer;
  48. begin
  49. aCount:=Length(Info.Records);
  50. aSucceeded:=0;
  51. For I:=0 to aCount-1 do
  52. if Info.Records[i].ResolveStatus=rsResolved then
  53. Inc(aSucceeded);
  54. window.alert(Format('Sent %d records for update to the server, %d succeeded.',[aCount,aSucceeded]));
  55. if aSucceeded>0 then
  56. begin
  57. FDataset.First;
  58. ShowCountries;
  59. end;
  60. end;
  61. procedure TSampleForm.BindElements;
  62. begin
  63. btnGetData:=TJSHTMLButtonElement(Document.getElementById('btn-fetch'));
  64. btnGetData.onClick:=@DoGetDataClick;
  65. btnAddData:=TJSHTMLButtonElement(Document.getElementById('btn-add'));
  66. btnAddData.onClick:=@DoAddDataClick;
  67. btnAddData.Disabled:=True;
  68. btnEditData:=TJSHTMLButtonElement(Document.getElementById('btn-edit'));
  69. btnEditData.onClick:=@DoEditDataClick;
  70. btnEditData.Disabled:=True;
  71. btnDeleteData:=TJSHTMLButtonElement(Document.getElementById('btn-delete'));
  72. btnDeleteData.onClick:=@DoDeleteDataClick;
  73. btnDeleteData.Disabled:=True;
  74. tblBody:=TJSHTMLElement(Document.getElementById('tableRows'));
  75. divWrapper:=TJSHTMLElement(Document.getElementById('wrapper'));
  76. end;
  77. procedure TSampleForm.AfterLoad(DataSet: TDataSet);
  78. begin
  79. Writeln('Loaded');
  80. end;
  81. procedure TSampleForm.DoCountriesOpen(DataSet: TDataSet);
  82. begin
  83. Writeln('Countries open :',Dataset.RecordCount);
  84. btnEditData.Disabled:=False;
  85. btnAddData.Disabled:=False;
  86. btnDeleteData.Disabled:=False;
  87. ShowCountries;
  88. end;
  89. function TSampleForm.DoDeleteDataClick(aEvent: TJSMouseEvent): boolean;
  90. begin
  91. Result:=False;
  92. FDataset.last;
  93. FDataset.Delete;
  94. FDataset.ApplyUpdates;
  95. end;
  96. procedure TSampleForm.ShowCountries;
  97. Function escape(S : String) : String;
  98. begin
  99. Result:=StringReplace(S,'&','&',[rfReplaceAll]);
  100. Result:=StringReplace(S,'<','&lt;',[rfReplaceAll]);
  101. Result:=StringReplace(S,'>','&gt;',[rfReplaceAll]);
  102. Result:=StringReplace(S,'"','&quot;',[rfReplaceAll]);
  103. Result:=StringReplace(S,'''','&#39;',[rfReplaceAll]);
  104. end;
  105. Var
  106. FISo,FName,FNiceName,fISO3,Fnum,FPhone : TField;
  107. HTML : String;
  108. begin
  109. FISO:=FDataset.FieldByname('ISO');
  110. FISO3:=FDataset.FieldByname('ISO3');
  111. FName:=FDataset.FieldByname('Name');
  112. FNiceName:=FDataset.FieldByname('NiceName');
  113. FNum:=FDataset.FieldByname('Numcode');
  114. FPhone:=FDataset.FieldByname('phonecode');
  115. While not FDataset.EOF do
  116. begin
  117. html:=Html+'<TR><TD>'+Escape(FISO.AsString)+'</TD>'
  118. +'<TD>'+Escape(FIso3.AsString)+'</TD>'
  119. +'<TD>'+Escape(FName.AsString)+'</TD>'
  120. +'<TD>'+Escape(FNiceName.AsString)+'</TD>'
  121. +'<TD>'+Escape(FNum.AsString)+'</TD>'
  122. +'<TD>'+Escape(FPHone.AsString)+'</TD></TR>';
  123. FDataset.Next;
  124. end;
  125. tblBody.InnerHTMl:=HTML;
  126. divWrapper['style']:='';
  127. end;
  128. function TSampleForm.DoAddDataClick(aEvent: TJSMouseEvent): boolean;
  129. begin
  130. Result:=False;
  131. With FDataset do
  132. begin
  133. Append;
  134. FieldByname('ISO').AsString:='zz';
  135. FieldByname('ISO3').AsString:='zzz';
  136. FieldByname('Name').AsString:='CountryZ';
  137. FieldByname('NiceName').AsString:='Country with name Z';
  138. FieldByname('PhoneCode').AsInteger:=999;
  139. FieldByname('NumCode').AsInteger:=99;
  140. Post;
  141. ApplyUpdates;
  142. end;
  143. end;
  144. function TSampleForm.DoEditDataClick(aEvent: TJSMouseEvent): boolean;
  145. begin
  146. Result:=False;
  147. With FDataset do
  148. begin
  149. Last;
  150. Edit;
  151. FieldByname('ISO3').AsString:='zz3';
  152. FieldByname('Name').AsString:='CountryZZ';
  153. FieldByname('NiceName').AsString:='Country without name Z';
  154. FieldByname('PhoneCode').AsInteger:=666;
  155. FieldByname('NumCode').AsInteger:=66;
  156. Post;
  157. ApplyUpdates;
  158. end;
  159. end;
  160. function TSampleForm.DoGetDataClick(aEvent: TJSMouseEvent): boolean;
  161. begin
  162. Result:=False;
  163. FDataset.Close;
  164. FDataset.load([],Nil);
  165. end;
  166. procedure TSampleForm.Show;
  167. begin
  168. CreateDataset;
  169. BindElements;
  170. end;
  171. begin
  172. With TSampleForm.Create(Nil) do
  173. Show;
  174. end.