ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/examples/employee/unit1.lfm
(Generate patch)

Comparing ibx/trunk/examples/employee/unit1.lfm (file contents):
Revision 7 by tony, Sun Aug 5 18:28:19 2012 UTC vs.
Revision 263 by tony, Thu Dec 6 15:55:01 2018 UTC

# Line 1 | Line 1
1   object Form1: TForm1
2 <  Left = 461
3 <  Height = 454
4 <  Top = 312
5 <  Width = 743
6 <  Caption = 'Form1'
7 <  ClientHeight = 454
8 <  ClientWidth = 743
2 >  Left = 480
3 >  Height = 482
4 >  Top = 407
5 >  Width = 932
6 >  Caption = 'Employee List'
7 >  ClientHeight = 482
8 >  ClientWidth = 932
9 >  DefaultMonitor = dmPrimary
10    OnClose = FormClose
11    OnShow = FormShow
12 <  LCLVersion = '0.9.30.1'
13 <  object DBGrid1: TDBGrid
13 <    Left = 8
14 <    Height = 375
15 <    Top = 24
16 <    Width = 632
17 <    Color = clWindow
18 <    Columns = <    
19 <      item
20 <        Title.Alignment = taCenter
21 <        Title.Caption = 'Last Name'
22 <        Width = 150
23 <        FieldName = 'LAST_NAME'
24 <      end    
25 <      item
26 <        Title.Alignment = taCenter
27 <        Title.Caption = 'First Name'
28 <        Width = 150
29 <        FieldName = 'FIRST_NAME'
30 <      end    
31 <      item
32 <        Title.Alignment = taCenter
33 <        Title.Caption = 'Employee No.'
34 <        Width = 100
35 <        FieldName = 'EMP_NO'
36 <      end    
37 <      item
38 <        Alignment = taCenter
39 <        Title.Alignment = taCenter
40 <        Title.Caption = 'Started'
41 <        Width = 80
42 <        FieldName = 'HIRE_DATE'
43 <      end    
44 <      item
45 <        Title.Alignment = taCenter
46 <        Title.Caption = 'Salary'
47 <        Width = 100
48 <        FieldName = 'SALARY'
49 <      end>
50 <    DataSource = Datasource1
51 <    TabOrder = 0
52 <    OnDblClick = DBGrid1DblClick
53 <  end
12 >  Position = poMainFormCenter
13 >  LCLVersion = '2.0.0.2'
14    object Button1: TButton
15 <    Left = 656
15 >    Left = 845
16      Height = 25
17 <    Top = 24
17 >    Top = 48
18      Width = 75
19      Action = AddEmployee
20 <    TabOrder = 1
20 >    Anchors = [akTop, akRight]
21 >    TabOrder = 0
22    end
23    object Button2: TButton
24 <    Left = 656
24 >    Left = 845
25      Height = 25
26 <    Top = 62
26 >    Top = 86
27      Width = 75
28      Action = EditEmployee
29 <    TabOrder = 2
29 >    Anchors = [akTop, akRight]
30 >    TabOrder = 1
31    end
32    object Button3: TButton
33 <    Left = 656
33 >    Left = 845
34      Height = 25
35 <    Top = 101
35 >    Top = 125
36      Width = 75
37      Action = DeleteEmployee
38 +    Anchors = [akTop, akRight]
39 +    TabOrder = 2
40 +  end
41 +  object Label1: TLabel
42 +    Left = 17
43 +    Height = 14
44 +    Top = 14
45 +    Width = 87
46 +    Caption = 'Started Before'
47 +    ParentColor = False
48 +  end
49 +  object BeforeDate: TDateEdit
50 +    Left = 112
51 +    Height = 24
52 +    Top = 8
53 +    Width = 80
54 +    CalendarDisplaySettings = [dsShowHeadings, dsShowDayNames]
55 +    DateOrder = doNone
56 +    ButtonWidth = 23
57 +    NumGlyphs = 1
58 +    MaxLength = 0
59 +    OnChange = BeforeDateChange
60      TabOrder = 3
61    end
62 <  object Button4: TButton
63 <    Left = 488
64 <    Height = 25
65 <    Top = 416
66 <    Width = 75
67 <    Action = SaveChanges
62 >  object Label2: TLabel
63 >    Left = 241
64 >    Height = 14
65 >    Top = 14
66 >    Width = 78
67 >    Caption = 'Started After'
68 >    ParentColor = False
69 >  end
70 >  object AfterDate: TDateEdit
71 >    Left = 333
72 >    Height = 24
73 >    Top = 8
74 >    Width = 80
75 >    CalendarDisplaySettings = [dsShowHeadings, dsShowDayNames]
76 >    DateOrder = doNone
77 >    ButtonWidth = 23
78 >    NumGlyphs = 1
79 >    MaxLength = 0
80 >    OnChange = BeforeDateChange
81      TabOrder = 4
82    end
83 <  object Button5: TButton
84 <    Left = 568
85 <    Height = 25
86 <    Top = 416
87 <    Width = 75
88 <    Action = CancelChanges
83 >  object Panel1: TPanel
84 >    Left = 12
85 >    Height = 434
86 >    Top = 42
87 >    Width = 810
88 >    Anchors = [akTop, akLeft, akRight, akBottom]
89 >    BevelOuter = bvNone
90 >    ClientHeight = 434
91 >    ClientWidth = 810
92 >    Color = clBackground
93 >    ParentColor = False
94      TabOrder = 5
95 +    object IBDynamicGrid1: TIBDynamicGrid
96 +      Left = 0
97 +      Height = 384
98 +      Top = 0
99 +      Width = 810
100 +      Align = alClient
101 +      Color = clWindow
102 +      Columns = <      
103 +        item
104 +          Title.Alignment = taCenter
105 +          Title.Caption = 'Last Name'
106 +          Width = 100
107 +          FieldName = 'LAST_NAME'
108 +          AutoSizeColumn = False
109 +          InitialSortColumn = False
110 +          DBLookupProperties.ItemHeight = 0
111 +          DBLookupProperties.ItemWidth = 0
112 +          DBLookupProperties.AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
113 +        end      
114 +        item
115 +          Title.Alignment = taCenter
116 +          Title.Caption = 'First Name'
117 +          Width = 100
118 +          FieldName = 'FIRST_NAME'
119 +          AutoSizeColumn = False
120 +          InitialSortColumn = False
121 +          DBLookupProperties.ItemHeight = 0
122 +          DBLookupProperties.ItemWidth = 0
123 +          DBLookupProperties.AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
124 +        end      
125 +        item
126 +          Alignment = taCenter
127 +          Title.Alignment = taCenter
128 +          Title.Caption = 'Emp No.'
129 +          Width = 60
130 +          FieldName = 'EMP_NO'
131 +          AutoSizeColumn = False
132 +          InitialSortColumn = False
133 +          DBLookupProperties.ItemHeight = 0
134 +          DBLookupProperties.ItemWidth = 0
135 +          DBLookupProperties.AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
136 +        end      
137 +        item
138 +          ReadOnly = True
139 +          Title.Alignment = taCenter
140 +          Title.Caption = 'Dept'
141 +          Width = 200
142 +          FieldName = 'DEPT_PATH'
143 +          AutoSizeColumn = True
144 +          InitialSortColumn = False
145 +          DBLookupProperties.ItemHeight = 0
146 +          DBLookupProperties.ItemWidth = 0
147 +          DBLookupProperties.AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
148 +        end      
149 +        item
150 +          ButtonStyle = cbsPickList
151 +          Title.Alignment = taCenter
152 +          Title.Caption = 'Located'
153 +          Width = 100
154 +          FieldName = 'JOB_COUNTRY'
155 +          AutoSizeColumn = False
156 +          InitialSortColumn = False
157 +          DBLookupProperties.ItemHeight = 0
158 +          DBLookupProperties.ItemWidth = 0
159 +          DBLookupProperties.ListSource = CountrySource
160 +          DBLookupProperties.ListField = 'COUNTRY'
161 +          DBLookupProperties.AutoInsert = False
162 +          DBLookupProperties.AutoComplete = False
163 +        end      
164 +        item
165 +          Title.Alignment = taCenter
166 +          Title.Caption = 'Started'
167 +          Width = 80
168 +          FieldName = 'HIRE_DATE'
169 +          AutoSizeColumn = False
170 +          InitialSortColumn = False
171 +          DBLookupProperties.ItemHeight = 0
172 +          DBLookupProperties.ItemWidth = 0
173 +          DBLookupProperties.AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
174 +        end      
175 +        item
176 +          Title.Alignment = taCenter
177 +          Title.Caption = 'Salary'
178 +          Width = 120
179 +          FieldName = 'SALARY'
180 +          ColumnTotalsControl = DBText1
181 +          AutoSizeColumn = False
182 +          InitialSortColumn = False
183 +          DBLookupProperties.ItemHeight = 0
184 +          DBLookupProperties.ItemWidth = 0
185 +          DBLookupProperties.AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
186 +        end>
187 +      DataSource = EmployeeSource
188 +      Scrollbars = ssAutoBoth
189 +      TabOrder = 0
190 +      EditorPanel = EmployeeEditorPanel
191 +      ExpandEditorPanelBelowRow = False
192 +      Descending = False
193 +      EditorBorderStyle = bsSingle
194 +      DefaultPositionAtEnd = False
195 +      IndexFieldNames = 'EMP_NO'
196 +    end
197 +    object Panel2: TPanel
198 +      Left = 0
199 +      Height = 50
200 +      Top = 384
201 +      Width = 810
202 +      Align = alBottom
203 +      BevelOuter = bvNone
204 +      ClientHeight = 50
205 +      ClientWidth = 810
206 +      ParentColor = False
207 +      TabOrder = 1
208 +      object Button5: TButton
209 +        Left = 80
210 +        Height = 25
211 +        Top = 16
212 +        Width = 75
213 +        Action = CancelChanges
214 +        Anchors = [akLeft, akBottom]
215 +        TabOrder = 0
216 +      end
217 +      object Button4: TButton
218 +        Left = 1
219 +        Height = 25
220 +        Top = 16
221 +        Width = 75
222 +        Action = SaveChanges
223 +        Anchors = [akLeft, akBottom]
224 +        TabOrder = 1
225 +      end
226 +      object DBText1: TDBText
227 +        Left = 688
228 +        Height = 27
229 +        Top = 16
230 +        Width = 49
231 +        Alignment = taRightJustify
232 +        Anchors = [akTop, akLeft, akBottom]
233 +        DataField = 'TOTALSALARIES'
234 +        DataSource = TotalsSource
235 +        ParentColor = False
236 +      end
237 +    end
238 +    object EmployeeEditorPanel: TPanel
239 +      Left = 8
240 +      Height = 80
241 +      Top = 112
242 +      Width = 784
243 +      BevelOuter = bvNone
244 +      BorderWidth = 2
245 +      BorderStyle = bsSingle
246 +      ClientHeight = 78
247 +      ClientWidth = 782
248 +      Color = clWindow
249 +      ParentColor = False
250 +      TabOrder = 2
251 +      Visible = False
252 +      object Label3: TLabel
253 +        Left = 0
254 +        Height = 14
255 +        Top = 7
256 +        Width = 83
257 +        Caption = 'Employee No.'
258 +        ParentColor = False
259 +      end
260 +      object DBEdit1: TDBEdit
261 +        Left = 90
262 +        Height = 24
263 +        Top = 2
264 +        Width = 120
265 +        DataField = 'EMP_NO'
266 +        DataSource = EmployeeSource
267 +        CharCase = ecNormal
268 +        MaxLength = 0
269 +        TabOrder = 0
270 +      end
271 +      object Label4: TLabel
272 +        Left = 12
273 +        Height = 14
274 +        Top = 32
275 +        Width = 64
276 +        Caption = 'First Name'
277 +        ParentColor = False
278 +      end
279 +      object DBEdit2: TDBEdit
280 +        Left = 90
281 +        Height = 24
282 +        Top = 24
283 +        Width = 120
284 +        DataField = 'FIRST_NAME'
285 +        DataSource = EmployeeSource
286 +        CharCase = ecNormal
287 +        MaxLength = 0
288 +        TabOrder = 1
289 +      end
290 +      object Label5: TLabel
291 +        Left = 12
292 +        Height = 14
293 +        Top = 56
294 +        Width = 64
295 +        Caption = 'Last Name'
296 +        ParentColor = False
297 +      end
298 +      object DBEdit3: TDBEdit
299 +        Left = 90
300 +        Height = 24
301 +        Top = 46
302 +        Width = 120
303 +        DataField = 'LAST_NAME'
304 +        DataSource = EmployeeSource
305 +        CharCase = ecNormal
306 +        MaxLength = 0
307 +        TabOrder = 2
308 +      end
309 +      object Label6: TLabel
310 +        Left = 216
311 +        Height = 14
312 +        Top = 7
313 +        Width = 77
314 +        Caption = 'Date Started'
315 +        ParentColor = False
316 +      end
317 +      object IBDateEdit1: TDBDateEdit
318 +        Left = 300
319 +        Height = 24
320 +        Top = 2
321 +        Width = 104
322 +        CalendarDisplaySettings = [dsShowHeadings, dsShowDayNames]
323 +        DateOrder = doNone
324 +        ButtonWidth = 23
325 +        AutoSelect = False
326 +        NumGlyphs = 1
327 +        MaxLength = 0
328 +        TabOrder = 3
329 +        DataField = 'HIRE_DATE'
330 +        DataSource = EmployeeSource
331 +      end
332 +      object Label7: TLabel
333 +        Left = 252
334 +        Height = 14
335 +        Top = 32
336 +        Width = 37
337 +        Caption = 'Salary'
338 +        ParentColor = False
339 +      end
340 +      object DBEdit4: TDBEdit
341 +        Left = 300
342 +        Height = 24
343 +        Top = 24
344 +        Width = 104
345 +        DataField = 'SALARY'
346 +        DataSource = EmployeeSource
347 +        CharCase = ecNormal
348 +        MaxLength = 0
349 +        TabOrder = 5
350 +      end
351 +      object Label8: TLabel
352 +        Left = 708
353 +        Height = 14
354 +        Top = 54
355 +        Width = 24
356 +        Anchors = [akTop, akRight]
357 +        Caption = 'Ext.'
358 +        ParentColor = False
359 +      end
360 +      object DBEdit5: TDBEdit
361 +        Left = 732
362 +        Height = 24
363 +        Top = 48
364 +        Width = 40
365 +        DataField = 'PHONE_EXT'
366 +        DataSource = EmployeeSource
367 +        Anchors = [akTop, akRight]
368 +        CharCase = ecNormal
369 +        MaxLength = 0
370 +        TabOrder = 4
371 +      end
372 +      object Label9: TLabel
373 +        Left = 536
374 +        Height = 14
375 +        Top = 7
376 +        Width = 51
377 +        Caption = 'Location'
378 +        ParentColor = False
379 +      end
380 +      object Label10: TLabel
381 +        Left = 413
382 +        Height = 14
383 +        Top = 9
384 +        Width = 59
385 +        Caption = 'Job Grade'
386 +        ParentColor = False
387 +      end
388 +      object JobGradeDBComboBox: TDBComboBox
389 +        Left = 480
390 +        Height = 23
391 +        Top = 2
392 +        Width = 48
393 +        AutoSize = False
394 +        DataField = 'JOB_GRADE'
395 +        DataSource = EmployeeSource
396 +        ItemHeight = 0
397 +        Items.Strings = (
398 +          '1'
399 +          '2'
400 +          '3'
401 +          '4'
402 +          '5'
403 +        )
404 +        MaxLength = 0
405 +        OnCloseUp = JobGradeDBComboBoxCloseUp
406 +        Style = csDropDownList
407 +        TabOrder = 6
408 +      end
409 +      object Label11: TLabel
410 +        Left = 536
411 +        Height = 14
412 +        Top = 32
413 +        Width = 48
414 +        Caption = 'Job Title'
415 +        ParentColor = False
416 +      end
417 +      object Label12: TLabel
418 +        Left = 256
419 +        Height = 14
420 +        Top = 54
421 +        Width = 33
422 +        Caption = 'Dept.'
423 +        ParentColor = False
424 +      end
425 +      object SpeedButton1: TSpeedButton
426 +        Left = 680
427 +        Height = 25
428 +        Top = 48
429 +        Width = 23
430 +        Action = SelectDept
431 +        Anchors = [akTop, akRight]
432 +      end
433 +      object DBEdit6: TDBEdit
434 +        Left = 300
435 +        Height = 24
436 +        Top = 48
437 +        Width = 372
438 +        DataField = 'DEPT_PATH'
439 +        DataSource = EmployeeSource
440 +        ReadOnly = True
441 +        Anchors = [akTop, akLeft, akRight]
442 +        CharCase = ecNormal
443 +        MaxLength = 0
444 +        TabOrder = 7
445 +      end
446 +      object IBLookupComboEditBox2: TIBLookupComboEditBox
447 +        Left = 600
448 +        Height = 23
449 +        Top = 0
450 +        Width = 172
451 +        Anchors = [akTop, akLeft, akRight]
452 +        AutoSize = False
453 +        DataField = 'JOB_COUNTRY'
454 +        DataSource = EmployeeSource
455 +        KeyField = 'COUNTRY'
456 +        ListField = 'COUNTRY'
457 +        ListFieldIndex = 0
458 +        ListSource = CountrySource
459 +        LookupCache = False
460 +        Style = csDropDownList
461 +        TabOrder = 8
462 +        AutoInsert = False
463 +        AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
464 +        ItemHeight = 0
465 +      end
466 +      object IBLookupComboEditBox1: TIBLookupComboEditBox
467 +        Left = 600
468 +        Height = 23
469 +        Top = 24
470 +        Width = 172
471 +        Anchors = [akTop, akLeft, akRight]
472 +        AutoSize = False
473 +        DataField = 'JOB_CODE'
474 +        DataSource = EmployeeSource
475 +        KeyField = 'JOB_CODE'
476 +        ListField = 'JOB_TITLE'
477 +        ListFieldIndex = 0
478 +        ListSource = JobCodeSource
479 +        LookupCache = False
480 +        Style = csDropDownList
481 +        TabOrder = 9
482 +        AutoInsert = False
483 +        AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactSearchAscending]
484 +        ItemHeight = 0
485 +      end
486 +    end
487 +  end
488 +  object Label13: TLabel
489 +    Left = 456
490 +    Height = 14
491 +    Top = 14
492 +    Width = 79
493 +    Caption = 'Salary Range'
494 +    ParentColor = False
495 +  end
496 +  object SalaryRange: TComboBox
497 +    Left = 544
498 +    Height = 25
499 +    Top = 8
500 +    Width = 272
501 +    ItemHeight = 0
502 +    ItemIndex = 0
503 +    Items.Strings = (
504 +      'None Specified'
505 +      'Below $40,000'
506 +      'Between $40,000 and $100,000'
507 +      'Above $100,000'
508 +    )
509 +    OnCloseUp = BeforeDateChange
510 +    Style = csDropDownList
511 +    TabOrder = 6
512 +    Text = 'None Specified'
513    end
514    object IBDatabase1: TIBDatabase
515 <    Connected = True
516 <    AfterConnect = IBDatabase1AfterConnect
97 <    BeforeDisconnect = IBDatabase1BeforeDisconnect
515 >    Connected = False
516 >    CreateIfNotExists = False
517      AllowStreamedConnected = False
518 <    DatabaseName = 'employee'
518 >    DatabaseName = 'localhost:employee'
519      Params.Strings = (
520        'user_name=SYSDBA'
521 <      'lc_ctype=UTF-8'
521 >      'lc_ctype=UTF8'
522      )
523      DefaultTransaction = IBTransaction1
524      IdleTimer = 0
525      TraceFlags = []
526 <    left = 672
527 <    top = 224
526 >    UseDefaultSystemCodePage = False
527 >    left = 832
528 >    top = 168
529    end
530    object IBTransaction1: TIBTransaction
531      Active = False
# Line 115 | Line 535 | object Form1: TForm1
535        'rec_version'
536        'nowait'
537      )
538 <    left = 672
539 <    top = 256
538 >    left = 872
539 >    top = 168
540 >  end
541 >  object EmployeeSource: TDataSource
542 >    DataSet = Employees
543 >    left = 832
544 >    top = 336
545 >  end
546 >  object ActionList1: TActionList
547 >    left = 832
548 >    top = 416
549 >    object AddEmployee: TAction
550 >      Caption = 'Add'
551 >      OnExecute = AddEmployeeExecute
552 >    end
553 >    object EditEmployee: TAction
554 >      Caption = 'Edit'
555 >      OnExecute = EditEmployeeExecute
556 >      OnUpdate = EditEmployeeUpdate
557 >    end
558 >    object DeleteEmployee: TAction
559 >      Caption = 'Delete'
560 >      OnExecute = DeleteEmployeeExecute
561 >      OnUpdate = EditEmployeeUpdate
562 >    end
563 >    object SaveChanges: TAction
564 >      Caption = 'Save'
565 >      OnExecute = SaveChangesExecute
566 >      OnUpdate = SaveChangesUpdate
567 >    end
568 >    object CancelChanges: TAction
569 >      Caption = 'Cancel'
570 >      OnExecute = CancelChangesExecute
571 >      OnUpdate = SaveChangesUpdate
572 >    end
573 >    object SelectDept: TAction
574 >      Caption = '...'
575 >      OnExecute = SelectDeptExecute
576 >    end
577 >  end
578 >  object CountrySource: TDataSource
579 >    DataSet = Countries
580 >    left = 832
581 >    top = 296
582    end
583 <  object IBQuery1: TIBQuery
583 >  object TotalsQuery: TIBQuery
584 >    AllowAutoActivateTransaction = False
585      Database = IBDatabase1
586      Transaction = IBTransaction1
587 <    AfterDelete = IBQuery1AfterDelete
125 <    AfterOpen = IBQuery1AfterOpen
126 <    BeforeClose = IBQuery1BeforeClose
127 <    BeforeOpen = IBQuery1BeforeOpen
128 <    OnDeleteError = IBQuery1PostError
129 <    OnPostError = IBQuery1PostError
587 >    BeforeOpen = EmployeesBeforeOpen
588      BufferChunks = 1000
589      CachedUpdates = False
590 +    EnableStatistics = False
591 +    GenerateParamNames = False
592      GeneratorField.ApplyOnEvent = gaeOnNewRecord
593 +    MasterDetailDelay = 0
594      SQL.Strings = (
595 <      'Select A.EMP_NO, A.FIRST_NAME, A.LAST_NAME, A.PHONE_EXT, A.HIRE_DATE, A.DEPT_NO, A.JOB_CODE, A.JOB_GRADE, A.JOB_COUNTRY, A.SALARY, A.FULL_NAME From EMPLOYEE A'
596 <      'Order by LAST_NAME'
595 >      'Select sum(Salary) as TotalSalaries'
596 >      'From EMPLOYEE'
597      )
598      Params = <>
599 <    UpdateObject = IBUpdateSQL1
600 <    AfterTransactionEnd = IBQuery1AfterTransactionEnd
601 <    left = 672
599 >    DataSetCloseAction = dcDiscardChanges
600 >    left = 872
601 >    top = 376
602 >    object TotalsQueryTOTALSALARIES: TIBBCDField
603 >      DisplayWidth = 18
604 >      FieldKind = fkData
605 >      FieldName = 'TOTALSALARIES'
606 >      Index = 0
607 >      LookupCache = False
608 >      ProviderFlags = [pfInUpdate, pfInWhere]
609 >      ReadOnly = False
610 >      Required = False
611 >      OnGetText = EmployeesSALARYGetText
612 >      Precision = 18
613 >      Currency = False
614 >      MaxValue = 0
615 >      MinValue = 0
616 >      Size = 2
617 >    end
618 >  end
619 >  object TotalsSource: TDataSource
620 >    DataSet = TotalsQuery
621 >    left = 832
622 >    top = 376
623 >  end
624 >  object Employees: TIBDataSet
625 >    AllowAutoActivateTransaction = False
626 >    Database = IBDatabase1
627 >    Transaction = IBTransaction1
628 >    ForcedRefresh = True
629 >    AfterDelete = EmployeesAfterDelete
630 >    AfterEdit = EmployeesAfterDelete
631 >    AfterInsert = EmployeesAfterInsert
632 >    AfterOpen = EmployeesAfterOpen
633 >    AfterScroll = EmployeesAfterScroll
634 >    BeforeClose = EmployeesBeforeClose
635 >    BeforeOpen = EmployeesBeforeOpen
636 >    BufferChunks = 5000
637 >    CachedUpdates = False
638 >    EnableStatistics = False
639 >    DeleteSQL.Strings = (
640 >      'Delete From EMPLOYEE A'
641 >      'Where A.EMP_NO = :EMP_NO'
642 >    )
643 >    InsertSQL.Strings = (
644 >      'Insert Into EMPLOYEE(EMP_NO, FIRST_NAME, LAST_NAME, PHONE_EXT, HIRE_DATE, DEPT_NO, JOB_CODE, JOB_GRADE, JOB_COUNTRY, SALARY)'
645 >      'Values(:EMP_NO, :FIRST_NAME, :LAST_NAME, :PHONE_EXT, :HIRE_DATE, :DEPT_NO, :JOB_CODE, :JOB_GRADE, :JOB_COUNTRY, :SALARY)'
646 >    )
647 >    RefreshSQL.Strings = (
648 >      'with recursive Depts As ('
649 >      'Select DEPT_NO, DEPARTMENT, HEAD_DEPT, cast(DEPARTMENT  as VarChar(256)) as DEPT_PATH,'
650 >      'cast(DEPT_NO as VarChar(64)) as DEPT_KEY_PATH'
651 >      'From DEPARTMENT Where HEAD_DEPT is NULL '
652 >      'UNION ALL'
653 >      'Select D.DEPT_NO, D.DEPARTMENT, D.HEAD_DEPT, Depts.DEPT_PATH ||  '' / '' || D.DEPARTMENT as DEPT_PATH,'
654 >      'Depts.DEPT_KEY_PATH || '';'' || D.DEPT_NO as DEPT_KEY_PATH'
655 >      'From DEPARTMENT  D'
656 >      'JOIN Depts On D.HEAD_DEPT = Depts.DEPT_NO'
657 >      ')'
658 >      ''
659 >      'Select A.EMP_NO, A.FIRST_NAME, A.LAST_NAME, A.PHONE_EXT, A.HIRE_DATE, A.DEPT_NO, A.JOB_CODE, '
660 >      'A.JOB_GRADE, A.JOB_COUNTRY, A.SALARY, A.FULL_NAME, D.DEPT_PATH, D.DEPT_KEY_PATH'
661 >      'From EMPLOYEE A'
662 >      'JOIN Depts D On D.DEPT_NO = A.DEPT_NO'
663 >      ''
664 >      'Where A.EMP_NO = :EMP_NO'
665 >    )
666 >    SelectSQL.Strings = (
667 >      'with recursive Depts As ('
668 >      'Select DEPT_NO, DEPARTMENT, HEAD_DEPT, cast(DEPARTMENT  as VarChar(256)) as DEPT_PATH,'
669 >      'cast(DEPT_NO as VarChar(64)) as DEPT_KEY_PATH'
670 >      'From DEPARTMENT Where HEAD_DEPT is NULL '
671 >      'UNION ALL'
672 >      'Select D.DEPT_NO, D.DEPARTMENT, D.HEAD_DEPT, Depts.DEPT_PATH ||  '' / '' || D.DEPARTMENT as DEPT_PATH,'
673 >      'Depts.DEPT_KEY_PATH || '';'' || D.DEPT_NO as DEPT_KEY_PATH'
674 >      'From DEPARTMENT  D'
675 >      'JOIN Depts On D.HEAD_DEPT = Depts.DEPT_NO'
676 >      ')'
677 >      ''
678 >      'Select distinct A.EMP_NO, A.FIRST_NAME, A.LAST_NAME, A.PHONE_EXT, A.HIRE_DATE, A.DEPT_NO, A.JOB_CODE, '
679 >      'A.JOB_GRADE, A.JOB_COUNTRY, A.SALARY, A.FULL_NAME, D.DEPT_PATH, D.DEPT_KEY_PATH'
680 >      'From EMPLOYEE A'
681 >      'JOIN Depts D On D.DEPT_NO = A.DEPT_NO'
682 >    )
683 >    ModifySQL.Strings = (
684 >      'Update EMPLOYEE A Set '#13#10'  A.DEPT_NO = :DEPT_NO,'#13#10'  A.FIRST_NAME = :FIRST_NAME,'#13#10'  A.HIRE_DATE = :HIRE_DATE,'#13#10'  A.JOB_CODE = :JOB_CODE,'#13#10'  A.JOB_COUNTRY = :JOB_COUNTRY,'#13#10'  A.JOB_GRADE = :JOB_GRADE,'#13#10'  A.LAST_NAME = :LAST_NAME,'#13#10'  A.PHONE_EXT = :PHONE_EXT,'#13#10'  A.SALARY = :SALARY'
685 >      'Where A.EMP_NO = :OLD_EMP_NO'
686 >    )
687 >    GeneratorField.Generator = 'EMP_NO_GEN'
688 >    GeneratorField.Field = 'EMP_NO'
689 >    GeneratorField.ApplyOnEvent = gaeOnNewRecord
690 >    GenerateParamNames = False
691 >    MasterDetailDelay = 0
692 >    DataSetCloseAction = dcSaveChanges
693 >    AfterTransactionEnd = EmployeesAfterTransactionEnd
694 >    OnValidatePost = EmployeesValidatePost
695 >    left = 872
696      top = 336
697 <    object IBQuery1EMP_NO: TSmallintField
697 >    object EmployeesEMP_NO: TSmallintField
698        DisplayWidth = 10
699        FieldKind = fkData
700        FieldName = 'EMP_NO'
# Line 149 | Line 704 | object Form1: TForm1
704        ReadOnly = False
705        Required = True
706      end
707 <    object IBQuery1FIRST_NAME: TIBStringField
707 >    object EmployeesFIRST_NAME: TIBStringField
708        DisplayWidth = 15
709        FieldKind = fkData
710        FieldName = 'FIRST_NAME'
# Line 160 | Line 715 | object Form1: TForm1
715        Required = True
716        Size = 15
717      end
718 <    object IBQuery1LAST_NAME: TIBStringField
718 >    object EmployeesLAST_NAME: TIBStringField
719        DisplayWidth = 20
720        FieldKind = fkData
721        FieldName = 'LAST_NAME'
# Line 170 | Line 725 | object Form1: TForm1
725        ReadOnly = False
726        Required = True
727      end
728 <    object IBQuery1PHONE_EXT: TIBStringField
728 >    object EmployeesPHONE_EXT: TIBStringField
729 >      Alignment = taRightJustify
730        DisplayWidth = 4
731        FieldKind = fkData
732        FieldName = 'PHONE_EXT'
# Line 181 | Line 737 | object Form1: TForm1
737        Required = False
738        Size = 4
739      end
740 <    object IBQuery1HIRE_DATE: TDateTimeField
740 >    object EmployeesHIRE_DATE: TDateTimeField
741        DisplayWidth = 10
742        FieldKind = fkData
743        FieldName = 'HIRE_DATE'
# Line 191 | Line 747 | object Form1: TForm1
747        ReadOnly = False
748        Required = True
749      end
750 <    object IBQuery1DEPT_NO: TIBStringField
750 >    object EmployeesDEPT_NO: TIBStringField
751        DisplayWidth = 3
752        FieldKind = fkData
753        FieldName = 'DEPT_NO'
# Line 202 | Line 758 | object Form1: TForm1
758        Required = True
759        Size = 3
760      end
761 <    object IBQuery1JOB_CODE: TIBStringField
761 >    object EmployeesJOB_CODE: TIBStringField
762        DisplayWidth = 5
763        FieldKind = fkData
764        FieldName = 'JOB_CODE'
# Line 211 | Line 767 | object Form1: TForm1
767        ProviderFlags = [pfInUpdate, pfInWhere]
768        ReadOnly = False
769        Required = True
770 +      OnChange = EmployeesJOB_CODEChange
771        Size = 5
772      end
773 <    object IBQuery1JOB_GRADE: TSmallintField
773 >    object EmployeesJOB_GRADE: TSmallintField
774        DisplayWidth = 10
775        FieldKind = fkData
776        FieldName = 'JOB_GRADE'
# Line 222 | Line 779 | object Form1: TForm1
779        ProviderFlags = [pfInUpdate, pfInWhere]
780        ReadOnly = False
781        Required = True
782 +      OnChange = EmployeesJOB_GRADEChange
783      end
784 <    object IBQuery1JOB_COUNTRY: TIBStringField
784 >    object EmployeesJOB_COUNTRY: TIBStringField
785        DisplayWidth = 15
786        FieldKind = fkData
787        FieldName = 'JOB_COUNTRY'
# Line 234 | Line 792 | object Form1: TForm1
792        Required = True
793        Size = 15
794      end
795 <    object IBQuery1SALARY: TIBBCDField
795 >    object EmployeesSALARY: TIBBCDField
796        DisplayWidth = 18
797        FieldKind = fkData
798        FieldName = 'SALARY'
# Line 243 | Line 801 | object Form1: TForm1
801        ProviderFlags = [pfInUpdate, pfInWhere]
802        ReadOnly = False
803        Required = True
804 <      OnGetText = IBQuery1SALARYGetText
804 >      OnGetText = EmployeesSALARYGetText
805        Precision = 18
806        Currency = False
807        MaxValue = 0
808        MinValue = 0
809        Size = 2
810      end
811 <    object IBQuery1FULL_NAME: TIBStringField
811 >    object EmployeesFULL_NAME: TIBStringField
812        DisplayWidth = 37
813        FieldKind = fkData
814        FieldName = 'FULL_NAME'
# Line 261 | Line 819 | object Form1: TForm1
819        Required = False
820        Size = 37
821      end
822 +    object EmployeesDEPT_PATH: TIBStringField
823 +      DisplayWidth = 256
824 +      FieldKind = fkData
825 +      FieldName = 'DEPT_PATH'
826 +      Index = 11
827 +      LookupCache = False
828 +      ProviderFlags = [pfInUpdate, pfInWhere]
829 +      ReadOnly = False
830 +      Required = True
831 +      Size = 256
832 +    end
833 +    object EmployeesDEPT_KEY_PATH: TIBStringField
834 +      DisplayWidth = 64
835 +      FieldKind = fkData
836 +      FieldName = 'DEPT_KEY_PATH'
837 +      Index = 12
838 +      LookupCache = False
839 +      ProviderFlags = [pfInUpdate, pfInWhere]
840 +      ReadOnly = False
841 +      Required = True
842 +      Size = 64
843 +    end
844    end
845 <  object Datasource1: TDatasource
846 <    DataSet = IBQuery1
847 <    left = 672
845 >  object Countries: TIBQuery
846 >    AllowAutoActivateTransaction = False
847 >    Database = IBDatabase1
848 >    Transaction = IBTransaction1
849 >    BeforeOpen = CountriesBeforeOpen
850 >    BufferChunks = 1000
851 >    CachedUpdates = False
852 >    EnableStatistics = False
853 >    GenerateParamNames = False
854 >    GeneratorField.ApplyOnEvent = gaeOnNewRecord
855 >    MasterDetailDelay = 0
856 >    SQL.Strings = (
857 >      'Select A.COUNTRY, A.CURRENCY From COUNTRY A'
858 >      'JOIN JOB J On J.JOB_COUNTRY = A.COUNTRY'
859 >      'Where J.JOB_CODE = :JOB_CODE and J.JOB_GRADE = :JOB_GRADE'
860 >      'Order by 1'
861 >    )
862 >    Params = <    
863 >      item
864 >        DataType = ftUnknown
865 >        Name = 'JOB_CODE'
866 >        ParamType = ptInput
867 >      end    
868 >      item
869 >        DataType = ftUnknown
870 >        Name = 'JOB_GRADE'
871 >        ParamType = ptInput
872 >      end>
873 >    DataSetCloseAction = dcDiscardChanges
874 >    left = 872
875      top = 296
876 +    ParamData = <    
877 +      item
878 +        DataType = ftUnknown
879 +        Name = 'JOB_CODE'
880 +        ParamType = ptInput
881 +      end    
882 +      item
883 +        DataType = ftUnknown
884 +        Name = 'JOB_GRADE'
885 +        ParamType = ptInput
886 +      end>
887    end
888 <  object ActionList1: TActionList
889 <    left = 672
890 <    top = 376
891 <    object AddEmployee: TAction
274 <      Caption = 'Add'
275 <      OnExecute = AddEmployeeExecute
276 <    end
277 <    object EditEmployee: TAction
278 <      Caption = 'Edit'
279 <      OnExecute = EditEmployeeExecute
280 <      OnUpdate = EditEmployeeUpdate
281 <    end
282 <    object DeleteEmployee: TAction
283 <      Caption = 'Delete'
284 <      OnExecute = DeleteEmployeeExecute
285 <      OnUpdate = EditEmployeeUpdate
286 <    end
287 <    object SaveChanges: TAction
288 <      Caption = 'Save'
289 <      OnExecute = SaveChangesExecute
290 <      OnUpdate = SaveChangesUpdate
291 <    end
292 <    object CancelChanges: TAction
293 <      Caption = 'Cancel'
294 <      OnExecute = CancelChangesExecute
295 <      OnUpdate = SaveChangesUpdate
296 <    end
888 >  object JobCodeSource: TDataSource
889 >    DataSet = JobCodes
890 >    left = 832
891 >    top = 256
892    end
893 <  object IBUpdateSQL1: TIBUpdateSQL
894 <    RefreshSQL.Strings = (
895 <      'Select A.EMP_NO, A.FIRST_NAME, A.LAST_NAME, A.PHONE_EXT, A.HIRE_DATE, A.DEPT_NO, A.JOB_CODE, A.JOB_GRADE, A.JOB_COUNTRY, A.SALARY, A.FULL_NAME From EMPLOYEE A'
896 <      'Where A.EMP_NO = :EMP_NO'
893 >  object JobCodes: TIBQuery
894 >    AllowAutoActivateTransaction = False
895 >    Database = IBDatabase1
896 >    Transaction = IBTransaction1
897 >    BeforeOpen = JobCodesBeforeOpen
898 >    BufferChunks = 1000
899 >    CachedUpdates = False
900 >    EnableStatistics = False
901 >    GenerateParamNames = False
902 >    GeneratorField.ApplyOnEvent = gaeOnNewRecord
903 >    MasterDetailDelay = 0
904 >    SQL.Strings = (
905 >      'Select A.JOB_CODE, A.JOB_TITLE From JOB A'
906 >      'Where JOB_COUNTRY = :JOB_COUNTRY and JOB_GRADE = :JOB_GRADE'
907 >      'Order by Upper(JOB_TITLE)'
908      )
909 <    DeleteSQL.Strings = (
910 <      'Delete From EMPLOYEE A'
911 <      'Where A.EMP_NO = :EMP_NO'
909 >    Params = <    
910 >      item
911 >        DataType = ftUnknown
912 >        Name = 'JOB_COUNTRY'
913 >        ParamType = ptInput
914 >      end    
915 >      item
916 >        DataType = ftUnknown
917 >        Name = 'JOB_GRADE'
918 >        ParamType = ptInput
919 >      end>
920 >    DataSetCloseAction = dcDiscardChanges
921 >    left = 872
922 >    top = 256
923 >    ParamData = <    
924 >      item
925 >        DataType = ftUnknown
926 >        Name = 'JOB_COUNTRY'
927 >        ParamType = ptInput
928 >      end    
929 >      item
930 >        DataType = ftUnknown
931 >        Name = 'JOB_GRADE'
932 >        ParamType = ptInput
933 >      end>
934 >  end
935 >  object Depts: TIBQuery
936 >    AllowAutoActivateTransaction = False
937 >    Database = IBDatabase1
938 >    Transaction = IBTransaction1
939 >    BufferChunks = 1000
940 >    CachedUpdates = False
941 >    EnableStatistics = False
942 >    GenerateParamNames = False
943 >    GeneratorField.ApplyOnEvent = gaeOnNewRecord
944 >    MasterDetailDelay = 0
945 >    SQL.Strings = (
946 >      'Select A.DEPT_NO, A.DEPARTMENT From DEPARTMENT A'
947 >      ''
948 >      'Order by Upper(Department)'
949      )
950 <    left = 712
951 <    top = 336
950 >    Params = <>
951 >    DataSetCloseAction = dcDiscardChanges
952 >    left = 872
953 >    top = 210
954 >  end
955 >  object DeptsSource: TDataSource
956 >    DataSet = Depts
957 >    left = 832
958 >    top = 208
959 >  end
960 >  object JobGradeChangeTimer: TTimer
961 >    Interval = 0
962 >    OnTimer = JobGradeChangeTimerTimer
963 >    left = 777
964 >    top = 304
965 >  end
966 >  object JobCodeChangeTimer: TTimer
967 >    Interval = 0
968 >    OnTimer = JobCodeChangeTimerTimer
969 >    left = 776
970 >    top = 353
971    end
972   end

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines