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