Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi dbExpress und gebundene Steuerelemente (https://www.delphipraxis.net/112060-dbexpress-und-gebundene-steuerelemente.html)

Alex_kfm 14. Apr 2008 14:58

Datenbank: Interbase • Version: 2007 • Zugriff über: dbExpress 4

dbExpress und gebundene Steuerelemente
 
Hallo Leute,

ich arbeite mich gerade in die DB-Programmierung ein und es ist frustrierend. Ich versuche mich mit dbExpress und den gebundenen Steuerelementen. Das Ganze über die Kette (TSQLDataSet – TDataSetProvider – TClientDataSet – TdataSource) und daran dann die Steuerelemente.

Das Schlimmste ist die deutsche Literatursituation. Alles was es zur Datenbankprogrammierung unter Delphi gibt, ist Jahre alt und befasst sich nur mir BDE oder, wenn es hoch kommt, mit IBX. Zu dbExpress gibt es gerade einmal ein paar kleine Kapitel und das wars… Keine Hinweise zur allgemeinen Vorgehensweise, keine durchgehenden Beispiele.

Ich habe eben nicht schon jahrelange BDE-Erfahrung, doch für Neueinsteiger konnte ich bisher nix finden.

So kann man aber keine neuen Entwickler zu Delphi locken. Hier sollte sich CodeGear mal was einfallen lassen, schließlich sollen dbExpress doch die DBKomponenten der Zukunft sein.

Dabei spielt das Geld für mich an der Stelle eine echt untergeordnete Rolle, ich würde auch 200 € für so ein Buch ausgeben, wenn es den richtigen Einstieg beschreiben würde und das in Deutsch versteht sich.

<Frust Ende> Zu meiner Frage:
Die Abfrage einer einfachen Tabelle ist ja kein Problem und auch das Zurücksichern aus dem ClientDataSet zur SQL DB geht soweit ganz gut. Um so was wie Transaktionen und Mehrbenutzerbetrieb hab ich mir aber noch keine Gedanken gemacht. ;-)

Doch schon bei einem einfachen Join ist Schluss. Wie bekomme ich die Texte zu den Fremdschlüsseln aus der anderen Tabelle in meine Combobox und wie sichere ich dann aus dem ClientDataSet die Schlüssel wieder zurück?

Beispiel zur Erklärung:
Ich habe in einer Tabelle mehrere Feldschlüssel, die Texte dazu sind in einer anderen Tabelle. Beispielsweise in der Auftragstabelle ist ein Sachbearbeiterschlüssel. Im Formular soll man aber den Namen in einer Combobox auswählen können. Bei Speichern soll dann natürlich der passende Schlüsselwert in die Tabelle geschrieben werden. So Simpel sich das anhört, ich bekomme es nicht hin und meine Bücher bringen mich nicht weiter…

Jede Hilfe ist willkommen. Tutorials, Bücher die ich evtl. noch nicht kenne, oder mal eine konkrete Anleitung, …


Vielen Dank im Voraus.

Gruß,
Alex

shmia 14. Apr 2008 15:30

Re: dbExpress und gebundene Steuerelemente
 
Zitat:

Zitat von Alex_kfm
Wie bekomme ich die Texte zu den Fremdschlüsseln aus der anderen Tabelle in meine Combobox und wie sichere ich dann aus dem ClientDataSet die Schlüssel wieder zurück?

Beispiel zur Erklärung:
Ich habe in einer Tabelle mehrere Feldschlüssel, die Texte dazu sind in einer anderen Tabelle. Beispielsweise in der Auftragstabelle ist ein Sachbearbeiterschlüssel. Im Formular soll man aber den Namen in einer Combobox auswählen können. Bei Speichern soll dann natürlich der passende Schlüsselwert in die Tabelle geschrieben werden. So Simpel sich das anhört, ich bekomme es nicht hin und meine Bücher bringen mich nicht weiter…

Du musst in deinem Dataset noch ein zusätzliches Lookup-Field definieren und ausserdem noch ein Dataset + Datasource für die Lookup Tabelle bereitstellen.
Die (Lookup-)Query für die Sachbearb. könnte so aussehen:
SQL-Code:
SELECT IdSachbearb, NameSachbearb FROM Sachbearbeiter ORDER BY NameSachbearb
In deiner Haupttabelle gibt es dann auch das Feld "IdSachbearb".
Wenn man dann das Lookupfield hinzufügt (doppelklick auf die Hauptquery Komponente), dann erscheint dieses Feld im Grid mit einer Drop-Down-Liste.
Nicht vergessen, die Lookupquery zusammen mit der Hauptquery zu öffnen.

Peinhard 14. Apr 2008 16:18

Re: dbExpress und gebundene Steuerelemente
 
Wenn du zum Editieren kein DBGrid sondern Einzelkomponenten verwendest sieh dir auch die Komponente TDBLookupComboBox an. Die DataSource-Eigenschaft verknüpft mit der 'Ziel-Tabelle', die ListSource mit der 'Quell-Tabelle' (also zB den Sachbearbeitern). Näheres siehe OLH zu der Komponente.

Für die Anzeige in einem DBGrid kannst du wie von shmia beschrieben ein Lookup-Feld definieren, oder eben auch mit einen Join den zum Schlüssel gehörigen Text ziehen (was für ein 'Nur-Anzeige-Grid' performanter und bequemer ist).


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz