I created this catalog entry and reporting database system for a
library of about 15,000 volumes. It included data entry, browsing
and reporting, and was written using Borland's Delphi (an object-oriented
Pascal). Delphi is my favorite "visual" programming environment for windows
so far. It is faster and more flexible than Visual Basic--compiled,
and truly object-oriented. It is simpler to use than Visual C++,
but is as flexible and full-featured for production programming.
Shown below is an editing screen, browsing list and report excerpt.
![]() |
![]() |
Delphi can connect convenient database widgets to its own Paradox databases,
or to Oracle, Sybase, Access, et. al., through ODBC. The reporting
facilities generate SQL and/or allow manual SQL edits. The report
screen for this system allows the user to select the order and report range,
as well as a narrow or wide format, and can display results on-screen or
print them.
![]() |
Below is some of the code for the editing form. Notice the "interface",
"implementation" and "uses <unit>" constructs, which avoid the need
to include and re-compile header files, as in C++.
unit edit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, DB, DBTables, StdCtrls, ExtCtrls, DBCtrls, Mask;
type
TfrmEdit = class(TForm) //Main form--edit window.
srcBook: TDataSource;
srcSubj: TDataSource;
tblBook: TTable;
tblSubj: TTable;
Label1: TLabel;
rgIndex: TRadioGroup;
btnBrowse: TButton;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
dbeBN: TDBEdit;
dbeAuth: TDBEdit;
dbeTtl: TDBEdit;
DBNavigator1: TDBNavigator;
lblSubj: TLabel;
btnAuth: TButton;
Panel1: TPanel;
dlcSubC: TDBLookupComboBox;
dlcSubj: TDBLookupComboBox;
btnClose: TButton;
btnSubj: TButton;
dlcTyp: TDBLookupComboBox;
Label5: TLabel;
tblTyp: TTable;
srcTyp: TDataSource;
btnTyp: TButton;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
dbeCopy: TDBEdit;
dbeVol: TDBEdit;
dbePub: TDBEdit;
dbeYear: TDBEdit;
Label10: TLabel;
dbePgs: TDBEdit;
btnNew: TButton;
btnCancel: TButton;
Label11: TLabel;
edtSearch: TEdit;
btnDelete: TButton;
Label12: TLabel;
DBEdit1: TDBEdit;
edtState: TEdit;
Label13: TLabel;
lblNrecs: TEdit;
Button1: TButton;
DBMemo1: TDBMemo;
Label14: TLabel;
procedure btnCloseClick(Sender: TObject);
procedure rgIndexClick(Sender: TObject);
procedure tblBookBeforeInsert(DataSet: TDataSet);
procedure btnNewClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnBrowseClick(Sender: TObject);
procedure srcBookDataChange(Sender: TObject; Field: TField);
procedure btnAuthClick(Sender: TObject);
procedure edtSearchChange(Sender: TObject);
procedure edtSearchKeyPress(Sender: TObject; var Key: Char);
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
procedure btnSubjClick(Sender: TObject);
procedure btnTypClick(Sender: TObject);
procedure tblBookAfterOpen(DataSet: TDataSet);
procedure tblBookAfterDelete(DataSet: TDataSet);
procedure tblBookAfterPost(DataSet: TDataSet);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmEdit: TfrmEdit;
implementation
uses List, Author, Subject, typ, rpt;
{$R *.DFM}
procedure TfrmEdit.btnCloseClick(Sender: TObject);
begin
frmEdit.close;
end;
procedure TfrmEdit.rgIndexClick(Sender: TObject);
begin
case rgIndex.ItemIndex of //Set search index from radio button
0: tblBook.IndexName:='';
1: tblBook.IndexName:='Auth';
2: tblBook.IndexName:='Ttl';
3: tblBook.IndexName:='Subj';
4: tblBook.IndexName:='ISBN';
end;
end;
procedure TfrmEdit.tblBookBeforeInsert(DataSet: TDataSet);
begin
edtSearch.Text:='';
end;
procedure TfrmEdit.btnNewClick(Sender: TObject);
begin
tblBook.Insert;
dbeBN.SetFocus;
end;
procedure TfrmEdit.btnCancelClick(Sender: TObject);
begin
tblBook.Cancel;
end;
procedure TfrmEdit.btnDeleteClick(Sender: TObject);
begin
if MessageDlg('Delete This Record?',mtConfirmation,mbOKCancel,0)=mrOK then
tblBook.Delete;
end;
procedure TfrmEdit.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if tblBook.Modified then tblBook.Post;
end;
procedure TfrmEdit.btnBrowseClick(Sender: TObject);
begin
Hide;
frmList.rgIndex.ItemIndex:=rgIndex.ItemIndex;
frmList.WindowState:=wsNormal;
srcBook.Enabled:=False; //Needed for Delphi bug.
frmList.Show;
srcBook.Enabled:=True; //Ditto/
frmList.dbgBooks.SetFocus;
frmList.edtSearch.text:=''; edtSearch.text:='';
//if frmList.ShowModal=mrAbort then close;
//rgIndex.ItemIndex:=frmList.rgIndex.ItemIndex;
//show;
end;
procedure TfrmEdit.srcBookDataChange(Sender: TObject; Field: TField);
begin
case tblBook.State of
dsInsert: edtState.text:='Insert';
dsBrowse: edtState.text:='Browse';
dsEdit: edtState.text:='Edit';
else edtState.text:='Other';
end;
if tblBook.Modified then edtState.text:=
edtState.text+' M';
end;
procedure TfrmEdit.btnAuthClick(Sender: TObject);
begin
frmAuth.edtSearch.text:=dbeAuth.text;
if frmAuth.ShowModal<>mrCancel then begin
if tblBook.State=dsBrowse then tblBook.Edit;
dbeAuth.Field.AsString:=
frmAuth.dbgAuth.SelectedField.Value;
dbeTtl.SetFocus;
end
else dbeAuth.SetFocus;
end;
procedure TfrmEdit.edtSearchChange(Sender: TObject);
var v, code: integer;
begin
if ActiveControl=edtSearch then begin //Respond only to user-entered changes
if rgIndex.ItemIndex=0 then begin
val(edtSearch.Text,v,code);
if code<>0 then exit; //Ignore invalid book number
end;
tblBook.FindNearest([edtSearch.Text]);
end;
end;
procedure TfrmEdit.edtSearchKeyPress(Sender: TObject; var Key: Char);
begin
if key=chr(13) then edtSearchChange(Sender); //Trigger search on Enter, too
end;
procedure TfrmEdit.DBNavigator1Click(Sender: TObject;
Button: TNavigateBtn);
begin
//edtSearch.Text:='';
end;
procedure TfrmEdit.btnSubjClick(Sender: TObject);
begin
Hide;
frmSubj.ShowModal;
Show;
end;
procedure TfrmEdit.btnTypClick(Sender: TObject);
begin
Hide;
frmTyp.ShowModal;
Show;
end;
procedure TfrmEdit.tblBookAfterOpen(DataSet: TDataSet);
begin
lblNrecs.Text:=IntToStr(tblBook.RecordCount);
end;
procedure TfrmEdit.tblBookAfterDelete(DataSet: TDataSet);
begin
lblNrecs.Text:=IntToStr(tblBook.RecordCount);
end;
procedure TfrmEdit.tblBookAfterPost(DataSet: TDataSet);
begin
lblNrecs.Text:=IntToStr(tblBook.RecordCount);
end;
procedure TfrmEdit.Button1Click(Sender: TObject);
begin
Hide;
frmRpt.ShowModal;
Show;
end;
end.
|