Delphi-PRAXiS
Seite 1 von 2  1 2      

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]


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:22 Uhr.
Seite 1 von 2  1 2      

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