Delphi 7 - Tutorial - Creating A CLX Database Application
Delphi 7 - Tutorial - Creating A CLX Database Application
Database Application
Borland®
™
Delphi 7
for Windows™
Borland Software Corporation
100 Enterprise Way, Scotts Valley, CA 95066-3249
www.borland.com
COPYRIGHT © 2001–2002 Borland Software Corporation. All rights reserved. All Borland brand and product names
are trademarks or registered trademarks of Borland Software Corporation in the United States and other countries.
All other marks are the property of their respective owners.
D7-DB-0802
Contents
Creating a CLX database application
Overview of database architecture. . . . . . . . . 1 Displaying a title and an image . . . . . . . . . . 12
Creating a new project. . . . . . . . . . . . . . . . 2 Writing an event handler. . . . . . . . . . . . . . 13
Setting up data access components . . . . . . . . 3 Writing the Update Now! command
Setting up the database connection. . . . . . . 3 event handler. . . . . . . . . . . . . . . . . . 13
Setting up the unidirectional dataset . . . . . . 5 Writing the Exit command event handler . . 14
Setting up the provider, client dataset, Writing the FormClose event handler. . . . . 15
and data source . . . . . . . . . . . . . . . . . 5
Designing the user interface . . . . . . . . . . . . 6 Index
Creating the grid and navigation bar . . . . . 6
Adding support for a menu . . . . . . . . . . . 8
Adding a menu . . . . . . . . . . . . . . . . . . 10
Adding a button . . . . . . . . . . . . . . . . . 11
iii
iv
Creating a CLX database application
Chapter1
1
This tutorial guides you through the creation of a cross-platform application that lets
you view and update a sample employee database. Cross-platform applications use
CLX, the Borland Component Library for Cross-Platform. Designed to compile and
run on different platforms, CLX applications require a minimum of changes between
Windows and Linux ports.
This tutorial assumes you are familiar with Windows and have read the introduction
to Delphi programming and the IDE in the Quick Start.
Note This tutorial requires the Professional or Enterprise editions of Delphi, which include
database components. You must also have InterBase installed to successfully
complete this tutorial.
fetches data directly from the database. Finally, the connection component
establishes a connection to the database. Each type of unidirectional dataset uses a
different type of connection component.
Database application
Data module
UI
Data source Client dataset
Connection Unidirectional
Provider
component dataset
Database server
2 Tutorial
Setting up data access components
You use the Connection Editor to select a connection configuration for the
TSQLConnection component or edit the connections stored in the
dbxconnections.ini file. Any changes you make in the dialog are written to that file
when you click OK. In addition, when you click OK, the selected connection is
assigned as the value of the SQL Connection component’s ConnectionName
property.
5 In the Connection Editor, specify the pathname of the database file called
employee.gdb on your system. In this tutorial you will connect to a sample
InterBase database, employee.gdb, that is provided with Delphi. By default, the
InterBase installation places employee.gdb in C:\Program Files\Common Files\
Borland Shared\Data.
6 Check the User_Name and Password fields for acceptable values. If you have not
altered the default values, you do not need to change the fields. If database access
is administered by someone else, you may need to get a username and password
to access the database.
7 When you are done checking and editing the fields, click OK to close the
Connection Editor and save your changes.
These changes are written to the dbxconnections.ini file and the selected
connection is assigned as the value of the SQLConnection component’s
ConnectionName property
Tip If you need additional help while using the Connection Editor, click the Help
button.
8 Choose File|Save All to save your project.
4 Tutorial
Setting up data access components
A data source connects the client dataset with data-aware controls. Each data-aware
control must be associated with a data source component to have data to display and
manipulate. Similarly, all datasets must be associated with a data source component
for their data to be displayed and manipulated in data-aware controls on a form.
To add the data source:
1 From the Data Access page, drop a TDataSource component to the right of the
TClientDataSet component.
2 Set the data source’s DataSet property to ClientDataSet1.
3 Choose File|Save All to save the project.
So far, you have added the nonvisual database infrastructure to your application.
Next, you need to design the user interface.
6 Tutorial
Designing the user interface
4 Set the grid’s DataSource property to DataSource1. When you do this, the grid is
populated with data from the employee database. If the grid doesn’t display data,
make sure you’ve correctly set the properties of all the objects on the form, as
explained in previous instructions.
So far your application should look like this:
The DBGrid control displays data at design time while you are working in the IDE.
This allows you to verify that you’ve connected to the database correctly. You
cannot, however, edit the data at design time; to edit the data in the table, you’ll
have to run the application.
5 From the Data Controls page, drop a TDBNavigator control onto the form. A
database navigator is a tool for moving through the data in a dataset (using next
and previous arrows, for example) and performing operations on the data.
6 Set the navigator bar’s DataSource property to DataSource1 so the navigator is
looking at the data in the client dataset.
7 Set the navigator bar’s ShowHint property to True. (Setting ShowHint to True allows
Help hints to appear when the cursor is positioned over each of the items on the
navigator bar at runtime.)
8 Choose File|Save All to save the project.
9 Press F9 to compile and run the project. You can also run the project by clicking the
Run button on the Debug toolbar, or by choosing Run from the Run menu.
When you run your project, the program opens in a window like the one you
designed on the form. You can test the navigation bar with the employee database.
For example, you can move from record to record using the arrow commands, add
records using the + command, and delete records using the - command.
Tip If you encounter an error while testing an early version of your application, choose
Run|Program Reset to return to the design-time view.
8 Tutorial
Designing the user interface
5 Right-click the Action List editor and choose New Standard Action. The Standard
Actions list box appears.
6 Select the following actions: TEditCopy, TEditCut, and TEditPaste. (Use the Ctrl key
to select multiple items.) Then click OK.
7 Right-click on the Action List editor and choose New Action to add another action
(not provided by default). Action1 is added by default. In the Object Inspector, set
its Caption property to Update Now!
This same action will be used on a menu and a button. Later on, we’ll add an event
handler so it will update the database.
8 Click (No Category), right-click and choose New Action to add another action.
Action2 is added. Set its Caption property to E&xit.
9 Click the X (in the upper right corner) to close the Action List editor.
You’ve added three standard actions plus two other actions that we’ll connect to
event handlers later.
10 Choose File|Save All to save the project.
Adding a menu
In this section, you’ll add a main menu bar with two drop-down menus—File and
Edit—and you’ll add menu items to each one using the actions in the action list.
1 From the Standard page of the Component palette, drop a TMainMenu component
onto the form. Drag it next to the other nonvisual components.
2 Set the main menu’s Images property to ImageList1 to associate the image list with
the menu items.
3 Double-click the menu component to display the Menu Designer.
4 Type &File to set the Caption property of the first top-level menu item and press
Enter.
5 Click the File menu and select the blank menu item that appears under it. Set the
blank menu item’s Action property to Action2. An Exit menu item appears under
the File menu.
6 Click the second top-level menu item (to the right of File). Set its Caption property
to &Edit and press Enter. Click the Edit menu and select the blank menu item that
appears under it.
7 In the Object Inspector, set the Action property to EditCut1 and press Enter. The
item’s caption is automatically set to Cut and a default cut bitmap appears on the
menu.
10 Tutorial
Designing the user interface
8 Select the blank menu item (under Cut) and set its Action property to EditCopy1 (a
default copy bitmap appears on the menu).
9 Select the blank menu item (under Copy) and set its Action property to EditPaste1 (a
default paste bitmap appears on the menu).
10 Select the blank menu item (under Paste) and set its Caption property to a hyphen
(-) to create a divider line in the menu. Press Enter.
11 Select the blank menu item (under the divider line) and set its Action property to
Action1. The menu item displays Update Now!
12 Click the X to close the Menu Designer.
13 Choose File|Save All to save the project.
14 Press F9 or Run on the toolbar to run your program and see how it looks.
Adding a button
This section describes how to add an Update Now button to the application. This
button is used to apply any edits that a user makes to the database, such as editing
records, adding new records, or deleting records.
To add a button:
1 From the Standard page of the Component palette, drop a TButton onto the form.
(Select the component then click the form next to the navigation bar.)
2 Set the button’s Action property to Action1.
The button’s caption changes to Update Now! When you run the application, it
will be grayed out until an event handler is added to make it work.
12 Tutorial
Writing an event handler
9 Size the default image area to the size of the picture. Place the image next to the
label.
end;
Right where the cursor is positioned (between begin and end), type:
if ClientDataSet1.State in [dsEdit, dsInsert] then ClientDataSet1.Post;
ClientDataSet1.ApplyUpdates(-1);
This event handler first checks to see what state the database is in. When you move
off a changed record, it is automatically posted. But if you don’t move off a changed
record, the database remains in edit or insert mode. The if statement posts any data
that may have been changed but was not passed to the client dataset. The next
statement applies updates held in the client dataset to the database.
Note Changes to the data are not automatically posted to the database when using
dbExpress. You need to call the ApplyUpdates method to write all updated, inserted,
and deleted records from the client dataset to the database.
end;
Right where the cursor is positioned (between begin and end), type:
Close;
This event handler will close the application when the File|Exit command on the
menu is used.
4 Close the Action List editor.
5 Choose File|Save All to save the project.
14 Tutorial
Writing an event handler
end;
Right where the cursor is positioned (between begin and end), type:
Action := caFree;
if ClientDataSet1.State in [dsEdit, dsInsert] then
ClientDataSet1.Post;
if ClientDataSet1.ChangeCount> 0 then
begin
Option := Application.MessageBox(
'You have pending updates. Do you want to write them to the database?',
'Pending Updates',[smbYes, smbNo, smbCancel], smsWarning, smbYes);
case Option of
smbYes: ClientDataSet1.ApplyUpdates(-1);
smbCancel: Action := caNone;
end;
end;
This event handler checks the state of the database. If changes are pending, they
are posted to the client dataset where the change count is increased. Then before
closing the application, a message box is displayed that asks how to handle the
changes. The reply options are Yes, No, or Cancel. Replying Yes applies updates to
the database; No closes the application without changing the database; and Cancel
cancels the exit but does not cancel the changes to the database and leaves the
application still running.
4 You need to declare the variable used within the procedure. On a line between
procedure and begin type:
var
Option: TMessageButton;
5 Check that the whole procedure looks like this:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
Option: TMessageButton;
begin
Action := caFree;
if ClientDataSet1.State in [dsEdit, dsInsert] then
ClientDataSet1.Post;
if ClientDataSet1.ChangeCount> 0 then
begin
Option := Application.MessageBox(
'You have pending updates. Do you want to write them to the database?',
'Pending Updates',[smbYes, smbNo, smbCancel], smsWarning, smbYes);
case Option of
smbYes: ClientDataSet1.ApplyUpdates(-1);
smbCancel: Action := caNone;
end;
end;
end;
6 To finish up, choose File|Save All to save the project. Then press F9 to run the
application.
Tip Fix any errors that occur by double-clicking the error message to go to the code in
question or by pressing F1 for Help on the message.
That’s it! You can try out the application to see how it works. When you want to exit
the program, you can use the fully functional File|Exit command.
16 Tutorial
Index
A DataSource component 6
DBGrid component 6
ActionList component 8 DBNavigator component 7
adding
a grid to an application 6 E
a title to an application 12
an image to an application 12 employee.gdb sample database 4
database connection to an application 3 event handlers, writing 13 to 16
main menu to an application 10 example program 1 to 16
applying edits to database 11
architecture, database 1 G
B graphics, displaying 12
grid, adding to an application 6
Button component 11
button, adding Update Now! 11
I
C icons, adding to an application 12
Image component 12
ClientDataSet component 5 ImageList component 8
compiling programs 8
components
ActionList 8 L
Button 11 Label component 12
ClientDataSet 5
DataSetProvider 5
DataSource 6 M
DBGrid 6 MainMenu component 10
DBNavigator 7 menu, adding to an application 10
Image 12
ImageList 8
Label 12 N
MainMenu 10 navigating data in a dataset 7
nonvisual 3 nonvisual components 3
SQLConnection 3
SQLDataSet 5
creating a project 2 P
Panel component 12
D pictures, displaying 12
project
database applications creating 2
accessing 3 to 4 running 8
overview 1
database example 1 to 16
database user name and password 4 R
database, sample 4 Run button 8
DataSetProvider component 5 running applications 8
datasets
client 5
unidirectional 5
Index v
S U
sample database 4 unidirectional dataset 5
SQLConnection component 3 Update Now! button 11
SQLDataSet component 5 updating a database 11
T W
tutorial 1 to 16 writing event handlers 13 to 16
vi Tutorial