Hallo !
Ich habe ein kleines aber feines Problem. Habe mir eine Komponente gebastelt, deren Quelltext ich hier mal aufs nötigste darstelle.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| type TKirchComboBox = class(TComboBox) private FHasSelection:Boolean; function GetFSQL: String; procedure SetSQL(const Value: String);
function GetDataBaseName: String; procedure SetDataBaseName(const Value: String);
procedure SetHasAll(const Value: Boolean);
protected procedure Change; override;
public FQuery : TQuery; constructor Create(AOwner: TComponent); override; destructor Destroy; override;
property _HasSelection: Boolean read FHasSelection; procedure RefreshContent;
published property _NoSelectionText: String read GetFNoSelText write SetFNoSelText; property _SQLText:String read GetFSQL write SetSQL; property _DataBaseName:String read GetDataBaseName write SetDataBaseName; property _HasAll:Boolean read FHasAll write SetHasAll; end;
implementation
procedure TKirchComboBox.SetSQL(const Value: String); begin if FQuery.DatabaseName <> '' then begin FQuery.SQL.Text := Value; FQuery.Active := true; RefreshContent; end; end; |
Hier kommt das Problem:
Wenn ich in der Entwicklungsumgebung die Eigenschaft _SQLText setze, funktioniert auch alles, die Box wird gefüllt.
Wenn ich nun aber das Programm starte, kennt die CB die SQL-Anweisung nicht mehr, die in der Entwicklungsumgebung noch vorhanden war. Ich habe mittlerweile auch herausgefunden, warum:
In den Eintragungen für die Form zum späteren Erstellen werden die eingestellten Eigenschaften folgendermaßen notiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| object KCBGem: TKirchComboBox [...] Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] ItemHeight = 13 ItemIndex = 0 ParentFont = False TabOrder = 1 OnChange = KCBGemChange Items.Strings = ( [blabla] ) _NoSelectionText = 'Alle Gemeinden' _SQLText = 'SELECT name FROM Gemeinden' _DataBaseName = 'DBMain' _HasAll = False end |
Wie man oben sieht, kann ich schlecht eine SQL-Query aktivieren, wenn ich keine DataBase angegeben habe. Nur leider wird die Eigenschaft _DataBaseName erst NACH dem setzen der _SQLText-Eigenschaft aufgerufen, und wie man oben in er Prozedur sehen kann, geschieht natürlich nichts wenn DBName nicht gesetzt ist.
Wie kann man diese Reihenfolge ändern ? Manuell wird sie wieder überschrieben, jedesmal wieder ein fehler.
Ich möchte mir nicht das SQL merken müssen, und es bei SetDataBaseName mit if "sql_anweisung_da" then _SQLText := (<SQL-Anw>) festlegen müssen.
Gibts noch nen komfortableren weg ?
Danke für alle Vorschläge !
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt.