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