Skip to content

Commit bd11790

Browse files
committed
delphi: Migrate to SQLite and remove INI config file
- Use the SQLite database connection. - Provide the sample Northwind database in the `nwind.db` file. - Remove dependency on the INI file, hardcode most configuration values. - Rename dashboard file to CountrySalesDashboard.
1 parent 5ffef65 commit bd11790

File tree

4 files changed

+30
-57
lines changed

4 files changed

+30
-57
lines changed

Delphi/ConsoleDashboards.dpr

Lines changed: 12 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,70 +5,40 @@ program ConsoleDashboards;
55
{$R *.res}
66

77
uses
8-
System.SysUtils,
9-
System.Classes,
10-
System.IniFiles,
11-
dxBackend,
12-
dxBackend.Bundled,
13-
dxBackend.ConnectionString.SQL,
14-
dxDashboard;
8+
System.SysUtils, System.Classes, dxBackend, dxBackend.Bundled,
9+
dxBackend.ConnectionString.SQL, dxDashboard;
1510

1611
procedure ExportDashboardToPdf;
1712
var
1813
AManager: TdxBackendDataConnectionManager;
1914
AConnection: TdxBackendDatabaseSQLConnection;
2015
ADashboard: TdxDashboard;
21-
2216
AStream: TMemoryStream;
23-
24-
AIni: TIniFile;
25-
26-
AParamName: string;
27-
AKeys: TStringList;
28-
I: Integer;
2917
begin
3018
TdxBackend.Instance.Start; // Start the backend
3119

3220
AManager := TdxBackendDataConnectionManager.Create(nil);
33-
AIni := TIniFile.Create('..\PDFDashboardGenerator.ini');
3421
try
35-
AConnection := TdxBackendDatabaseSQLConnection(AManager.DataConnections.
36-
Add(TdxBackendDatabaseSQLConnection));
22+
AConnection := TdxBackendDatabaseSQLConnection(AManager.DataConnections.Add(TdxBackendDatabaseSQLConnection));
3723

38-
AConnection.ClassName;
39-
AConnection.DisplayName := AIni.ReadString('Connection', 'Name', '');
40-
AConnection.ConnectionString :=
41-
AIni.ReadString('Connection', 'ConnectionString', '');
24+
// Set up SQLite database connection
25+
AConnection.DisplayName := 'NWindConnectionString';
26+
AConnection.ConnectionString := 'XpoProvider=SQLite; Data Source=..\nwind.db; Mode=ReadOnly';
4227
AConnection.Active := True;
4328

4429
ADashboard := TdxDashboard.Create(nil);
4530
try
46-
ADashboard.Layout.LoadFromFile(AIni.ReadString('Dashboard', 'LayoutFileName', ''));
47-
ADashboard.Name := 'Dashboard';
31+
ADashboard.Layout.LoadFromFile('CountrySalesDashboard.xml');
32+
ADashboard.Name := 'Country Sales';
4833

4934
ADashboard.LoadParametersFromDashboard;
50-
51-
AKeys := TStringList.Create;
52-
AIni.ReadSection('Parameters', AKeys);
53-
try
54-
for I := 0 to AKeys.Count - 1 do
55-
begin
56-
AParamName := AKeys[I];
57-
58-
if ADashboard.Parameters.ParamByName[AParamName] <> nil then
59-
ADashboard.Parameters
60-
.ParamByName[AKeys[I]]
61-
.Value := AIni.ReadString('Parameters', AParamName, '');
62-
end;
63-
ADashboard.ApplyParametersToState;
64-
finally
65-
AKeys.Free;
66-
end;
35+
ADashboard.Parameters['CountryDashboardParameter'].Value := 'USA';
36+
ADashboard.ApplyParametersToState;
6737

6838
AStream := TMemoryStream.Create;
6939
try
70-
ADashboard.ExportTo(TdxDashboardExportFormat.PDF, AStream);//probably, we can add an overload
71-
AStream.SaveToFile(AIni.ReadString('Dashboard', 'OutputFileName', ''))
40+
ADashboard.ExportTo(TdxDashboardExportFormat.PDF, AStream);
41+
AStream.SaveToFile('Sales_USA.pdf');
7242
finally
7343
AStream.Free;
7444
end;
@@ -77,14 +47,12 @@ begin
7747
end;
7848
finally
7949
AManager.Free;
80-
AIni.Free;
8150
end;
8251
end;
8352

8453
begin
8554
try
8655
ExportDashboardToPdf;
87-
{ TODO -oUser -cConsole Main : Insert code here }
8856
except
8957
on E: Exception do
9058
Writeln(E.ClassName, ': ', E.Message);

Delphi/ConsoleDashboards.res

96 Bytes
Binary file not shown.
Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,33 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<Dashboard>
3-
<Title Text="Dashboard" />
2+
<Dashboard RequestParameters="false">
3+
<Title Text="Country Sales" />
44
<DataSources>
55
<SqlDataSource Name="SQL Data Source" ComponentName="sqlDataSource1">
6-
<Connection Name="MS SQL Connection" FromAppConfig="true" />
7-
<Query Type="CustomSqlQuery" Name="CustomSqlQuery">
8-
<Parameter Name="CountryParameter" Type="DevExpress.DataAccess.Expression">(System.String)(?CountryDashboardParameter)</Parameter>
9-
<Sql>select * from [Invoices]
10-
where ([Invoices].[Country] = @CountryParameter)</Sql>
6+
<Connection Name="NWindConnectionString" FromAppConfig="true" />
7+
<Query Type="SelectQuery" Name="Invoices">
8+
<Parameter Name="CountryFilter" Type="DevExpress.DataAccess.Expression">(System.String)(?CountryDashboardParameter )</Parameter>
9+
<Tables>
10+
<Table Name="Invoices" />
11+
</Tables>
12+
<Columns>
13+
<AllColumns Table="Invoices" />
14+
</Columns>
15+
<Filter>[Invoices.Country] = ?CountryFilter</Filter>
1116
</Query>
1217
<ConnectionOptions CloseConnection="true" />
1318
<CalculatedFields>
14-
<CalculatedField Name="Date" Expression="[OrderDate] " DataType="DateTime" DataMember="CustomSqlQuery" />
15-
<CalculatedField Name="Price" Expression="[ExtendedPrice]" DataType="Double" DataMember="CustomSqlQuery" />
19+
<CalculatedField Name="Price" Expression="ToDouble( [ExtendedPrice] ) " DataType="Auto" DataMember="Invoices" />
20+
<CalculatedField Name="Calculated Field 1" Expression="ToDouble( [Invoices.ExtendedPrice] ) " DataType="Auto" />
1621
</CalculatedFields>
1722
</SqlDataSource>
1823
</DataSources>
1924
<Parameters>
2025
<Parameter Name="CountryDashboardParameter" Value="France" Visible="false" />
2126
</Parameters>
2227
<Items>
23-
<Chart ComponentName="chartDashboardItem1" Name="Chart 1" ShowCaption="false" DataSource="sqlDataSource1" DataMember="CustomSqlQuery">
28+
<Chart ComponentName="chartDashboardItem1" Name="Chart 1" ShowCaption="false" DataSource="sqlDataSource1" DataMember="Invoices">
2429
<DataItems>
25-
<Dimension DataMember="Date" DateTimeGroupInterval="MonthYear" DefaultId="DataItem1" />
30+
<Dimension DataMember="OrderDate" DateTimeGroupInterval="MonthYear" DefaultId="DataItem1" />
2631
<Measure DataMember="Price" DefaultId="DataItem0">
2732
<NumericFormat FormatType="Currency" />
2833
</Measure>
@@ -41,7 +46,7 @@ where ([Invoices].[Country] = @CountryParameter)</Sql>
4146
</Pane>
4247
</Panes>
4348
</Chart>
44-
<Card ComponentName="cardDashboardItem1" Name="Card 1" ShowCaption="false" DataSource="sqlDataSource1" DataMember="CustomSqlQuery">
49+
<Card ComponentName="cardDashboardItem1" Name="Card 1" ShowCaption="false" DataSource="sqlDataSource1" DataMember="Invoices">
4550
<DataItems>
4651
<Measure DataMember="ExtendedPrice" DefaultId="DataItem0" />
4752
<Dimension DataMember="CustomerName" DefaultId="DataItem1" />
@@ -65,7 +70,7 @@ where ([Invoices].[Country] = @CountryParameter)</Sql>
6570
</LayoutTemplate>
6671
</Card>
6772
</Card>
68-
<Grid ComponentName="gridDashboardItem1" Name="Grid 1" ShowCaption="false" DataSource="sqlDataSource1" DataMember="CustomSqlQuery">
73+
<Grid ComponentName="gridDashboardItem1" Name="Grid 1" ShowCaption="false" DataSource="sqlDataSource1" DataMember="Invoices">
6974
<DataItems>
7075
<Dimension DataMember="Address" DefaultId="DataItem0" />
7176
<Dimension DataMember="City" DefaultId="DataItem1" />

nwind.db

644 KB
Binary file not shown.

0 commit comments

Comments
 (0)