Hallo alle,
ich bastle gerade (mit D7 Prof) an
DB-Komponenten
{
Das Konzept: Die Kompos sollen Daten aus einer
IB-Datenbank anzeigen und bearbeiten, und zwar unabhängig vom aktuellen Datensatz der DataSets.
Dazu werden ein paar Eigenschaften eingestellt und dann automatisch interne dynamische
SQL-Statements zum Abrufen oder Ändern erzeugt ausgeführt. Bei Änderungen wird das angebundene Dataset geschlossen, neu geöffnet und der vorherige Datansatz wieder lokalisiert. Man kann in den Eigenschaften immer auch einen "ID-Wert" definieren (sofern die betreffende Tabelle über ein ID-Feld verfügt), woraufhin dann immer DER entsprechende Datensatz verwendet wird. Im Ergebnis hat man Komponenten, die sich aus einer Datenbank immer automatisch auf "Ihre Daten" beziehen, ohne dass dies Auswirkungen auf andere Komponenten hat, es wird durch sie keine Datensatzposition verändert, und wenn doch (z.B. durch ein externes DBGrid), zeigen die Kompos immer weiter "Ihre" Daten an (bis es mal Änderungen an "Ihrem" Datensatz gibt). Änderungen werden sofort gespeichert und aktualisiert, einen dsEdit-Modus gibt es hier praktisch nicht mehr.
Es gibt auch eine Kompo, die mehrere Datensätze anzeigt (ähnlich einen BDGrid) und z.B. automatisch Verschiebungen der Positionen durch Drag&Drop ermöglicht.
Grundsätzlich hat das schon funktioniert, ich bin aber nun am Aufräumen und Optimieren.
Wer das verstanden und Interesse hat... gerne.
}
, so z.B.
Delphi-Quellcode:
TDBEditSql = class(TCustomEdit)
private
FOldText:String;
FDBSql:TDBSql;
...
published
property DBSQL:TDBSQL read FDBSQL write FDBSQL;
end;
Die gesamte (zumindest wesentliche) Datenbanklogik will ich nun möglichst in TDBSql kapseln, damit ich sie auch in anderen Komponenten weiterverwerten kann und die Kompos übersichtlich bleiben.
Delphi-Quellcode:
TDBSql=class(TComponent)
private
FFieldName:String;
FField:TField;
FValue:String;
...
published
property EnabledControl:Boolean read FEnabledControl write SetEnabledControl;
property FieldName:string read FFieldName write SetFieldName;
property DataSource:TDataSource read GetDataSource write SetDataSource;
...
end;
TDBEditSql ist registriert, im Objektinspektor wird DBSql zum Aufklappen angeboten und die veröffentlichten (Unter-)Eigenschaften können auch eingegeben werden (ohne extra einen Editor geschrieben zu haben!).
Das funktioniert soweit super, nur werden die Eigenschaften grün dargestellt und weder von der
IDE gespeichert noch in die Exe übergeben.
Testweise habe ich TDBSql registriert, ins Formular eingesetzt und ein paar Eigenschaften definiert. Dann ist alles "normal" (schwarze Schrift und werden gespeichert).
Wie kann ich die Untereigenschaften "schwarz machen"
) ?
Danke schon mal
von Stahli
@MaBuSe: Ich bin beeindruckt, was Du hier leistest!!! Konnte aber trotzdem noch keine Lösung für mich finden...
[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]