![]() |
Beziehungen zwischen Paradox-Tabellen??
Wie kann ich zwischen 2 Paradox-Tabellen ne 1:n Beziehung einrichten??
Sollte das nicht irgendwie mit dem Database Desktop laufen?? :roll: |
Hallo buyden,
du nimmst 2 TTable Objekte, verbindest die Mastertabelle (die 1-Seite der 1:n Verknüpfung) mit einer Datasource. Diese Datasource wählst du als Mastersource im OI für die Detailtabelle (n-Seite der 1:n Verknüpfung). |
Also direkt in Delphi, ich dachte, das geht wie bei Access direkt im Database Desktop. OK dann werd ich das mal versuchen, hab dank. :spin:
|
Hallo buyden,
das geht natürlich auch visuell, aber dazu brauchst du genau wie bei Access die zugehörige Oberfläche, in diesem Fall also Paradox als Anwendung. |
Mal noch was anderes, wie kann ich denn zwischen den Datensätzen navigieren, ohne diese Navigation Bar zu nutzen?? :roll:
|
Hab's schon rausbekommen.
Delphi-Source.de ist da ziemlich hilfreich :lol: Trotzdem Danke |
Ich hab noch ein kleines Problemchen mit meiner 1:n-Verknüpfung. :x Ich hab eine Tabelle mit den Rechnungsdaten eines Fahrschülers und möchte die mit ner Tabelle verknüpfen, in die die Zahlungen eingetragen werden können, die der Fahrschüler leistet, also mehrere verschiedene Datensätze. Ich hab jetzt bei Zahlungstabelle die Rechnungsdatentabelle als Master Source angegeben, allerdings sind jetzt sämtliche Zahlungsdaten in allen Fahrschülern sichtbar. Was mach ich falsch?? :roll:
|
Nochmal ganz von Anfang an:
Ich habe ein kleines Progrämmchen geschrieben, das Fahrschüler verwalten soll. Dafür hab ich ein paar Paradox 7 Tabellen mit dem Database Desktop erstellt (Schülerdaten, Rechnungsdaten, Preise, Zahlungen). Ich kann Fahrschüler anlegen, für jeden einzeln die Rechnungsdaten eintragen und müsste es jetzt nur noch hinbekommen, dass ich auch für jeden Fahrschüler mehrere Zahlungen eintragen kann, ne 1:n Verknüpfung quasi. :freak: In Schülerdaten hat Schülernummer den Primärschlüssel und in Zahlungen Zahlungsnummer. Bei meinen Verknüpfungsversuchen waren entweder alle Zahlungen in allen Fahrschülern verfügbar oder ich konnte nur so viele Zahlungen eintragen, wie ich Fahrschüler habe. Könnte mir bitte jemand auf die Sprünge helfen?? :wall: |
Hallo buyden,
du musst der Rechnungstabelle ein Feld FahrschulNr gönnen, dass jeweils die Nummer des zugehörigen Fehrschülers enthält. Dieses Feld sollte Sekundärindex oder Teil des Primärschlüssels sein. Dann kannst du die beiden Tabellen verbinden. |
Hallo Mr.Spock,
Dem Feld Schülernummer in der Rechnungstabelle habe ich den Sekundärindex gegeben, die Datasource der Rechnungstabelle als Mastersource für die Zahlungstabelle gesetzt und das Feld Schülernummer als MasterField. Jetzt kann ich für jeden Fahrschüler nur genau eine Zahlung eintragen, danach bringt mit Delphi den Fehler "Key Violation". :cry: |
Mann!! So schnell wie der Thread hier nach unten durchgereicht wird, kann den ja keiner mehr finden :x Das ist eben der Nachteil an so nem gut besuchten Forum. :?
|
Hallo buyden,
du hast wahrscheinlich einen "eindeutigen" Schlüssel erzeugt. D.h., dass beim zweiten Satz eine "key violation" auftritt. Der key sollte also entweder "nicht eindeutig" sein (über Datenbankoberfläche ändern) oder du wählst einen Gesamtschlüssel (Rechnungsnummer;Fahrschueler) oder (ID;Fahrschueler), der dann wieder eindeutig sein kann. |
Und wie genau ändere ich das? Ich bin Grünling!! :oops:
|
Hallo buyden,
1. Datenbankoberfläche starten 2. Tools | Tabellenoperationen -> Umstrukturieren ... wählen 3. Tabelle auswählen 4. In der Dropdownliste "Tabelleneigenschaften": Sekundärindizes auswählen 5. Den zu ändernden Index auswählen und "Ändern..." anklicken 6. In den Indexoptionen die Markierung in der Checkbox "Eindeutig" löschen 7. Mit OK bestätigen und sichern 8. Fettich! :mrgreen: |
Hallo Mr.Spock,
also ich hab das jetzt mal versucht aber bei mir war kein Sekundärindex eindeutig. Ohne geht's aber auch nicht. Gibt's nicht irgendwo ein richtiges Tutorial für Dumme zu diesem Thema :?: , ich komm mir langsam blöd vor, andauernd wegen solchen wahrscheinlich primitiven Sachen nachfragen zu müssen. :oops: |
Hallo buyden,
ein Tutorial kann ich dir leider nicht empfehlen. Wenn du mir mal die leeren Tabellen und das Programm schickst (oder diese hier postest), schau ich mir das Mal genauer an. Aber nur, wenn ich es auch ohne DSL in endlicher :mrgreen: Zeit runterladen kann. |
Hallo buyden,
ich benötige noch die TRealEdit Komponente, die du ja ausführlich nutzt... |
Hallo buyden,
ich hab mir dein Programm einmal angeschaut. Was mir zuerst aufgefallen ist, ist, dass du die Eigenschaft Name einfach ignorierst :mrgreen: . Du solltest allen Komponenten und auch den Units aussagekräftige Namen geben. Woher willst du in 2 Monaten noch wissen, was Table4 ist und was in Unit6 steht? Das Problem mit dem Indexfehler liegt daran, dass die Tabelle zahlungen.db als Primärindex nur das Feld Schuelernummer umfasst. Wenn du jetzt versuchst einen 2. Datensatz zu demselben Schüler einzutragen, sagt die DB- Engine, dass das nicht geht, weil für diesen Index bereits ein Datensatz existiert. (Ein Primärindex muss eindeutig sein). Am besten löst du das Problem durch Erweiterung des Primärindex um das Feld ID, so dass der Primärindex ein zusammengetzter Index (Schuelernummer;ID) wird. Das löst du am besten über die Datenbankoberfläche. |
Hallo Mr. Spock
Danke erstmal, dass du dir mein Progrämmchen mal angeschaut hast. Ich hab in der Zwischenzeit ne Kopie meines Programms mal mit Access verknüpft, das funktioniert ja auch recht gut, muss ich feststellen aber ich werd die Paradox-Version trotzdem noch versuchen, zu Ende zu bringen. Danke für deine Hinweise, werd ich berücksichtigen. mfg buyden |
Hallo buyden,
wenn du denselben Code mit Access testest, muss derselbe Fehler erscheinen, da es ja kein Paradox Problem ist. Und immer dran denken: MS freie Lösungen sind immer besser :duck: . |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 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