ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/design/IBDBReg.pas
Revision: 47
Committed: Mon Jan 9 15:31:51 2017 UTC (7 years, 10 months ago) by tony
Content type: text/x-pascal
File size: 34589 byte(s)
Log Message:
Committing updates for Release R2-0-1

File Contents

# User Rev Content
1 tony 33 {************************************************************************}
2     { }
3     { Borland Delphi Visual Component Library }
4     { InterBase Express core components }
5     { }
6     { Copyright (c) 1998-2000 Inprise Corporation }
7     { }
8     { InterBase Express is based in part on the product }
9     { Free IB Components, written by Gregory H. Deatz for }
10     { Hoagland, Longo, Moran, Dunst & Doukas Company. }
11     { Free IB Components is used under license. }
12     { }
13     { The contents of this file are subject to the InterBase }
14     { Public License Version 1.0 (the "License"); you may not }
15     { use this file except in compliance with the License. You }
16     { may obtain a copy of the License at http://www.Inprise.com/IPL.html }
17     { Software distributed under the License is distributed on }
18     { an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either }
19     { express or implied. See the License for the specific language }
20     { governing rights and limitations under the License. }
21     { The Original Code was created by InterBase Software Corporation }
22     { and its successors. }
23     { Portions created by Inprise Corporation are Copyright (C) Inprise }
24     { Corporation. All Rights Reserved. }
25     { Contributor(s): Jeff Overcash }
26     { }
27     { IBX For Lazarus (Firebird Express) }
28     { Contributor: Tony Whyman, MWA Software http://www.mwasoftware.co.uk }
29     { Portions created by MWA Software are copyright McCallum Whyman }
30     { Associates Ltd 2011 }
31     {************************************************************************}
32    
33     unit IBDBReg;
34    
35     {$MODE Delphi}
36    
37     (*
38     * Compiler defines
39     *)
40     {$A+} (* Aligned records: On *)
41     {$B-} (* Short circuit boolean expressions: Off *)
42     {$H+} (* Huge Strings: On *)
43     {$J-} (* Modification of Typed Constants: Off *)
44     {$M+} (* Generate run-time type information: On *)
45     {$O+} (* Optimization: On *)
46     {$Q-} (* Overflow checks: Off *)
47     {$R-} (* Range checks: Off *)
48     {$T+} (* Typed address: On *)
49     {$W-} (* Always generate stack frames: Off *)
50     {$X+} (* Extended syntax: On *)
51     {$Z1} (* Minimum Enumeration Size: 1 Byte *)
52    
53     interface
54    
55     uses SysUtils, Classes, Graphics, Dialogs, Controls, Forms, TypInfo,
56     DB, IBTable, IBDatabase, IBEventsEditor, LazarusPackageIntf,
57 tony 45 IBUpdateSQL, ComponentEditors, PropEdits, DBPropEdits, FieldsEditor,
58 tony 33 dbFieldLinkPropEditor, dbFieldListPropEditor, IBDialogs;
59    
60     type
61    
62     { TIBFileNameProperty
63     Property editor the DataBase Name property. Brings up the Open dialog }
64    
65     TIBFileNameProperty = class(TStringProperty)
66     public
67     procedure Edit; override;
68     function GetAttributes: TPropertyAttributes; override;
69     end;
70    
71     { TIBNameProperty
72     }
73     TIBNameProperty = class(TStringProperty)
74     public
75     function GetAttributes: TPropertyAttributes; override;
76     end;
77    
78     { TIBStoredProcNameProperty
79     Editor for the TIBStoredProc.StoredProcName property. Displays a drop-down list of all
80     the StoredProcedures in the Database.}
81     TIBStoredProcNameProperty = class(TIBNameProperty)
82     public
83     procedure GetValues(Proc: TGetStrProc); override;
84     end;
85    
86     { TIBTableNameProperty
87     Editor for the TIBTable.TableName property. Displays a drop-down list of all
88     the Tables in the Database.}
89     TIBTableNameProperty = class(TIBNameProperty)
90     public
91     procedure GetValues(Proc: TGetStrProc); override;
92     end;
93    
94     { TDBStringProperty }
95    
96     TDBStringProperty = class(TStringProperty)
97     private
98     function ConnecttoDB: boolean;
99     public
100     function GetAttributes: TPropertyAttributes; override;
101     procedure GetValueList(List: TStrings); virtual;
102     procedure GetValues(Proc: TGetStrProc); override;
103     procedure Edit; override;
104     end;
105    
106     { TIBIndexFieldNamesProperty }
107    
108     TIBIndexFieldNamesProperty = class(TDBStringProperty)
109     public
110     procedure GetValueList(List: TStrings); override;
111     end;
112    
113     TIBIndexNameProperty = class(TDBStringProperty)
114     public
115     procedure GetValueList(List: TStrings); override;
116     end;
117    
118     { TIBDatabaseEditor }
119    
120     TIBDatabaseEditor = class(TComponentEditor)
121     procedure ExecuteVerb(Index: Integer); override;
122     function GetVerb(Index: Integer): string; override;
123     function GetVerbCount: Integer; override;
124     end;
125    
126     { TIBTransactionEditor }
127    
128     TIBTransactionEditor = class(TComponentEditor)
129     public
130     procedure ExecuteVerb(Index: Integer); override;
131     function GetVerb(Index: Integer): string; override;
132     function GetVerbCount: Integer; override;
133     end;
134    
135 tony 45 { TIBArrayGridEditor }
136    
137     TIBArrayGridEditor = class(TComponentEditor)
138     public
139     procedure ExecuteVerb(Index: Integer); override;
140     function GetVerb(Index: Integer): string; override;
141     function GetVerbCount: Integer; override;
142     end;
143    
144 tony 33 { TIBQueryEditor }
145    
146     TIBQueryEditor = class(TFieldsComponentEditor)
147     public
148     procedure ExecuteVerb(Index: Integer); override;
149     function GetVerb(Index: Integer): string; override;
150     function GetVerbCount: Integer; override;
151     end;
152    
153     { TIBStoredProcEditor }
154    
155     TIBStoredProcEditor = class(TFieldsComponentEditor)
156     public
157     procedure ExecuteVerb(Index: Integer); override;
158     function GetVerb(Index: Integer): string; override;
159     function GetVerbCount: Integer; override;
160     end;
161    
162     { TIBDataSetEditor }
163    
164     TIBDataSetEditor = class(TFieldsComponentEditor)
165     public
166     procedure ExecuteVerb(Index: Integer); override;
167     function GetVerb(Index: Integer): string; override;
168     function GetVerbCount: Integer; override;
169     end;
170    
171     { TIBUpdateSQLEditor }
172    
173     TIBUpdateSQLEditor = class(TComponentEditor)
174     public
175     procedure ExecuteVerb(Index: Integer); override;
176     function GetVerb(Index: Integer): string; override;
177     function GetVerbCount: Integer; override;
178     end;
179    
180     { TIBSQLEditor }
181    
182     TIBSQLEditor = class(TComponentEditor)
183     public
184     procedure ExecuteVerb(Index: Integer); override;
185     function GetVerb(Index: Integer): string; override;
186     function GetVerbCount: Integer; override;
187     end;
188    
189     { TIBServiceEditor}
190    
191     TIBServiceEditor = class(TComponentEditor)
192     public
193     procedure ExecuteVerb(Index: Integer); override;
194     function GetVerb(Index: Integer): string; override;
195     function GetVerbCount: Integer; override;
196     end;
197    
198     TIBStoredProcParamsProperty = class(TCollectionPropertyEditor)
199     public
200     procedure Edit; override;
201     end;
202    
203     { TIBTableFieldLinkProperty }
204    
205     TIBTableFieldLinkProperty = class(TFieldLinkProperty)
206     private
207     FTable: TIBTable;
208     protected
209     function GetIndexDefs: TIndexDefs; override;
210     function GetIndexFieldNames: string; override;
211     function GetMasterFields: string; override;
212     procedure SetIndexFieldNames(const Value: string); override;
213     procedure SetMasterFields(const Value: string); override;
214     public
215     procedure Edit; override;
216     end;
217    
218     { TSQLPropertyEditor }
219    
220     TSQLPropertyEditor = class(TStringsPropertyEditor)
221     public
222     function GetAttributes: TPropertyAttributes; override;
223     end;
224    
225     { TIBQuerySQLProperty }
226    
227     TIBQuerySQLProperty = class(TSQLPropertyEditor)
228     public
229     procedure Edit; override;
230     end;
231    
232     {TIBSQLSQLPropertyEditor }
233    
234     TIBSQLSQLPropertyEditor = class(TSQLPropertyEditor)
235     public
236     procedure Edit; override;
237     end;
238    
239     { TIBDatasetSQLProperty }
240    
241     TIBDatasetSQLProperty = class(TSQLPropertyEditor)
242     public
243     procedure Edit; override;
244     end;
245    
246     { TIBSQLProperty }
247    
248     TIBSQLProperty = class(TSQLPropertyEditor)
249     public
250     procedure Edit; override;
251     end;
252    
253     { TUpdateSQLPropertyEditor }
254    
255     TUpdateSQLPropertyEditor = class(TSQLPropertyEditor)
256     protected
257     FIBUpdateSQL: TIBUpdateSQL;
258     FDatabase: TIBDatabase;
259     function GetObjects: boolean;
260     end;
261    
262     { TIBUpdateSQLProperty }
263    
264     TIBUpdateSQLProperty = class(TSQLPropertyEditor)
265     public
266     procedure Edit; override;
267     end;
268    
269     { TIBRefreshSQLProperty }
270    
271     TIBRefreshSQLProperty = class(TSQLPropertyEditor)
272     public
273     procedure Edit; override;
274     end;
275    
276     { TIBInsertSQLProperty }
277    
278     TIBInsertSQLProperty = class(TSQLPropertyEditor)
279     public
280     procedure Edit; override;
281     end;
282    
283     { TIBDeleteSQLProperty }
284    
285     TIBDeleteSQLProperty = class(TSQLPropertyEditor)
286     public
287     procedure Edit; override;
288     end;
289    
290     { TIBUpdateSQLUpdateProperty }
291    
292     TIBUpdateSQLUpdateProperty = class(TUpdateSQLPropertyEditor)
293     public
294     procedure Edit; override;
295     end;
296    
297     { TIBUpdateSQLRefreshSQLProperty }
298    
299     TIBUpdateSQLRefreshSQLProperty = class(TUpdateSQLPropertyEditor)
300     public
301     procedure Edit; override;
302     end;
303    
304     { TIBUpdateSQLInsertSQLProperty }
305    
306     TIBUpdateSQLInsertSQLProperty = class(TUpdateSQLPropertyEditor)
307     public
308     procedure Edit; override;
309     end;
310    
311     { TIBUpdateSQLDeleteProperty }
312    
313     TIBUpdateSQLDeleteProperty = class(TUpdateSQLPropertyEditor)
314     public
315     function GetAttributes: TPropertyAttributes; override;
316     procedure Edit; override;
317     end;
318    
319     { TIBEventListProperty }
320    
321     TIBEventListProperty = class(TClassProperty)
322     public
323     function GetAttributes: TPropertyAttributes; override;
324     procedure Edit; override;
325     end;
326    
327     {TIBGeneratorProperty}
328    
329     TIBGeneratorProperty = class(TPersistentPropertyEditor)
330     public
331     function GetAttributes: TPropertyAttributes; override;
332     procedure Edit; override;
333     end;
334    
335     { TDBDynamicGridFieldProperty }
336    
337     TDBDynamicGridFieldProperty = class(TFieldProperty)
338     public
339     procedure FillValues(const Values: TStringList); override;
340     end;
341    
342     { TDBLookupPropertiesGridFieldProperty }
343    
344     TDBLookupPropertiesGridFieldProperty = class(TFieldProperty)
345     public
346     procedure FillValues(const Values: TStringList); override;
347     end;
348    
349     { TIBTreeViewFieldProperty }
350    
351     TIBTreeViewFieldProperty = class(TFieldProperty)
352     public
353     procedure FillValues(const Values: TStringList); override;
354     end;
355    
356     { TIBDynamicGridIndexNamesProperty }
357    
358     TIBDynamicGridIndexNamesProperty = class(TIndexFieldNamesProperty)
359     protected
360     function GetFieldDefs: TFieldDefs; override;
361     function GetIndexFieldNames: string; override;
362     procedure SetIndexFieldNames(const Value: string); override;
363     end;
364    
365 tony 45 { TIBFieldDefsProperty }
366 tony 33
367 tony 45 TIBFieldDefsProperty = class(TCollectionPropertyEditor)
368     public
369     procedure Edit; override;
370     end;
371 tony 33
372 tony 45 { TIBIndexDefsProperty }
373    
374     TIBIndexDefsProperty = class(TCollectionPropertyEditor)
375     public
376     procedure Edit; override;
377     end;
378    
379    
380 tony 33 procedure Register;
381    
382     implementation
383    
384 tony 45 uses IB, IBQuery, IBStoredProc, IBCustomDataSet, FBMessages,
385     IBSQL, IBSQLMonitor, IBDatabaseInfo, IBEvents, IBTypes,
386 tony 33 IBServices, IBDatabaseEdit, IBTransactionEdit,
387     IBBatchMove, IBExtract,LResources, IBSelectSQLEditor,
388     IBModifySQLEditor,IBDeleteSQLEditor,IBRefreshSQLEditor,
389     IBInsertSQLEditor, IBGeneratorEditor, IBUpdateSQLEditor, IBDataSetEditor,
390     IBSQLEditor, ibserviceeditor, LCLVersion, IBDynamicGrid, IBLookupComboEditBox,
391 tony 45 IBTreeView, DBControlGrid, ibxscript, IBLocalDBSupport, IBDSDialogs,
392 tony 47 IBArrayGrid, IBVersion, IBDataOutput;
393 tony 33
394 tony 45 const
395     IBPalette1 = 'Firebird'; {do not localize}
396     IBPalette2 = 'Firebird Admin'; {do not localize}
397     IBPalette3 = 'Firebird Data Controls'; {do not localize}
398    
399     resourcestring
400 tony 47 SInterbaseExpressVersion = 'Firebird Express for Lazarus ' + IBX_VERSION;
401 tony 45 SEditSQL = 'Edit SQL';
402     SIBSQLEditor = 'IBSQL Editor';
403     SIBServiceEditor = 'Edit IB Service';
404     SIBUpdateSQLEditor = '&UpdateSQL Editor...';
405     SIBDataSetEditor = '&Dataset Editor...';
406     SExecute = 'E&xecute';
407     SIBDatabaseEditor = 'Da&tabase Editor...';
408     SIBTransactionEditor = '&Transaction Editor...';
409     SIBUpdateLayout = 'Update Layout';
410 tony 33
411     procedure Register;
412     begin
413     if not TryIBLoad then
414     begin
415     MessageDlg('IBX is unable to locate the Firebird Library - have you remembered to install it?',mtError,[mbOK],0);
416     Exit;
417     end;
418    
419 tony 45 RegisterNoIcon([TIBStringField, TIBBCDField, TIBMemoField, TIBArrayField]);
420 tony 33 {$if lcl_fullversion < 01010000}
421     {see http://bugs.freepascal.org/view.php?id=19035 }
422     RegisterNoIcon([TIntegerField]);
423     {$endif}
424     RegisterComponents(IBPalette1, [ TIBQuery, TIBDataSet,
425     TIBDatabase, TIBTransaction, TIBUpdateSQL, TIBEvents,
426     TIBSQL, TIBDatabaseInfo, TIBSQLMonitor,
427 tony 47 TIBStoredProc,TIBBatchMove, TIBTable,TIBExtract, TIBXScript, TIBLocalDBSupport,
428     TIBBlockFormatOut,TIBCSVDataOut,TIBInsertStmtsOut]);
429 tony 45 if FirebirdAPI.HasServiceAPI then
430 tony 33 RegisterComponents(IBPalette2, [TIBConfigService, TIBBackupService,
431     TIBRestoreService, TIBValidationService, TIBStatisticalService,
432     TIBLogService, TIBSecurityService, TIBServerProperties]);
433    
434    
435 tony 45 RegisterComponents(IBPalette3,[TIBLookupComboEditBox,TIBDynamicGrid,TIBTreeView,TDBControlGrid, TIBArrayGrid]);
436 tony 33 RegisterPropertyEditor(TypeInfo(TIBFileName), TIBDatabase, 'DatabaseName', TIBFileNameProperty); {do not localize}
437     RegisterPropertyEditor(TypeInfo(string), TIBStoredProc, 'StoredProcName', TIBStoredProcNameProperty); {do not localize}
438     RegisterPropertyEditor(TypeInfo(TParams), TIBStoredProc, 'Params', TIBStoredProcParamsProperty);
439     RegisterPropertyEditor(TypeInfo(string), TIBTable, 'TableName', TIBTableNameProperty); {do not localize}
440     RegisterPropertyEditor(TypeInfo(string), TIBTable, 'IndexName', TIBIndexNameProperty); {do not localize}
441     RegisterPropertyEditor(TypeInfo(string), TIBTable, 'IndexFieldNames', TIBIndexFieldNamesProperty); {do not localize}
442     RegisterPropertyEditor(TypeInfo(string), TIBTable, 'MasterFields', TIBTableFieldLinkProperty); {do not localize}
443 tony 45 RegisterPropertyEditor(TypeInfo(TFieldDefs), TIBTable, 'FieldDefs', TIBFieldDefsProperty); {do not localize}
444     RegisterPropertyEditor(TypeInfo(TIndexDefs), TIBTable, 'IndexDefs', TIBIndexDefsProperty); {do not localize}
445 tony 33 RegisterPropertyEditor(TypeInfo(TStrings), TIBQuery, 'SQL', TIBQuerySQLProperty); {do not localize}
446     RegisterPropertyEditor(TypeInfo(TStrings), TIBDataSet, 'SelectSQL', TIBDatasetSQLProperty); {do not localize}
447     RegisterPropertyEditor(TypeInfo(TStrings), TIBDataSet, 'ModifySQL', TIBUpdateSQLProperty); {do not localize}
448     RegisterPropertyEditor(TypeInfo(TStrings), TIBDataSet, 'InsertSQL', TIBInsertSQLProperty); {do not localize}
449     RegisterPropertyEditor(TypeInfo(TStrings), TIBDataSet, 'RefreshSQL', TIBRefreshSQLProperty); {do not localize}
450     RegisterPropertyEditor(TypeInfo(TStrings), TIBDataSet, 'DeleteSQL', TIBDeleteSQLProperty); {do not localize}
451     RegisterPropertyEditor(TypeInfo(TStrings), TIBSQL, 'SQL', TIBSQLSQLPropertyEditor); {do not localize}
452     RegisterPropertyEditor(TypeInfo(TStrings), TIBUpdateSQL, 'RefreshSQL', TIBUpdateSQLRefreshSQLProperty); {do not localize}
453     RegisterPropertyEditor(TypeInfo(TStrings), TIBUpdateSQL, 'ModifySQL', TIBUpdateSQLUpdateProperty); {do not localize}
454     RegisterPropertyEditor(TypeInfo(TStrings), TIBUpdateSQL, 'InsertSQL', TIBUpdateSQLInsertSQLProperty); {do not localize}
455     RegisterPropertyEditor(TypeInfo(TStrings), TIBUpdateSQL, 'DeleteSQL', TIBUpdateSQLDeleteProperty); {do not localize}
456     RegisterPropertyEditor(TypeInfo(TStrings), TIBEvents, 'Events', TIBEventListProperty); {do not localize}
457     RegisterPropertyEditor(TypeInfo(TPersistent), TIBDataSet, 'GeneratorField', TIBGeneratorProperty); {do not localize}
458     RegisterPropertyEditor(TypeInfo(TPersistent), TIBQuery, 'GeneratorField', TIBGeneratorProperty); {do not localize}
459    
460     RegisterComponentEditor(TIBDatabase, TIBDatabaseEditor);
461     RegisterComponentEditor(TIBTransaction, TIBTransactionEditor);
462     RegisterComponentEditor(TIBUpdateSQL, TIBUpdateSQLEditor);
463     RegisterComponentEditor(TIBDataSet, TIBDataSetEditor);
464     RegisterComponentEditor(TIBQuery, TIBQueryEditor);
465     RegisterComponentEditor(TIBStoredProc, TIBStoredProcEditor);
466     RegisterComponentEditor(TIBSQL, TIBSQLEditor);
467     RegisterComponentEditor(TIBCustomService, TIBServiceEditor);
468 tony 45 RegisterComponentEditor(TIBArrayGrid, TIBArrayGridEditor);
469 tony 33
470    
471     {Firebird Data Access Controls}
472     RegisterPropertyEditor(TypeInfo(string), TDBLookupProperties, 'KeyField', TDBDynamicGridFieldProperty);
473     RegisterPropertyEditor(TypeInfo(string), TDBLookupProperties, 'ListField', TDBDynamicGridFieldProperty);
474     RegisterPropertyEditor(TypeInfo(string), TIBDynamicGrid, 'IndexFieldNames', TIBDynamicGridIndexNamesProperty);
475     RegisterPropertyEditor(TypeInfo(string), TDBLookupProperties, 'DataFieldName', TDBLookupPropertiesGridFieldProperty);
476     RegisterPropertyEditor(TypeInfo(string), TIBTreeView, 'KeyField', TIBTreeViewFieldProperty);
477     RegisterPropertyEditor(TypeInfo(string), TIBTreeView, 'TextField', TIBTreeViewFieldProperty);
478     RegisterPropertyEditor(TypeInfo(string), TIBTreeView, 'ParentField', TIBTreeViewFieldProperty);
479     RegisterPropertyEditor(TypeInfo(string), TIBTreeView, 'HasChildField', TIBTreeViewFieldProperty);
480    
481 tony 39 IBGUIInterface := TIBDSLCLInterface.Create;
482 tony 33 end;
483    
484     procedure LoadDataSourceFields(DataSource: TDataSource; List: TStrings);
485     var
486     DataSet: TDataSet;
487     i: Integer;
488     begin
489     if Assigned(DataSource) then
490     begin
491     DataSet := DataSource.DataSet;
492     if Assigned(DataSet) then
493     begin
494     if DataSet.Fields.Count > 0 then
495     DataSet.GetFieldNames(List)
496     else
497     begin
498     DataSet.FieldDefs.Update;
499     for i := 0 to DataSet.FieldDefs.Count - 1 do
500     List.Add(DataSet.FieldDefs[i].Name);
501     end;
502     end;
503     end;
504     end;
505    
506 tony 45 { TIBIndexDefsProperty }
507    
508     procedure TIBIndexDefsProperty.Edit;
509     var IndexDefs: TIndexDefs;
510     begin
511     IndexDefs := TIndexDefs(GetObjectValue);
512     if IndexDefs <> nil then
513     IndexDefs.Update;
514     inherited Edit;
515     end;
516    
517     { TIBFieldDefsProperty }
518    
519     procedure TIBFieldDefsProperty.Edit;
520     var FieldDefs: TFieldDefs;
521     begin
522     FieldDefs := TFieldDefs(GetObjectValue);
523     if FieldDefs <> nil then
524     FieldDefs.Update;
525     inherited Edit;
526     end;
527    
528     { TIBArrayGridEditor }
529    
530     procedure TIBArrayGridEditor.ExecuteVerb(Index: Integer);
531     begin
532     if Index < inherited GetVerbCount then
533     inherited ExecuteVerb(Index)
534     else
535     case Index of
536     0: TIBArrayGrid(Component).UpdateLayout;
537     end;
538     end;
539    
540     function TIBArrayGridEditor.GetVerb(Index: Integer): string;
541     begin
542     if Index < inherited GetVerbCount then
543     Result := inherited GetVerb(Index) else
544     begin
545     Dec(Index, inherited GetVerbCount);
546     case Index of
547     0: Result := SIBUpdateLayout;
548     1 : Result := SInterbaseExpressVersion ;
549     end;
550     end;
551     end;
552    
553     function TIBArrayGridEditor.GetVerbCount: Integer;
554     begin
555     Result := 2;
556     end;
557    
558 tony 33 { TDBLookupPropertiesGridFieldProperty }
559    
560     procedure TDBLookupPropertiesGridFieldProperty.FillValues(
561     const Values: TStringList);
562     var
563     P: TDBLookupProperties;
564     begin
565     P :=TDBLookupProperties(GetComponent(0));
566     if not (P is TDBLookupProperties) then exit;
567     LoadDataSourceFields(TIBDynamicGrid(P.Owner.Grid).DataSource, Values);
568     end;
569    
570     { TIBTreeViewFieldProperty }
571    
572     procedure TIBTreeViewFieldProperty.FillValues(const Values: TStringList);
573     var ListSource: TDataSource;
574     begin
575     ListSource := TIBTreeView(GetComponent(0)).DataSource;
576     LoadDataSourceFields(ListSource, Values);
577     end;
578    
579     { TIBDynamicGridIndexNamesProperty }
580    
581     function TIBDynamicGridIndexNamesProperty.GetFieldDefs: TFieldDefs;
582     var Grid: TIBDynamicGrid;
583     begin
584     Result := nil;
585     Grid := TIBDynamicGrid(GetComponent(0));
586     if assigned(Grid.DataSource) and assigned(Grid.DataSource.DataSet) then
587     Result := Grid.DataSource.DataSet.FieldDefs
588     end;
589    
590     function TIBDynamicGridIndexNamesProperty.GetIndexFieldNames: string;
591     var Grid: TIBDynamicGrid;
592     begin
593     Grid := TIBDynamicGrid(GetComponent(0));
594     Result := Grid.IndexFieldNames
595     end;
596    
597     procedure TIBDynamicGridIndexNamesProperty.SetIndexFieldNames(
598     const Value: string);
599     var Grid: TIBDynamicGrid;
600     begin
601     Grid := TIBDynamicGrid(GetComponent(0));
602     Grid.IndexFieldNames := Value
603     end;
604    
605     { TDBDynamicGridFieldProperty }
606    
607     procedure TDBDynamicGridFieldProperty.FillValues(const Values: TStringList);
608     var
609     P: TDBLookupProperties;
610     begin
611     P :=TDBLookupProperties(GetComponent(0));
612     if not (P is TDBLookupProperties) then exit;
613     LoadDataSourceFields(P.ListSource, Values);
614     end;
615    
616     { TIBServiceEditor }
617    
618     procedure TIBServiceEditor.ExecuteVerb(Index: Integer);
619     begin
620     if Index < inherited GetVerbCount then
621     inherited ExecuteVerb(Index) else
622     begin
623     Dec(Index, inherited GetVerbCount);
624     case Index of
625     0 : if ibserviceeditor.EditIBService(TIBCustomService(Component)) then Designer.Modified;
626     end;
627     end;
628     end;
629    
630     function TIBServiceEditor.GetVerb(Index: Integer): string;
631     begin
632     if Index < inherited GetVerbCount then
633     Result := inherited GetVerb(Index) else
634     begin
635     Dec(Index, inherited GetVerbCount);
636     case Index of
637     0: Result := SIBServiceEditor;
638     1 : Result := SInterbaseExpressVersion;
639     end;
640     end;
641     end;
642    
643     function TIBServiceEditor.GetVerbCount: Integer;
644     begin
645     Result := inherited GetVerbCount + 2;
646     end;
647    
648     { TIBFileNameProperty }
649     procedure TIBFileNameProperty.Edit;
650     begin
651     with TOpenDialog.Create(Application) do
652     try
653     InitialDir := ExtractFilePath(GetStrValue);
654     Filter := SDatabaseFilter; {do not localize}
655     if Execute then
656     SetStrValue(FileName);
657     finally
658     Free
659     end;
660     end;
661    
662     function TIBFileNameProperty.GetAttributes: TPropertyAttributes;
663     begin
664     Result := [paDialog];
665     end;
666    
667     { TIBNameProperty }
668    
669     function TIBNameProperty.GetAttributes: TPropertyAttributes;
670     begin
671     Result := [paValueList, paSortList];
672     end;
673    
674     { TIBStoredProcNameProperty }
675    
676     procedure TIBStoredProcNameProperty.GetValues(Proc: TGetStrProc);
677     var
678     StoredProc : TIBStoredProc;
679     i : integer;
680     begin
681     StoredProc := GetComponent(0) as TIBStoredProc;
682     if StoredProc.Database = nil then
683     Exit;
684    
685     with StoredProc do
686     try
687     for I := 0 to StoredProcedureNames.Count - 1 do
688     Proc (StoredProcedureNames[i]);
689     except on E: Exception do
690     MessageDlg(E.Message,mtError,[mbOK],0)
691     end;
692     end;
693    
694     { TIBTableNameProperty }
695    
696     procedure TIBTableNameProperty.GetValues(Proc: TGetStrProc);
697     var
698     Table : TIBTable;
699     i : integer;
700     begin
701     Table := GetComponent(0) as TIBTable;
702     if Table.Database = nil then
703     Exit;
704     with Table do
705     for I := 0 to TableNames.Count - 1 do
706     Proc (TableNames[i]);
707     end;
708    
709     { TDBStringProperty }
710    
711     function TDBStringProperty.ConnecttoDB: boolean;
712     var DataSet: TIBCustomDataSet;
713     begin
714     Result := false;
715     DataSet := (GetComponent(0) as TIBCustomDataSet);
716     if assigned(Dataset.Database) then
717     begin
718     try
719     DataSet.Database.Connected := true;
720     except on E: Exception do
721     ShowMessage(E.Message)
722     end;
723     Result := DataSet.Database.Connected
724     end;
725     end;
726    
727     function TDBStringProperty.GetAttributes: TPropertyAttributes;
728     begin
729     Result := [paValueList, paSortList, paMultiSelect];
730     end;
731    
732     procedure TDBStringProperty.GetValueList(List: TStrings);
733     begin
734     end;
735    
736     procedure TDBStringProperty.GetValues(Proc: TGetStrProc);
737     var
738     I: Integer;
739     Values: TStringList;
740     begin
741     if not ConnecttoDB then Exit;
742     Values := TStringList.Create;
743     try
744     GetValueList(Values);
745     for I := 0 to Values.Count - 1 do Proc(Values[I]);
746     finally
747     Values.Free;
748     end;
749     end;
750    
751     procedure TDBStringProperty.Edit;
752     begin
753     if ConnecttoDB then
754     inherited Edit;
755     end;
756    
757     { Utility Functions }
758    
759     function GetPropertyValue(Instance: TPersistent; const PropName: string): TPersistent;
760     var
761     PropInfo: PPropInfo;
762     begin
763     Result := nil;
764     PropInfo := TypInfo.GetPropInfo(Instance.ClassInfo, PropName);
765     if (PropInfo <> nil) and (PropInfo^.PropType^.Kind = tkClass) then
766     Result := TObject(GetOrdProp(Instance, PropInfo)) as TPersistent;
767     end;
768    
769     function GetIndexDefs(Component: TPersistent): TIndexDefs;
770     var
771     DataSet: TDataSet;
772     begin
773     DataSet := Component as TDataSet;
774     Result := GetPropertyValue(DataSet, 'IndexDefs') as TIndexDefs; {do not localize}
775     if Assigned(Result) then
776     begin
777     Result.Updated := False;
778     Result.Update;
779     end;
780     end;
781    
782     { TIBIndexFieldNamesProperty }
783    
784     procedure TIBIndexFieldNamesProperty.GetValueList(List: TStrings);
785     var
786     I: Integer;
787     IndexDefs: TIndexDefs;
788     begin
789     IndexDefs := GetIndexDefs(GetComponent(0));
790     for I := 0 to IndexDefs.Count - 1 do
791     with IndexDefs[I] do
792     if (Options * [ixExpression, ixDescending] = []) and (Fields <> '') then
793     List.Add(Fields);
794     end;
795    
796    
797     { TIBIndexNameProperty }
798    
799     procedure TIBIndexNameProperty.GetValueList(List: TStrings);
800     begin
801     GetIndexDefs(GetComponent(0)).GetItemNames(List);
802     end;
803    
804     { TSQLPropertyEditor }
805    
806     function TSQLPropertyEditor.GetAttributes: TPropertyAttributes;
807     begin
808     Result := inherited GetAttributes + [paDialog] - [paMultiSelect,paSubProperties];
809     end;
810    
811     { TIBQuerySQLProperty }
812    
813     procedure TIBQuerySQLProperty.Edit;
814     var
815     Query: TIBQuery;
816     begin
817     Query := GetComponent(0) as TIBQuery;
818     if IBSelectSQLEditor.EditSQL(Query,Query.SQL) then Modified;
819     end;
820    
821     { TIBDatasetSQLProperty }
822    
823     procedure TIBDatasetSQLProperty.Edit;
824     var
825     IBDataset: TIBDataset;
826     begin
827     IBDataset := GetComponent(0) as TIBDataset;
828     if IBSelectSQLEditor.EditSQL(IBDataSet,IBDataSet.SelectSQL) then Modified;
829     end;
830    
831     { TIBSQLProperty }
832    
833     procedure TIBSQLProperty.Edit;
834     var
835     IBSQL: TIBSQL;
836     begin
837     IBSQL := GetComponent(0) as TIBSQL;
838     if IBSQLEditor.EditIBSQL(IBSQL) then Modified;
839     end;
840    
841     { TIBUpdateSQLEditor }
842    
843     procedure TIBUpdateSQLEditor.ExecuteVerb(Index: Integer);
844     begin
845     if IBUpdateSQLEditor.EditIBUpdateSQL(TIBUpdateSQL(Component)) then Modified;
846     end;
847    
848     function TIBUpdateSQLEditor.GetVerb(Index: Integer): string;
849     begin
850     case Index of
851     0 : Result := SIBUpdateSQLEditor;
852 tony 45 1: Result := SInterbaseExpressVersion ;
853 tony 33 end;
854     end;
855    
856     function TIBUpdateSQLEditor.GetVerbCount: Integer;
857     begin
858     Result := 2;
859     end;
860    
861     { TIBDataSetEditor }
862    
863     procedure TIBDataSetEditor.ExecuteVerb(Index: Integer);
864     begin
865     if Index < inherited GetVerbCount then
866     inherited ExecuteVerb(Index) else
867     begin
868     Dec(Index, inherited GetVerbCount);
869     case Index of
870     0:
871     if IBDataSetEditor.EditIBDataSet(TIBDataSet(Component)) then
872     Designer.Modified;
873     1: (Component as TIBDataSet).ExecSQL;
874     end;
875     end;
876     end;
877    
878     function TIBDataSetEditor.GetVerb(Index: Integer): string;
879     begin
880     if Index < inherited GetVerbCount then
881     Result := inherited GetVerb(Index) else
882     begin
883     Dec(Index, inherited GetVerbCount);
884     case Index of
885     0: Result := SIBDataSetEditor;
886     1: Result := SExecute;
887 tony 45 2: Result := SInterbaseExpressVersion ;
888 tony 33 end;
889     end;
890     end;
891    
892     function TIBDataSetEditor.GetVerbCount: Integer;
893     begin
894     Result := inherited GetVerbCount + 3;
895     end;
896    
897     { TIBEventListProperty }
898    
899     function TIBEventListProperty.GetAttributes: TPropertyAttributes;
900     begin
901     Result := inherited GetAttributes + [paDialog] - [paMultiSelect,paSubProperties];
902     end;
903    
904     procedure TIBEventListProperty.Edit;
905     var
906     Events: TStrings;
907     IBEvents: TIBEvents;
908     begin
909     IBEvents := GetComponent(0) as TIBEvents;
910     Events := TStringList.Create;
911     try
912     Events.Assign( IBEvents.Events);
913     if EditAlerterEvents( Events) then
914     begin
915     IBEvents.Events.Assign(Events);
916     Modified
917     end;
918     finally
919     Events.Free;
920     end;
921     end;
922    
923     { TIBDatabaseEditor }
924     procedure TIBDatabaseEditor.ExecuteVerb(Index: Integer);
925     begin
926     if Index < inherited GetVerbCount then
927     inherited ExecuteVerb(Index) else
928     begin
929     Dec(Index, inherited GetVerbCount);
930     case Index of
931     0 : if EditIBDatabase(TIBDatabase(Component)) then Designer.Modified;
932     end;
933     end;
934     end;
935    
936     function TIBDatabaseEditor.GetVerb(Index: Integer): string;
937     begin
938     if Index < inherited GetVerbCount then
939     Result := inherited GetVerb(Index) else
940     begin
941     Dec(Index, inherited GetVerbCount);
942     case Index of
943     0: Result := SIBDatabaseEditor;
944 tony 45 1 : Result := SInterbaseExpressVersion ;
945 tony 33 end;
946     end;
947     end;
948    
949     function TIBDatabaseEditor.GetVerbCount: Integer;
950     begin
951     Result := inherited GetVerbCount + 2;
952     end;
953    
954     { TIBTransactionEditor }
955    
956     procedure TIBTransactionEditor.ExecuteVerb(Index: Integer);
957     begin
958     case Index of
959     0: if EditIBTransaction(TIBTransaction(Component)) then Designer.Modified;
960     end;
961     end;
962    
963     function TIBTransactionEditor.GetVerb(Index: Integer): string;
964     begin
965     case Index of
966     0: Result := SIBTransactionEditor;
967 tony 45 1: Result := SInterbaseExpressVersion ;
968 tony 33 end;
969     end;
970    
971     function TIBTransactionEditor.GetVerbCount: Integer;
972     begin
973     Result := 2;
974     end;
975    
976     { TIBQueryEditor }
977    
978     procedure TIBQueryEditor.ExecuteVerb(Index: Integer);
979     var
980     Query: TIBQuery;
981     begin
982     if Index < inherited GetVerbCount then
983     inherited ExecuteVerb(Index) else
984     begin
985     Query := Component as TIBQuery;
986     Dec(Index, inherited GetVerbCount);
987     case Index of
988     0: Query.ExecSQL;
989     1: if ibselectsqleditor.EditSQL(Query,Query.SQL) then Designer.Modified;
990     end;
991     end;
992     end;
993    
994     function TIBQueryEditor.GetVerb(Index: Integer): string;
995     begin
996     if Index < inherited GetVerbCount then
997     Result := inherited GetVerb(Index) else
998     begin
999     Dec(Index, inherited GetVerbCount);
1000     case Index of
1001     0: Result := SExecute;
1002     1: Result := SEditSQL;
1003 tony 45 2: Result := SInterbaseExpressVersion ;
1004 tony 33 end;
1005     end;
1006     end;
1007    
1008     function TIBQueryEditor.GetVerbCount: Integer;
1009     begin
1010     Result := inherited GetVerbCount + 3;
1011     end;
1012    
1013     { TIBStoredProcEditor }
1014    
1015     procedure TIBStoredProcEditor.ExecuteVerb(Index: Integer);
1016     begin
1017     if Index < inherited GetVerbCount then
1018     inherited ExecuteVerb(Index) else
1019     begin
1020     Dec(Index, inherited GetVerbCount);
1021     if Index = 0 then (Component as TIBStoredProc).ExecProc;
1022     end;
1023     end;
1024    
1025     function TIBStoredProcEditor.GetVerb(Index: Integer): string;
1026     begin
1027     if Index < inherited GetVerbCount then
1028     Result := inherited GetVerb(Index) else
1029     begin
1030     Dec(Index, inherited GetVerbCount);
1031     case Index of
1032     0: Result := SExecute;
1033 tony 45 1: Result := SInterbaseExpressVersion ;
1034 tony 33 end;
1035     end;
1036     end;
1037    
1038     function TIBStoredProcEditor.GetVerbCount: Integer;
1039     begin
1040     Result := inherited GetVerbCount + 2;
1041     end;
1042    
1043     { TIBStoredProcParamsProperty }
1044    
1045     procedure TIBStoredProcParamsProperty.Edit;
1046     var
1047     StoredProc: TIBStoredProc;
1048     Params: TParams;
1049     begin
1050     StoredProc := (GetComponent(0) as TIBStoredProc);
1051     Params := TParams.Create(nil);
1052     try
1053     StoredProc.CopyParams(Params);
1054     finally
1055     Params.Free;
1056     end;
1057     inherited Edit;
1058     end;
1059    
1060     { TIBTableFieldLinkProperty }
1061    
1062     procedure TIBTableFieldLinkProperty.Edit;
1063     begin
1064     FTable := DataSet as TIBTable;
1065     if assigned(FTable.Database) then
1066     FTable.Database.Connected := true;
1067     inherited Edit;
1068     end;
1069    
1070     function TIBTableFieldLinkProperty.GetIndexDefs: TIndexDefs;
1071     begin
1072     Result := FTable.IndexDefs
1073     end;
1074    
1075     function TIBTableFieldLinkProperty.GetIndexFieldNames: string;
1076     begin
1077     Result := FTable.IndexFieldNames;
1078     end;
1079    
1080     function TIBTableFieldLinkProperty.GetMasterFields: string;
1081     begin
1082     Result := FTable.MasterFields;
1083     end;
1084    
1085     procedure TIBTableFieldLinkProperty.SetIndexFieldNames(const Value: string);
1086     begin
1087     FTable.IndexFieldNames := Value;
1088     end;
1089    
1090     procedure TIBTableFieldLinkProperty.SetMasterFields(const Value: string);
1091     begin
1092     FTable.MasterFields := Value;
1093     end;
1094    
1095     { TIBUpdateSQLProperty }
1096    
1097     procedure TIBUpdateSQLProperty.Edit;
1098     var
1099     IBDataset: TIBDataset;
1100     begin
1101     IBDataset := GetComponent(0) as TIBDataset;
1102     if IBModifySQLEditor.EditSQL(IBDataSet,IBDataSet.ModifySQL) then Modified;
1103     end;
1104    
1105     { TIBUpdateSQLUpdateProperty }
1106    
1107     procedure TIBUpdateSQLUpdateProperty.Edit;
1108     begin
1109     GetObjects;
1110     if IBModifySQLEditor.EditSQL(FIBUpdateSQL.DataSet,FIBUpdateSQL.ModifySQL) then Modified;
1111     end;
1112    
1113     { TIBRefreshSQLProperty }
1114    
1115     procedure TIBRefreshSQLProperty.Edit;
1116     var
1117     IBDataset: TIBDataset;
1118     begin
1119     IBDataset := GetComponent(0) as TIBDataset;
1120     if IBRefreshSQLEditor.EditSQL(IBDataSet,IBDataSet.RefreshSQL) then Modified;
1121     end;
1122    
1123     { TIBUpdateSQLRefreshSQLProperty }
1124    
1125     procedure TIBUpdateSQLRefreshSQLProperty.Edit;
1126     begin
1127     GetObjects;
1128     if IBRefreshSQLEditor.EditSQL(FIBUpdateSQL.DataSet,FIBUpdateSQL.RefreshSQL) then Modified;
1129     end;
1130    
1131     { TIBDeleteSQLProperty }
1132    
1133     procedure TIBDeleteSQLProperty.Edit;
1134     var
1135     IBDataset: TIBDataSet;
1136     begin
1137     IBDataset := GetComponent(0) as TIBDataSet;
1138     if IBDeleteSQLEditor.EditSQL(IBDataSet,IBDataSet.DeleteSQL) then Modified;
1139     end;
1140    
1141     { TIBUpdateSQLDeleteProperty }
1142    
1143     function TIBUpdateSQLDeleteProperty.GetAttributes: TPropertyAttributes;
1144     begin
1145     Result:=inherited GetAttributes;
1146     end;
1147    
1148     procedure TIBUpdateSQLDeleteProperty.Edit;
1149     begin
1150     GetObjects;
1151     if IBDeleteSQLEditor.EditSQL(FIBUpdateSQL.DataSet,FIBUpdateSQL.DeleteSQL) then Modified;
1152     end;
1153    
1154     { TUpdateSQLPropertyEditor }
1155    
1156     function TUpdateSQLPropertyEditor.GetObjects: boolean;
1157     begin
1158     Result := false;
1159     FIBUpdateSQL := GetComponent(0) as TIBUpdateSQL;
1160     if not assigned(FIBUpdateSQL) or not assigned(FIBUpdateSQL.DataSet) then
1161     Exit;
1162     FDatabase := nil;
1163     if FIBUpdateSQL.DataSet is TIBQuery then
1164     begin
1165     FDatabase := (FIBUpdateSQL.DataSet as TIBQuery).Database;
1166     Result := true
1167     end;
1168     end;
1169    
1170     { TIBInsertSQLProperty }
1171    
1172     procedure TIBInsertSQLProperty.Edit;
1173     var
1174     IBDataset: TIBDataSet;
1175     begin
1176     IBDataset := GetComponent(0) as TIBDataSet;
1177     if IBInsertSQLEditor.EditSQL(IBDataSet,IBDataSet.InsertSQL) then Modified;
1178     end;
1179    
1180     { TIBUpdateSQLInsertSQLProperty }
1181    
1182     procedure TIBUpdateSQLInsertSQLProperty.Edit;
1183     begin
1184     GetObjects;
1185     if IBInsertSQLEditor.EditSQL(FIBUpdateSQL.Dataset,FIBUpdateSQL.InsertSQL) then Modified;
1186     end;
1187    
1188     { TIBGeneratorProperty }
1189    
1190     function TIBGeneratorProperty.GetAttributes: TPropertyAttributes;
1191     begin
1192     Result:= inherited GetAttributes + [paDialog] - [paMultiSelect,paValueList];
1193     end;
1194    
1195     procedure TIBGeneratorProperty.Edit;
1196     begin
1197     if IBGeneratorEditor.EditGenerator(GetPersistentReference as TIBGenerator) then Modified;
1198     end;
1199    
1200     { TIBSQLEditor }
1201    
1202     procedure TIBSQLEditor.ExecuteVerb(Index: Integer);
1203     begin
1204     if IBSQLEditor.EditIBSQL(TIBSQL(Component)) then Modified;
1205     end;
1206    
1207     function TIBSQLEditor.GetVerb(Index: Integer): string;
1208     begin
1209     case Index of
1210     0 : Result := SIBSQLEditor;
1211 tony 45 1: Result := SInterbaseExpressVersion ;
1212 tony 33 end;
1213     end;
1214    
1215     function TIBSQLEditor.GetVerbCount: Integer;
1216     begin
1217     Result:= 2
1218     end;
1219    
1220     { TIBSQLSQLPropertyEditor }
1221    
1222     procedure TIBSQLSQLPropertyEditor.Edit;
1223     var
1224     IBSQL: TIBSQL;
1225     begin
1226     IBSQL := GetComponent(0) as TIBSQL;
1227     if IBSQLEditor.EditIBSQL(IBSQL) then Modified;
1228     end;
1229    
1230     initialization
1231     {$I IBDBReg.lrs}
1232     end.