Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Tabellenverknüpfungen (https://www.delphipraxis.net/129509-tabellenverknuepfungen.html)

süden 20. Feb 2009 09:41


Tabellenverknüpfungen
 
Hallo,

1) eine "Basistabelle" ca. 1000 Datensätze
enthält sowas wie ein Inhaltsverzeichnis = ID, Nummer, Bezeichnung.
Diese Basistabelle wird für eine Reihe von Formularen als Inhaltsverzeichnis in einem TreeView benutzt.

zugehörig sind jeweils
2) diverse "Detailtabelle" 1:1 mit Detailangaben
bei Klick auf den Übersichtseintrag wird über den Schlüssel der Datensatz gesucht.

Die Basistabelle hat 1000 Datensätze, die verschiedenen Detailtabellen noch keine.
Der Benutzer skrollt auf dem Formular durch das Inhaltsverzeichnis, kann aber keine Daten eingeben, weil der Datensatz in der Detailtabelle fehlt.

Es wäre seltsam, wenn der Benutzer einen neuen Datensatz anlegen muß, obwohl er durch die Übersicht skrollen kann. Ich könnte natürlich abfragen: Wenn Datensatz vorhanden ok, wenn nicht anlegen.
Aber das ist wohl ein ziemlicher Overhead weil es dann immer passiert.

Wie kann man sowas machen?

Verzeiht meine vielleicht dumme Frage, vielleicht ist es ganz einfach!?
Hoffentlich habt Ihr meine Frage auch verstanden.

http://www.ocm-software.de/bilder/hppForm.JPG

nahpets 20. Feb 2009 09:52

Re: Tabellenverknüpfungen
 
Hallo,

erzähl' uns mal bitte, wie Du bisher die Daten holst: z. B. per SQL oder über TTable und Locate oder...
Dann wird es eventuell einfacher, Dir eine für Dein konkretes Problem passenden Lösungsvorschlag zu machen.

mquadrat 20. Feb 2009 09:53

Re: Tabellenverknüpfungen
 
Zitat:

Ich könnte natürlich abfragen: Wenn Datensatz vorhanden ok, wenn nicht anlegen. Aber das ist wohl ein ziemlicher Overhead weil es dann immer passiert.
Immer würde es ja nicht passieren, außer du löscht die Einträge immer wieder wenn man nichts einträgt. Um das nicht im Programm machen zu müssen, könnte man ggf. auch eine Stored Procedure in der DB benutzen.

nahpets 20. Feb 2009 09:59

Re: Tabellenverknüpfungen
 
Hallo,
Zitat:

Zitat von mquadrat
Zitat:

Ich könnte natürlich abfragen: Wenn Datensatz vorhanden ok, wenn nicht anlegen. Aber das ist wohl ein ziemlicher Overhead weil es dann immer passiert.
Immer würde es ja nicht passieren, außer du löscht die Einträge immer wieder wenn man nichts einträgt. Um das nicht im Programm machen zu müssen, könnte man ggf. auch eine Stored Procedure in der DB benutzen.

jenachdem wie es gemacht wird, reicht ja auch ein Left Join.

mquadrat 20. Feb 2009 10:02

Re: Tabellenverknüpfungen
 
Klar, damit kann er entweder den zurückgelieferten Datensatz der Detailtabelle verwenden oder feststellen, dass es noch keinen gibt. Anlegen muss er dann aber trotzdem einen, damit die Verknüpfung aufgebaut werden kann.

nahpets 20. Feb 2009 10:19

Re: Tabellenverknüpfungen
 
Hallo,
Zitat:

Zitat von mquadrat
Klar, damit kann er entweder den zurückgelieferten Datensatz der Detailtabelle verwenden oder feststellen, dass es noch keinen gibt. Anlegen muss er dann aber trotzdem einen, damit die Verknüpfung aufgebaut werden kann.

meiner Meinung nach erst dann, wenn auch Daten erfasst wurden. Das Anlegen eines Datensatztes ohne Inhalt halte ich nicht für erforderlich.

mquadrat 20. Feb 2009 10:24

Re: Tabellenverknüpfungen
 
Joa das ist die Frage. Liest sich im Beitrag halt so, dass er ohne Datensatz auch keine Controls anzeigen kann / will.

Zitat:

Der Benutzer skrollt auf dem Formular durch das Inhaltsverzeichnis, kann aber keine Daten eingeben, weil der Datensatz in der Detailtabelle fehlt.

süden 20. Feb 2009 10:26

Re: Tabellenverknüpfungen
 
Zitat:

Zitat von nahpets
Hallo,

erzähl' uns mal bitte, wie Du bisher die Daten holst: z. B. per SQL oder über TTable und Locate oder...
Dann wird es eventuell einfacher, Dir eine für Dein konkretes Problem passenden Lösungsvorschlag zu machen.

Ich habe 2 ADO-Datasets geöffnet und mache ein Locate.

Die Frage ist, wie kommt der Impuls zum Anlegen eines neuen Detaildatensatzes wenn der Anwender editieren will.

mquadrat 20. Feb 2009 10:31

Re: Tabellenverknüpfungen
 
Nochmal ne Frage zur Datenstruktur

- Die Liste mit den Krankheitsbildern (?) gibt es die einmal für alle Patienten oder einmal je Patient?


Deine Frage beantwortet sich daraus, was der Nutzer machen muss um zu editieren. Langt das draufklicken im Tree, dann muss das dein Impuls sein. Suchen -> wenn nicht gefunden -> anlegen.

Alternativ kannst du die Eingabemaske auch immer anzeigen und einen Speichern-Knopf einbauen, der dann entweder den vorhandenen Datensatz aktualisiert oder eben einen neuen anlegt.

nahpets 20. Feb 2009 10:40

Re: Tabellenverknüpfungen
 
Hallo,

würde das nicht reichen?
Delphi-Quellcode:
If ADODataSet2.Locate('Schlüsselspalte',ADODataSet1.FieldByName('Schlüsselspalte').AsString,[loCaseInsensitive]) then begin
  ADODataSet2.Edit;
end else begin
  ADODataSet2.Append;
end;
Im zweiten Dataset mit dem Schlüssel des ersten Dataset suchen, wenn gefunden, den zweiten Dataset in den Editiermodus setzen, andernfalls einen Datensatz mit Append anhängen.
Beim Speichern wird dann in beiden Fällen mit Post der Inhalt in die Datenbank geschrieben. Bei einem neuen Datensatz im zweiten Dataset könnte man aber auch noch entscheiden, ihn nicht zu schreiben, sofern alle Felder leer geblieben sind, sprich: keine Eingabe erfolgte.

[EDIT]hat Schreibfehler gefunden[/EDIT]

mkinzler 20. Feb 2009 10:42

Re: Tabellenverknüpfungen
 
Der Bereich scheint aus meiner Sicht falsch zu sein. Verschieben deinen Thread mal nach Datenbanken, da kannst du auch gleich das verwendete DBMS angeben

süden 20. Feb 2009 11:24

Re: Tabellenverknüpfungen
 
Zitat:

Zitat von mkinzler
Der Bereich scheint aus meiner Sicht falsch zu sein. Verschieben deinen Thread mal nach Datenbanken, da kannst du auch gleich das verwendete DBMS angeben

Wie geht das, ich hab's nicht gefunden.

mkinzler 20. Feb 2009 11:40

Re: Tabellenverknüpfungen
 
Du scheinst das später nicht mehr zu können. Ich verschiebe es mal. Anschliessend kannst du ja die weiteren durch Editieren des 1. Beitrages ergänzen

DP-Maintenance 20. Feb 2009 11:41

DP-Maintenance
 
Dieses Thema wurde von "mkinzler" von "Die Delphi-IDE" nach "Datenbanken" verschoben.
Beitrag ist unter Datenbanken besser aufgehoben

süden 20. Feb 2009 21:13

Re: Tabellenverknüpfungen
 
OK, ich habe für mich (erstmal) die Lösung.

1. Versuch - die Detaildatensätze leer lassen war nicht gut.
Mit Locate findet er einen Datensatz, beim nächsten Skrollen in der Liste
aber vielleicht nicht, dann bleibt der alte Detaildatensatz aktuell und passt nicht mehr zur Liste.
Die Detailfelder zu leeren ist mir ohne großen Aufwand nicht gelungen.

Lösung:

Beim "onFocusChanged" des TreeView - wie oben - DeTaildatensatz entweder auf edit oder append.
Dann werden nur die Detaildatensätze angelegt, de auch aktiv angeklickt wurden.
Ist immerhin schon was.


Übrigens, ich entwickel gerade eine Lernsoftware für Psychotherapie.

Danke an Alle
Gruß
Heinz (süden)

Cogito 24. Feb 2009 12:40

Re: Tabellenverknüpfungen
 
Zitat:

Zitat von süden
Zitat:

Zitat von nahpets
Hallo,

erzähl' uns mal bitte, wie Du bisher die Daten holst: z. B. per SQL oder über TTable und Locate oder...
Dann wird es eventuell einfacher, Dir eine für Dein konkretes Problem passenden Lösungsvorschlag zu machen.

Ich habe 2 ADO-Datasets geöffnet und mache ein Locate.

Die Frage ist, wie kommt der Impuls zum Anlegen eines neuen Detaildatensatzes wenn der Anwender editieren will.

Ich nehme mal an, dass du auch die dbgo Komponenten verwendest.
Tritt bei dir auch der Fehler auf, das ein Locate in der abhängigen Tabelle nicht funktioniert, sobald du den Datensatz der Haupttabelle wechselst ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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