rptdataset.pp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. unit rptdataset;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes,
  6. SysUtils,
  7. fpreport,
  8. fpreportdb,
  9. db,
  10. dbf,
  11. udapp;
  12. type
  13. { TDatasetDemo }
  14. TDatasetDemo = class(TReportDemoApp)
  15. private
  16. lReportData: TFPReportDatasetData;
  17. DataSet: TDBF;
  18. Public
  19. procedure CreateReportDesign; override;
  20. procedure InitialiseData; override;
  21. public
  22. constructor Create(AOwner : TComponent); override;
  23. Class function Description : string; override;
  24. destructor Destroy; override;
  25. end;
  26. implementation
  27. uses
  28. fpTTF,
  29. FPCanvas,
  30. dbf_fields;
  31. { TDatasetDemo }
  32. procedure TDatasetDemo.CreateReportDesign;
  33. var
  34. p: TFPReportPage;
  35. TitleBand: TFPReportTitleBand;
  36. DataBand: TFPReportDataBand;
  37. Memo: TFPReportMemo;
  38. Image: TFPReportImage;
  39. PageFooter: TFPReportPageFooterBand;
  40. begin
  41. Inherited;
  42. rpt.Author := 'Graeme Geldenhuys';
  43. rpt.Title := 'FPReport Demo 8 - Datasets';
  44. p := TFPReportPage.Create(rpt);
  45. p.Orientation := poPortrait;
  46. p.PageSize.PaperName := 'A4';
  47. { page margins }
  48. p.Margins.Left := 30;
  49. p.Margins.Top := 20;
  50. p.Margins.Right := 30;
  51. p.Margins.Bottom := 20;
  52. p.Data := lReportData;
  53. p.Font.Name := 'LiberationSans';
  54. TitleBand := TFPReportTitleBand.Create(p);
  55. TitleBand.Layout.Height := 40;
  56. Memo := TFPReportMemo.Create(TitleBand);
  57. Memo.Layout.Left := 5;
  58. Memo.Layout.Top := 0;
  59. Memo.Layout.Width := 140;
  60. Memo.Layout.Height := 15;
  61. Memo.Text := 'Dataset Demo';
  62. Memo.TextAlignment.Vertical := tlCenter;
  63. Memo.TextAlignment.Horizontal := taCentered;
  64. Memo.UseParentFont := False;
  65. Memo.Font.Color := TFPReportColor($000080);
  66. Memo.Font.Size := 24;
  67. DataBand := TFPReportDataBand.Create(p);
  68. DataBand.Layout.Height := 30;
  69. Image := TFPReportImage.Create(DataBand);
  70. Image.Layout.Top := 0;
  71. Image.Layout.Left := 10;
  72. Image.Layout.Height := 20;
  73. Image.Layout.Width := 14.8;
  74. Image.FieldName := 'Photo';
  75. Image.Stretched := True;
  76. Memo := TFPReportMemo.Create(DataBand);
  77. Memo.Layout.Left := 30;
  78. Memo.Layout.Top := 0;
  79. Memo.Layout.Width := 50;
  80. Memo.Layout.Height := 5;
  81. Memo.Text := 'Name: [name]';
  82. Memo := TFPReportMemo.Create(DataBand);
  83. Memo.Layout.Left := 30;
  84. Memo.Layout.Top := 5;
  85. Memo.Layout.Width := 80;
  86. Memo.Layout.Height := 5;
  87. Memo.Text := 'Email: [Address]';
  88. Memo := TFPReportMemo.Create(DataBand);
  89. Memo.Layout.Left := 30;
  90. Memo.Layout.Top := 10;
  91. Memo.Layout.Width := 50;
  92. Memo.Layout.Height := 5;
  93. Memo.Text := 'Age: [Age]';
  94. PageFooter := TFPReportPageFooterBand.Create(p);
  95. PageFooter.Layout.Height := 30;
  96. Memo := TFPReportMemo.Create(PageFooter);
  97. Memo.Layout.Left := 130;
  98. Memo.Layout.Top := 20;
  99. Memo.Layout.Width := 20;
  100. Memo.Layout.Height := 5;
  101. Memo.Text := 'Page [PageNo]';
  102. Memo.TextAlignment.Vertical := tlBottom;
  103. Memo.TextAlignment.Horizontal := taRightJustified;
  104. end;
  105. procedure TDatasetDemo.InitialiseData;
  106. var
  107. fields: TDbfFieldDefs;
  108. lDataSet : TDBF;
  109. begin
  110. if FileExists('test.dbf') then
  111. begin
  112. DeleteFile('test.dbf');
  113. DeleteFile('test.dbt');
  114. end;
  115. lDataSet := TDBF.Create(Self);
  116. lDataSet.TableName := 'test.dbf';
  117. // If you wanted to create a new DBF table
  118. fields := TDbfFieldDefs.Create(nil);
  119. fields.Add('Name', ftString, 50);
  120. fields.Add('Address', ftString, 150);
  121. fields.Add('Age', ftInteger);
  122. fields.Add('Photo', ftBlob);
  123. lDataSet.CreateTableEx(fields); // <== Now we have an empty db table
  124. fields.Free;
  125. lDataSet.Open;
  126. lDataSet.Insert;
  127. lDataSet.FieldByName('Name').AsString := 'Kimi Raikkonen';
  128. lDataSet.FieldByName('Address').AsString := '[email protected]';
  129. lDataSet.FieldByName('Age').AsInteger := 35;
  130. TBlobField(lDataSet.FieldByName('Photo')).LoadFromFile(ExpandFileName('pictures/man01.png'));
  131. lDataSet.Post;
  132. lDataSet.Insert;
  133. lDataSet.FieldByName('Name').AsString := 'Michael Schumacher';
  134. lDataSet.FieldByName('Address').AsString := '[email protected]';
  135. lDataSet.FieldByName('Age').AsInteger := 28;
  136. TBlobField(lDataSet.FieldByName('Photo')).LoadFromFile(ExpandFileName('pictures/man02.png'));
  137. lDataSet.Post;
  138. lDataSet.Insert;
  139. lDataSet.FieldByName('Name').AsString := 'Alain Prost';
  140. lDataSet.FieldByName('Address').AsString := '[email protected]';
  141. lDataSet.FieldByName('Age').AsInteger := 64;
  142. TBlobField(lDataSet.FieldByName('Photo')).LoadFromFile(ExpandFileName('pictures/man03.png'));
  143. lDataSet.Post;
  144. lDataSet.Insert;
  145. lDataSet.FieldByName('Name').AsString := 'Jenson Button';
  146. lDataSet.FieldByName('Address').AsString := '[email protected]';
  147. lDataSet.FieldByName('Age').AsInteger := 50;
  148. TBlobField(lDataSet.FieldByName('Photo')).LoadFromFile(ExpandFileName('pictures/man04.png'));
  149. lDataSet.Post;
  150. lDataSet.Insert;
  151. lDataSet.FieldByName('Name').AsString := 'Fernando Allonso';
  152. lDataSet.FieldByName('Address').AsString := '[email protected]';
  153. lDataSet.FieldByName('Age').AsInteger := 47;
  154. TBlobField(lDataSet.FieldByName('Photo')).LoadFromFile(ExpandFileName('pictures/man05.png'));
  155. lDataSet.Post;
  156. Dataset := lDataset;
  157. lReportData.DataSet := DataSet;
  158. end;
  159. constructor TDatasetDemo.Create(AOwner : TComponent);
  160. begin
  161. Inherited;
  162. lReportData := TFPReportDatasetData.Create(nil);
  163. end;
  164. class function TDatasetDemo.Description: string;
  165. begin
  166. Result:='Demo showing dataset support';
  167. end;
  168. destructor TDatasetDemo.Destroy;
  169. begin
  170. FreeAndNil(lReportData);
  171. FreeAndNil(DataSet);
  172. inherited Destroy;
  173. end;
  174. end.