Project ADOEMPL
Project Structure
ADOEMPL.DPR
program AdoEmpl;
uses
Forms,
AEForm in 'AEForm.pas' {AdoEmplForm};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TAdoEmplForm, AdoEmplForm);
Application.Run;
end.
AEFORM.PAS
unit AEForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, StdCtrls, Mask, DBCtrls, ExtCtrls, Grids, DBGrids, ComCtrls,
ADODB;
type
TAdoEmplForm = class(TForm)
AdoTable: TADOTable;
DataSource1: TDataSource;
ADOConnection: TADOConnection;
PageControl2: TPageControl;
TabSheet1: TTabSheet;
TabSheet3: TTabSheet;
cbLock: TCheckBox;
EditName: TEdit;
btnFind: TButton;
btnTotal: TButton;
BtnStart: TButton;
BtnCommit: TButton;
BtnRollback: TButton;
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
procedure btnTotalClick(Sender: TObject);
procedure btnFindClick(Sender: TObject);
procedure cbLockClick(Sender: TObject);
procedure AdoTableBeforeEdit(DataSet: TDataSet);
procedure BtnCommitClick(Sender: TObject);
procedure BtnRollbackClick(Sender: TObject);
procedure BtnStartClick(Sender: TObject);
private
{ Private declarations }
end;
var
AdoEmplForm: TAdoEmplForm;
implementation
{$R *.DFM}
procedure TAdoEmplForm.FormCreate(Sender: TObject);
begin
// open the new or existing table
AdoTable.Open;
end;
procedure TAdoEmplForm.btnTotalClick(Sender: TObject);
var
Bookmark: TBookmark;
Total: Real;
begin
{store the current position, crating a new bookmark}
Bookmark := AdoTable.GetBookmark;
// AdoTable.DisableControls;
AdoTable.BlockReadSize := 10;
Total := 0;
try
AdoTable.First;
while not AdoTable.EOF do
begin
Total := Total + AdoTable.FieldByName('Salary').Value;
AdoTable.Next;
end;
finally
{go back to the bookmark and destroy it}
AdoTable.GotoBookmark (Bookmark);
AdoTable.FreeBookmark (Bookmark);
// AdoTable.EnableControls;
AdoTable.BlockReadSize := 0;
end;
MessageDlg ('Sum of new salaries is ' +
Format ('%m', [Total]), mtInformation, [mbOk], 0);
end;
procedure TAdoEmplForm.btnFindClick(Sender: TObject);
begin
if not AdoTable.Locate ('LastName', EditName.Text, []) then
MessageDlg ('Name not found', mtError, [mbOk], 0);
end;
procedure TAdoEmplForm.cbLockClick(Sender: TObject);
begin
AdoTable.Close;
if not cbLock.Checked then
AdoTable.LockType := ltPessimistic
else
AdoTable.LockType := ltOptimistic;
AdoTable.Open;
end;
procedure TAdoEmplForm.AdoTableBeforeEdit(DataSet: TDataSet);
begin
// start a transaction, if not already started
if not AdoConnection.InTransaction then
BtnStartClick (Self);
end;
procedure TAdoEmplForm.BtnCommitClick(Sender: TObject);
begin
if AdoTable.State = dsEdit then
AdoTable.Post;
AdoConnection.CommitTrans;
// set buttons
BtnStart.Enabled := True;
BtnCommit.Enabled := False;
BtnRollback.Enabled := False;
end;
procedure TAdoEmplForm.BtnRollbackClick(Sender: TObject);
begin
AdoTable.Cancel;
AdoConnection.RollbackTrans;
// refresh
AdoTable.Requery;
// set buttons
BtnStart.Enabled := True;
BtnCommit.Enabled := False;
BtnRollback.Enabled := False;
end;
procedure TAdoEmplForm.BtnStartClick(Sender: TObject);
begin
AdoConnection.BeginTrans;
// set buttons
BtnStart.Enabled := False;
BtnCommit.Enabled := True;
BtnRollback.Enabled := True;
end;
end.
AEFORM.DFM
object AdoEmplForm: TAdoEmplForm
Left = 275
Top = 134
Width = 520
Height = 361
Caption = 'AdoEmpl'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object PageControl2: TPageControl
Left = 0
Top = 0
Width = 512
Height = 60
ActivePage = TabSheet1
Align = alTop
TabOrder = 0
object TabSheet1: TTabSheet
Caption = 'Main'
object cbLock: TCheckBox
Left = 331
Top = 8
Width = 61
Height = 17
Caption = '&Lock'
TabOrder = 0
OnClick = cbLockClick
end
object EditName: TEdit
Left = 200
Top = 6
Width = 121
Height = 21
TabOrder = 1
Text = 'Lee'
end
object btnFind: TButton
Left = 112
Top = 4
Width = 75
Height = 25
Caption = '&Find'
TabOrder = 2
OnClick = btnFindClick
end
object btnTotal: TButton
Left = 8
Top = 4
Width = 89
Height = 25
Caption = '&Total'
TabOrder = 3
OnClick = btnTotalClick
end
end
object TabSheet3: TTabSheet
Caption = 'Transactions'
ImageIndex = 1
object BtnStart: TButton
Left = 8
Top = 3
Width = 75
Height = 25
Caption = 'Start'
TabOrder = 0
OnClick = BtnStartClick
end
object BtnCommit: TButton
Left = 88
Top = 3
Width = 75
Height = 25
Caption = 'Commit'
Enabled = False
TabOrder = 1
OnClick = BtnCommitClick
end
object BtnRollback: TButton
Left = 168
Top = 3
Width = 75
Height = 25
Caption = 'Rollback'
Enabled = False
TabOrder = 2
OnClick = BtnRollbackClick
end
end
end
object DBGrid1: TDBGrid
Left = 0
Top = 60
Width = 512
Height = 274
Align = alClient
DataSource = DataSource1
TabOrder = 1
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'MS Sans Serif'
TitleFont.Style = []
end
object AdoTable: TADOTable
CacheSize = 50
Connection = ADOConnection
CursorLocation = clUseServer
MaxRecords = 50
BeforeEdit = AdoTableBeforeEdit
TableDirect = True
TableName = 'Employees'
Left = 40
Top = 144
end
object DataSource1: TDataSource
DataSet = AdoTable
Left = 120
Top = 88
end
object ADOConnection: TADOConnection
ConnectionString =
'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=c:\md' +
'5code\Part3\12\data\MdData.mdb;Mode=Share Deny None;Extended Pro' +
'perties="";Locale Identifier=1033;Persist Security Info=False;Je' +
't OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:' +
'Database Password="";Jet OLEDB:Engine Type=4;Jet OLEDB:Database ' +
'Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Glo' +
'bal Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet O' +
'LEDB:Create System Database=False;Jet OLEDB:Encrypt Database=Fal' +
'se;Jet OLEDB:Don''t Copy Locale on Compact=False;Jet OLEDB:Compac' +
't Without Replica Repair=False;Jet OLEDB:SFP=False'
CursorLocation = clUseServer
LoginPrompt = False
Provider = 'Microsoft.Jet.OLEDB.4.0'
Left = 40
Top = 88
end
end
|