![]() |
Datenbank: MySQL • Version: 5.7.11 • Zugriff über: UniDac
Tabellenfelder automatisch füllen durch zweite Tabelle
Moin,
ich hab da mal ein Verständnisproblem bezüglich automatisches Ausfüllen von Feldern einer Tabelle. Gegeben sind folgendes Tabellen (Angebot, Artikel) Artikel Pk, ArtikelNr, ArtikelBezeichnung, ArtikelEK, ArtikelFaktor Angebot PK, KD, AngebotBezeichnung, AngebotNr, AngebotMenge, AngebotFaktor, AngebotMwST, AngebotVK Grid (cxGrid mit der Angebot Tabelle verbunden) Jetzt würde ich gerne folgendes erreichen, sagen wir der Benutzer will einen neuen Datensatz in der Tabelle Angebote anlegen. Nun steht er im Feld Bezeichnung (im cxGrid als Combobox definiert) die Werte der Combobox sollen aus der Artikel Tabelle stammen. Wenn nun ein Artikel ausgewählt wurde, soll das Feld “AngebotNr“ in der Angebot Tabelle, automatisch mit der ArtikelNr aus der Artikel Tabelle befüllt werden, anhand des ausgewählten Artikels. Im umgekehrten Fall der Benutzer kennt die ArtikelNr, wählt diese aus, jetzt soll das Feld AngebotBezeichnung automatisch mit der Bezeichnung gefüllt werden die zur Nr in der Artikel Tabelle steht. Etwas chaotisch erklärt, ich hoffe man kann mir trotzdem folgen. Wie baut man denn so etwas auf falls das überhaupt so machbar ist? |
AW: Tabellenfelder automatisch füllen durch zweite Tabelle
Machbar ist alles....
aber was Du da treibst/treiben willst ist mir schleierhaft. Angenommen Du hast eine Tabelle "Artikel" und Du willst ein Angebot erstellen, dann packst Du in die Angebotstabelle den Schlüssel des Artikels und gut ist Das ist ja der Vorteil einer relationalen Datenbank, daß jedes Datum nur einmal vorgehalten wird. Gruß K-H |
AW: Tabellenfelder automatisch füllen durch zweite Tabelle
Zitat:
Meine Frage dazu ist halt wie machen, ich kann natürlich eine eigene Eingabemaske bauen und alles per SQL direkt lösen. Nur das wollte ich mir ersparen, da es so über das Grid direkt schneller ginge eventuell. |
AW: Tabellenfelder automatisch füllen durch zweite Tabelle
Als Datenbank affiner Mensch antworte ich
Mach was in der DB und zeige es an (Vorteil, was Du hast hast Du) Wenn Du die Daten erst in Deiner Oberfläche zusammensetzt und dann als ganzes oder in Stückchen Deiner Datenbank vorwirfst, kann (ist aber selten) dieser Update verloren gehen (und ob das schneller ist, bezweifele ich, aber wie gesagt....) Gruß K-H |
AW: Tabellenfelder automatisch füllen durch zweite Tabelle
Hallo,
Ich denke nicht, dass das so einfach geht. Aber ich verstehe, was du vorhast. Du willst Master-Detail grafisch machen, also wie eine Lookup-Table. Aber (2): Die Artikel in einer ComboBox auswählen ... Wenn ich 1.000 Artikel habe, wird das eine lustige Blätterei. Ich würde das zu Fuss machen, bei Doppelklick auf Artikel-Spalte kommt neues Form "Artikel-Suche" mit anständiger Suchhilfe usw. |
AW: Tabellenfelder automatisch füllen durch zweite Tabelle
Zitat:
Ich hab nur im Moment keine Ahnung wie man das macht mit dem Grid. |
AW: Tabellenfelder automatisch füllen durch zweite Tabelle
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. |
AW: Tabellenfelder automatisch füllen durch zweite Tabelle
Zitat:
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. |
AW: Tabellenfelder automatisch füllen durch zweite Tabelle
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. |
AW: Tabellenfelder automatisch füllen durch zweite Tabelle
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 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