Sign in Join
Wiki copytemporary

Databases in Lazarus/de: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Ziel
22
33Diese Seite liefert einen allgemeinen Überblick über die Verwendung von Datenbanken in Lazarus. Sie soll auch eine Seite sein, von der aus andere Datenbankseiten erreicht werden können.
44
55## Datasets
66
77Die Verwendung von Datenbanken in Lazarus (oder FreePascal) basiert hauptsächlich auf der Klasse 'TDataset'. Diese repräsentiert für Ihre Anwendung eine Tabelle oder Abfrage. Aber wie bei vielen anderen fundamentalen Klassen, benutzen Sie nicht die Klasse 'TDataset' selbst, sondern einen Nachkommen von ihr. Davon gibt es viele. Sie bieten Zugriff auf unterschiedliche Arten von Datenbanken, sowohl auf lokale Datenbanken und Textdateien als auch auf Serverdatenbanken wie PostgreSQL, Firebird, MySQl und so weiter. Einige TDataset-Abkömmlinge linken direkt auf Datenbanktabellen, während andere dafür zusätzliche Komponenten oder Bibliotheken benötigen.
88
99Die Seite [[Databases/de]] dokumentiert solche Nachkommen.
1010
1111Dataset-Nachkommen die nichtvisuelle Komponenten sind, finden Sie (normalerweise) als Teil der Free Component Library (FCL), seltener in der Lazarus Component Library (LCL).
1212
1313## Verwendung von Datasets
1414
1515Sie können Datasets programmatisch oder auch mit visuellen Steuerelementen verwenden. Eine typische Lazarus-Datenbankanwendung benutzt oft beide Verfahren. In jedem Fall ist der erste Schritt das Erzeugen eines TDataset-Nachkommen, ihn zu initialisieren für eine Verbindung mit der gewünschen Tabelle oder Abfrage, und diese zu öffnen. Dies kann entweder im Code zur Laufzeit geschehen oder Sie geben eine Komponente auf Ihr Formular und stellen deren Eigenschaften zur Entwurfszeit ein. Die Details dazu unterscheiden sich erheblich (abhängig von den verschiedenen TDataset-Nachkommen), schauen Sie also unter [[Databases/de]] nach, was für Ihre jeweilige Datenbank gemacht werden muss.
1616
1717Wenn das Dataset geöffnet ist, wird eine Anzahl von Feldkomponenten erzeugt, eine für jedes Feld oder jede Spalte Ihrer geöffneten Tabelle oder Abfrage. Jede Feldkomponente ist ein Nachkomme von TField, passend für den besonderen Datentyp des Feldes, z.B. TStringField.
1818
1919### Verwendung von Datasets aus dem Code heraus
2020
2121Der programmatische Zugriff wird detaillierter erklärt in [[Using Dataset and Field components]], aber als sehr einfacher Überblick folgendes:
2222
2323- Nehmen Sie einen TDataset-Nachkommen zum Öffnen der Tabelle oder Abfrage, zum Filtern der Zeilen nach gewünschten Daten, und zum Bewegen von Zeile zu Zeile.
2424- Nehmen Sie die TField-Nachkommen für:
2525 - den Zugriff auf allgemeine Informationen über Felder
2626 - den Zugriff auf bestimmte Datenwerte der aktuellen Zeile. (Verwenden Sie Eigenschaften 'As...', wie in AsString, AsInteger, etc.)
2727- Greifen Sie auf die Felder des TDataset-Nachkommen zu, entweder durch:
2828 - die Eigenschaft 'Fields', z.B. Fields\[0\] ist das erste Feld, oder durch
2929 - die Methode 'FieldByName', z.B. FieldByName('ALTER') ergibt das Feld verbunden mit dem Datenbankfeld namens 'ALTER'
3030
3131### Verwendung der visuellen (datenabhängigen) Steuerelemente
3232
3333Um Datenbanken in einer einfachen, grafischen Lazarus-Anwendung zu benutzen, konfigurieren Sie üblicherweise den TDataset-Nachkommen zur Entwurfszeit und verwenden dann die datenabhängigen Steuerelemente. Dazu ist folgendes nötig:
3434
3535- Fügen Sie einen TDataset-Nachkommen für die Datenbank Ihrer Wahl Ihrem Formular hinzu, zusammen mit etwaigen Hilfskomponenten, und öffnen Sie die ihn (Setzen Sie die Eigenschaft 'Active' auf 'true').
3636- Fügen Sie eine TDatasource-Komponente (von der Komponentenseite "Data Access") zu Ihrem Formular hinzu, und "verknüpfen" Sie diese mit dem Dataset (= setzen Sie die Eigenschaft 'DataSet').
3737- Fügen Sie datenabhängige Steuerelemente (von der Komponentenseite "Data Controls") zu Ihrem Formular hinzu, und verknüpfen Sie ein jedes mit der Komponente 'DataSource' (nicht 'Dataset'!).
3838- Die meisten Steuerelemente verknüpfen ein einzelnes Feld, deshalb müssen Sie auch das Feld genau angeben.
3939
4040Siehe #Data Controls unten für weitere Details über die Steuerelemente
4141
4242### Status der Datenmengen (Datasets)
4343
4444Datasets können mehrere Zustände einnehmen. Obwohl es mehr solche gibt (-sehen Sie dazu im Quelltext von 'TDataSetState' nach-), sind die wichtigsten, die Sie anfangs kennen sollten:
4545
46-<table>
47-
48-<tr>
49-
50-<th>
51-
5246Status
5347
54-</th>
55-
56-<th>
57-
5848Funktion
5949
60-</th>
61-
62-</tr>
63-
64-<tr>
65-
66-<td>
67-
6850dsInactive
6951
70-</td>
71-
72-<td>
73-
7452Die Datenmenge ist geschlossen.
7553
76-</td>
77-
78-</tr>
79-
80-<tr>
81-
82-<td>
83-
8454dsBrowse
8555
86-</td>
87-
88-<td>
89-
9056Der Benutzer kann durch die Datenmenge blättern und die Werte betrachten.
9157
92-</td>
93-
94-</tr>
95-
96-<tr>
97-
98-<td>
99-
10058dsEdit
10159
102-</td>
103-
104-<td>
105-
10660Der Benutzer kann die Werte der aktuellen Zeile bearbeiten. Die Werte werden erst gespeichert, wenn das Senden (engl. "post") ausgeführt wurde.
10761
108-</td>
109-
110-</tr>
111-
112-<tr>
113-
114-<td>
115-
11662dsInsert
11763
118-</td>
119-
120-<td>
121-
12264Eine neue Zeile wurde angefügt und der Benutzer kann die Werte eingeben. Dieser Datensatz wird erst gespeichert, wenn das Senden (engl. "post") ausgeführt wurde.
123-
124-</td>
125-
126-</tr>
127-
128-</table>
12965
13066Die anderen Zustände sind ziemlich vorübergehend und werden normalerweise "automatisch" verarbeitet. Sie werden nur intern und in komplizierterem Code gebraucht. Falls Ihre Datenbank nur die Daten anzeigt, und Sie die Datenmenge zur Entwurfszeit öffnen, können Sie den Status überhaupt ignorieren, da er meisten bei 'dsBrowse' liegt. Trotzdem werden die meisten Anwendungen irgendwann auch die Daten ändern müssen. Wenn Sie dazu datenabhängige Steuerelemente benutzen, werden diese viele Dinge automatisch regeln. Wenn Sie beispielsweise den Text in einem DBEdit-Steuerelement ändern, versetzt dieses die Datenmenge in den Zustand 'dsEdit' - außer sie ist bereits in 'dsEdit' oder 'dsInsert'. Wenn Sie zu einem anderen Datensatz "springen" während der Status bei 'dsEdit' oder 'dsInsert' ist, dann wird dieser Datensatz "gesendet" und die Datenmenge kehrt zurück zum Zustand 'dsBrowse'. Falls Sie allerdings aus Ihrem Code heraus auf die Datenmenge zugreifen, werden Sie auch öfter den Status im Code ändern müssen. Das Steuerelement dbNavigator (siehe unten) erlaubt dem Benutzer ausdrücklich, auch den Zustand zu ändern.
13167
13268### Senden und Abbrechen (Post and Cancel)
13369
13470Wenn Sie einen Datensatz bearbeitet oder eingefügt haben, werden die neuen Werte in einem Puffer gehalten.
13571
13672- Der Aufruf der TDataset-Methode 'Cancel' entfernt einen neu eingefügten Datensatz oder setzt die bearbeiteten Werte auf die vorherigen Werte zurück.
13773- Der Aufruf der TDataset-Methode 'Post' speichert die bearbeiteten Werte oder den eingefügten Datensatz. Bei einigen Nachkommen von TDataset werden diese sofort in die Datenbank geschrieben, während diese bei anderen erst zu einer Änderungsliste gespeichert werden bis ein weiterer Aufruf sämtliche Änderungen in der Datenbank speichert. Möglicherweise müssen Sie sogar noch eine Methode "commit" aufrufen, damit die Datenbank Ihre Änderungen endgültig übernimmt. All dies variiert aber mit dem eingesetzten TDataset-Nachkommen, schlagen Sie also die Details für den von Ihnen benutzen nach.
13874
13975## Datensteuerelemente
14076
14177Um diese Steuerelemente zu verwenden, fügen Sie das Steuerelement Ihrem Formular hinzu und setzen Sie zumindest die Eigenschaft 'Datasource'. Andere wichtige Eigenschaften sind angegeben.
14278
14379### Steuerelemente für einzelne Felder
14480
14581Diese Steuerelemente betreffen alle ein einzelnes Feld. Geben Sie neben der Datenquelle 'Datasource' auch den Feldnamen an. Diese Steuerelemente enthalten:
14682
14783- [[doc:lcl/dbctrls/tdbtext.html|DBText control]] zeigt ein Textfeld an (schreibgeschützt, kein Rand)
14884- [[doc:lcl/dbctrls/tdbedit.html|DBEdit control]] zeigt / bearbeitet ein Textfeld als Eingabefeld
14985- [[doc:lcl/dbctrls/tdbmemo.html|DBMemo control]] zeigt / bearbeitet ein Textfeld als mehrzeiliges Eingabefeld
15086- [[doc:lcl/dbctrls/tdbimage.html|DBImage control]] zeigt ein Bild an, das in der Datenbank als BLOB gespeichert ist
15187- [[doc:lcl/dbctrls/tdblistbox.html|DBListBox control]] und [[doc:lcl/dbctrls/tdbcombobox.html|DBComboBox Control]] erlauben es dem Benutzer, Werte aus einer Werteliste in ein Datenbankfeld einzufügen. Die Werte der Liste stehen in der Eigenschaft 'Items' des Steuerelements
15288- [[doc:lcl/dbctrls/tdbcheckbox.html|DBCheckBox control]] zeigt / bearbeitet ein boole'sches Feld durch Ankreuzen/Löschen einer Checkbox
15389- [[doc:lcl/dbctrls/tdbradiogroup.html|DBRadioGroup control]] zeigt die Elemente in einer Radiogroup an, liest/setzt den Feldwert aus einer zugehörigen Werteliste
15490- [[doc:lcl/dbctrls/tdbcalendar.html|DBCalendar control]] zeigt / bearbeitet ein Datumsfeld mittels eines Kalendersteuerelements
15591- [[doc:lcl/dbctrls/tdbgroupbox.html|DBGroupBox control]]
15692
15793### [[doc:lcl/dbgrids/tdbgrid.html|Das Steuerelement DBGrid]]
15894
15995Dieses Steuerelement zeigt mehrere Felder in einem Gitterlayout an - als Vorgabe werden alle angezeigt. Mit individuellen Einträgen in der[[doc:lcl/dbgrids/tdbgrid.columns.html|Columns collection]] schränken Sie sich auf bestimmte Felder ein und legen die Breiten und Titel der einzelnen Spalten fest.
16096
16197Derzeit scheint es einige Probleme mit dem Bearbeiten in dbGrid zu geben. Obwohl das Bearbeiten also möglich ist, ist es sicherer, nur Daten anzuzeigen (-setzen Sie 'readonly' auf 'true') und verwenden Sie zum Bearbeiten Einzelfeldsteuerelemente.
16298
16399### [Das Steuerelement Navigator](http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbnavigator.html)
164100
165101Dieses Steuerelement gibt dem Benutzer die direkte Kontrolle über die Datenmenge. Es erlaubt dem Benutzer folgendes:
166102
167103- Bewegen zm nächsten oder vorigen Datensatz, zum Anfang oder zu Ende der Datensätze
168104- Hinzufügen eines neuen Datensatzes (äquivalent zum Aufruf der Methode 'dataset.insert')
169105- die Datenmenge in den Edit-Modus zu stellen
170106- Löschen eines Datensatzes
171107- Senden oder Abbrechen der aktuellen Änderungen (Post or Cancel)
172108- Wiedereinlesen der Daten (nützlich in Mehrbenutzer-Datenbankanwendungen)
173109
174110Schlüsseleigenschaften:
175111
176112- VisibleButtons: Überlässt Ihnen die Kontrolle über die für Benutzer erlaubten Aktionen. Beispiel: wenn das Löschen nicht gestattet ist, verstecke den Löschknopf. Oder Sie entschließen sich, in einem DBGrid nicht die Knöpfe 'Nächster' und 'Voriger' anzuzeigen.
177113- Width: Wenn Sie nicht alle Knöpfe anzeigen, setzen Sie vielleicht die Breite auf (Höhe*Anzahl_der_sichtbaren_Buttons)
178114
179115---
180116*From the Free Pascal wiki, page "Databases in Lazarus/de", as it stood on 2011-08-03 after a change by Chronos, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
181117Category: Databases/de

Back to history