ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/examples/local-employeedb/ConsoleModeExample.lpr
Revision: 45
Committed: Tue Dec 6 10:33:46 2016 UTC (7 years, 11 months ago) by tony
File size: 5065 byte(s)
Log Message:
Committing updates for Release R2-0-0

File Contents

# User Rev Content
1 tony 37 program ConsoleModeExample;
2    
3     {
4     Example Program to demonstrate console mode IBLocal Support.
5    
6     Requires Firebird Embedded Server - see readme.txt
7    
8     Compile and run the program at the command line console. No
9     command line parameters are necessary. Local Database is
10     created in default location as "employee2.fdb".
11    
12     }
13    
14     {$mode objfpc}{$H+}
15    
16     uses
17     {$IFDEF UNIX}{$IFDEF UseCThreads}
18     cthreads,
19     {$ENDIF}{$ENDIF}
20     Classes, SysUtils, CustApp
21     { you can add units after this }
22     ,IBDatabase, IBQuery, IBCMLocalDBSupport, IBSQL;
23    
24     const
25     sqlExample =
26     'with recursive Depts As ( '+
27     'Select DEPT_NO, DEPARTMENT, HEAD_DEPT, cast(DEPARTMENT as VarChar(256)) as DEPT_PATH,'+
28     'cast(DEPT_NO as VarChar(64)) as DEPT_KEY_PATH '+
29     'From DEPARTMENT Where HEAD_DEPT is NULL '+
30     'UNION ALL '+
31 tony 45 'Select D.DEPT_NO, D.DEPARTMENT, D.HEAD_DEPT, Depts.DEPT_PATH || '' / '' || D.DEPARTMENT as DEPT_PATH,'+
32     'Depts.DEPT_KEY_PATH || '';'' || D.DEPT_NO as DEPT_KEY_PATH '+
33     'From DEPARTMENT D '+
34     'JOIN Depts On D.HEAD_DEPT = Depts.DEPT_NO '+
35 tony 37 ')'+
36    
37     'Select First 2 A.EMP_NO, A.FIRST_NAME, A.LAST_NAME, A.PHONE_EXT, A.HIRE_DATE, A.DEPT_NO, A.JOB_CODE,'+
38     'A.JOB_GRADE, A.JOB_COUNTRY, A.SALARY, A.FULL_NAME, D.DEPT_PATH, D.DEPT_KEY_PATH '+
39     'From EMPLOYEE A '+
40     'JOIN Depts D On D.DEPT_NO = A.DEPT_NO';
41    
42     type
43    
44     { TMyApplication }
45    
46     TMyApplication = class(TCustomApplication)
47     private
48     FIBDatabase: TIBDatabase;
49     FIBTransaction: TIBTransaction;
50     FLocalDB: TIBCMLocalDBSupport;
51     procedure DoQuery;
52     procedure HandleGetDBVersionNo(Sender: TObject; var VersionNo: integer);
53     procedure HandleLogMessage(Sender: TObject; Msg: string);
54     protected
55     procedure DoRun; override;
56     public
57     constructor Create(TheOwner: TComponent); override;
58     procedure WriteHelp; virtual;
59     end;
60    
61     { TMyApplication }
62    
63     procedure TMyApplication.DoQuery;
64     var i, rowno: integer;
65     begin
66     with TIBQuery.Create(self) do
67     try
68     Database := FIBDatabase;
69 tony 45 AllowAutoActivateTransaction := true;
70 tony 37 SQL.Text := sqlExample;
71     Active := true;
72     rowno := 1;
73     while not EOF do
74     begin
75     writeln('Record No. ',rowno);
76     Inc(rowno);
77     writeln;
78     for i := 0 to FieldCount - 1 do
79     begin
80     writeln(Fields[i].FieldName + ': ',Fields[i].AsString);
81     end;
82     writeln;
83     next;
84     end;
85     finally
86     Free;
87     end;
88     end;
89    
90     procedure TMyApplication.HandleGetDBVersionNo(Sender: TObject;
91     var VersionNo: integer);
92     begin
93     VersionNo := 0;
94 tony 45 FIBTransaction.Active := true;
95 tony 37 try
96     with TIBSQL.Create(nil) do
97     try
98     Database := FIBDatabase;
99     Transaction := FIBTransaction;
100     SQL.Text := 'Select * From RDB$RELATIONS Where RDB$RELATION_NAME = ''DBVERSIONINFO''';
101     ExecQuery;
102     try
103     if EOF then Exit;
104     finally
105     Close;
106     end;
107     finally
108     Free
109     end;
110    
111     with TIBSQL.Create(nil) do
112     try
113     Database := FIBDatabase;
114     Transaction := FIBTransaction;
115     SQL.Text := 'Select VersionNo From DBVersionInfo';
116     ExecQuery;
117     try
118     VersionNo := FieldByName('VersionNo').AsInteger;
119     finally
120     Close;
121     end;
122     finally
123     Free;
124     end;
125     finally
126     FIBTransaction.Commit;
127     end;
128     end;
129    
130     procedure TMyApplication.HandleLogMessage(Sender: TObject; Msg: string);
131     begin
132     writeln(stderr,Msg);
133     end;
134    
135     procedure TMyApplication.DoRun;
136     var
137     ErrorMsg: String;
138     begin
139     // quick check parameters
140     ErrorMsg:=CheckOptions('h','help');
141     if ErrorMsg<>'' then begin
142     ShowException(Exception.Create(ErrorMsg));
143     Terminate;
144     Exit;
145     end;
146    
147     writeln(stderr,Title);
148    
149     // parse parameters
150     if HasOption('h','help') then begin
151     WriteHelp;
152     Terminate;
153     Exit;
154     end;
155    
156     { add your program here }
157     DoQuery;
158    
159     // stop program loop
160     Terminate;
161     end;
162    
163     constructor TMyApplication.Create(TheOwner: TComponent);
164     begin
165     inherited Create(TheOwner);
166     StopOnException:=True;
167     { In console Mode the application should own the database
168     - ensures centralised exception handling }
169     FIBDatabase := TIBDatabase.Create(self);
170     FIBDatabase.LoginPrompt := false;
171     FIBTransaction := TIBTransaction.Create(self);
172     FIBDatabase.DatabaseName := 'employee';
173     FIBDatabase.Params.Add('lc_ctype=UTF8');
174     FIBTransaction.DefaultDatabase := FIBDatabase;
175     FIBTransaction.Params.Add('concurrency');
176     FIBTransaction.Params.Add('wait');
177     FLocalDB := TIBCMLocalDBSupport.Create(self);
178     FLocalDB.Database := FIBDatabase;
179     FLocalDB.DatabaseName := 'employee2.fdb';
180     FLocalDB.EmptyDBArchive := 'employee.gbk';
181     FLocalDB.VendorName := 'MWA Software';
182     FLocalDB.OnGetDBVersionNo := @HandleGetDBVersionNo;
183     FLocalDB.OnLogMessage := @HandleLogMessage;
184     FLocalDB.RequiredVersionNo := 2;
185     end;
186    
187     procedure TMyApplication.WriteHelp;
188     begin
189     writeln(stderr,'Usage: ',ExtractFileName(ExeName),' <options>');
190     writeln(stderr,'Options:');
191     writeln(stderr,'-h show this information');
192     end;
193    
194     var
195     Application: TMyApplication;
196     begin
197     Application:=TMyApplication.Create(nil);
198     Application.Title:='Console Mode and TIBLocalSupport';
199     Application.Run;
200     Application.Free;
201     end.
202