AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Tabellenfelder automatisch füllen durch zweite Tabelle
Thema durchsuchen
Ansicht
Themen-Optionen

Tabellenfelder automatisch füllen durch zweite Tabelle

Ein Thema von stOrM · begonnen am 11. Mai 2017 · letzter Beitrag vom 12. Mai 2017
Antwort Antwort
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Tabellenfelder automatisch füllen durch zweite Tabelle

  Alt 11. Mai 2017, 15:34
Prinzipiell lässt sich das mit 'ner TDBLookupComboBox lösen.

Bei Delphi 7 gibt es die, ob man sie in 'nem Grid platzieren kann, weiß ich nicht.
Das Grid selber hat ja sogenannte Properties in diesem können Komponenten zugewisen werden also auch eine LockupCombobox ist dort vorhanden,
dann gibt es die Felder: KeyFieldnames, ListFieldNames und ListSoruce sowie ListFieldIndex da kann ich zwar alles an eine zweite Tabelle knüpfen nur sehe ich da nicht wie ich das Feld Bezeichnung aus der ersten Tabelle damit verknüpfen soll also zusätzlich

ListFieldSource ist bei mir Tabelle2
ListFieldnames: ArtikelID

Jetzt wenn ich die Anwendung starte kann ich im Grid zwar mittels der Combobox die ArtikelID aus der Artikel Tabelle auswählen nur wird dadurch ja nicht die Bezeichnung ermittelt zu der ArtikelID. Genau das ist da wo es grad hakt.

Geändert von stOrM (11. Mai 2017 um 15:38 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Tabellenfelder automatisch füllen durch zweite Tabelle

  Alt 11. Mai 2017, 15:45
Ich denke, "das Problem" liegt nicht in der Handhabung der GUI, sondern in Deinem Datenmodel.
Wenn es so ist wie im Eröffnungspost, dann verstößt es gegen die Normalisierungsregelungen. Was Du anschließend grafisch lösen möchtest (musst), ist die durch das Datenmodell erzwungene Redundanz nachzubauen. Also auf Deutsch:
"Nimm die gewählte artikelnummer und schauen in den Artikeln nach der zugehörigen Bezeichnung und trage sie neben der Artikelnummer ein (obwohl die allein schon reichen würde) oder wenn Du User lieber über den Weg der Bezeichnung geht, mache alles genauso, aber mit vertauschten Feldern, ..." uff.


Deine "schräge" Idee zur Umsetzung wäre tatsächlich so oder ähnlich zu bewerkstelligen, ist aber nur "ein Folgefehler" des unsauberen Designs der DB.

Lösung.
Du verwendest nur eines der beiden Felder, naheliegend die (Artikel)Nummer, besser noch einen echten PK dazu und baust 2 LookupComboboxen zum Suchen (eine für Nummer, eine für bezeichnung), die beide als Schlüsselfeld die Artikelnummer nutzen. Damit wäre alles erledigt.
Feinheiten kann man sicher noch klären.

Der Benefit sollte klar sein, normalisiertes Datenmodell mit allen Vorteilen, die das so mit sich bringt, inkl. fehlender "Verrenkungen" im Clientprogramm.
Gruß, Jo
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: Tabellenfelder automatisch füllen durch zweite Tabelle

  Alt 11. Mai 2017, 15:48
Jetzt wenn ich die Anwendung starte kann ich im Grid zwar mittels der Combobox die ArtikelID aus der Artikel Tabelle auswählen nur wird dadurch ja nicht die Bezeichnung ermittelt zu der ArtikelID. Genau das ist da wo es grad hakt.
Ja, genau, siehe mein Vorschlag oben dazu.
Gruß, Jo
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Tabellenfelder automatisch füllen durch zweite Tabelle

  Alt 11. Mai 2017, 15:56
Und was hast Du bei KeyFieldNames eingetragen?

List... ist für die anzuzeigenden Daten.

Wenn Du so 'nen LookupComboBox auf ein Grid setzt, dann müsste das eigentlich so funktionieren:

ListField ist die Spalte der Tabelle, aus der ausgewählt werden soll, und zwar der verbale Inhalt.

KeyField ist die Spalte der Tabelle, aus der ausgewählt werden soll, und zwar der Wert, der übernommen werden soll.

Wenn es um die Übernahme von Daten in die Tabelle Angebot geht, müsste LookupComboBox bei Dir dann auf dem Feld AngebotNr stehen.
ListSource müsste auf die Tabelle Artikel verweisen.
ListField wäre ArtikelBezeichnung.
KeyField sollte dann ArtikelNr sein.

PS:

Das hat nichts einem unglücklich gewählten Datenmodell zu tuen, es ist lediglich eine Hilfe, um die entsprechenden Fremdschlüssel in einem normalisierten Datenmodel auswählen zu können.

Es wird hier der Fremdschlüssel, der auf die andere Tabelle verweist, übernommen und nicht ein redundanter Wert.

Die Auswahl erfolgt über eine Sicht auf die Schlüsseltabelle, angezeigt wird die verbale Beschreibung.

Übernommen wird der Fremdschlüssel.

Geändert von nahpets (11. Mai 2017 um 17:14 Uhr) Grund: Text ergänzt um PS:
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
436 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Tabellenfelder automatisch füllen durch zweite Tabelle

  Alt 11. Mai 2017, 16:39
Danke nahpets so funktioniert es jetzt endlich
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Tabellenfelder automatisch füllen durch zweite Tabelle

  Alt 11. Mai 2017, 20:41
Das hat nichts einem unglücklich gewählten Datenmodell zu tuen, es ist lediglich eine Hilfe, um die entsprechenden Fremdschlüssel in einem normalisierten Datenmodel auswählen zu können.
Ich habe es so verstanden, dass in Angebot die Felder Bezeichnung und Nummer beide das gleiche beschreiben bzw. zum Nachschlagen nutzen, eben ein und den selben Artikel.
Daher bleibe ich bei meinen Gedanken.
Wenn das Datenmodell so in der Welt ist, okay. Dann muss man halt diese Bastelei machen, ansonsten (Entwicklungsphase) würde ich noch mal durchatmen und mir das ansehen.
Gruß, Jo
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: Tabellenfelder automatisch füllen durch zweite Tabelle

  Alt 11. Mai 2017, 20:52
Die Benutzung eine TBDlookupComboBox ist nur in einem normalisierten Datenmodel zum Nachschlagen von Fremdschlüsseln sinnvoll. In der Anzeige steht halt ein Text zum Fremdschlüssel, übernommen wird der Fremdschlüssel.

Wer es anders benutzt (z. B. zum Pflegen von Redundanzen) gehört geohrfeigt
Und wer beide Werte übernimmt erst recht.

Natürlich ist Dein Gedankengang grundsätzlich erstmal richtig.

Ausnahmen davon müssen sehr genau begründet werden, derweil: Sie tendieren in der Verwendung leicht bis mittelstark in Richtung unpflegsame Systeme
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz