Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Abfrage vereinfachen (https://www.delphipraxis.net/112230-abfrage-vereinfachen.html)

Privateer3000 17. Apr 2008 09:18

Datenbank: mdb • Zugriff über: ado

Abfrage vereinfachen
 
Hiho,
kann man diese Abfragen zu einer
einzigen vereinfachen?
Es zu viele Themen dazu, dass ich nicht weiß
welche die richtige Lösung dafür ist:
Delphi-Quellcode:
adoquer.SQL.Add('SELECT * FROM kochbuch WHERE ID='+IntToStr(tg1)');
adoquer1.SQL.Add('SELECT * FROM zutaten WHERE ID='+IntToStr(tg1)');
so das alle Spalten für eine weiterverarbeitung in vars gepackt
werden können...

DeddyH 17. Apr 2008 09:29

Re: Abfrage vereinfachen
 
SQL-Code:
SELECT K.*, Z.*
FROM kochbuch K, zutaten Z
WHERE K.ID=:k_id
AND Z.ID=:z_id
Wobei ich den Zusammenhang der beiden Tabellen noch nicht verstanden habe.

Privateer3000 17. Apr 2008 10:01

Re: Abfrage vereinfachen
 
Danke DeddyH
wenn: WHERE K.ID=:k_id AND Z.ID=:z_id
würden sie sich doch nur untereinander vergleichen?!
aber für meinen Fall: ID='+IntToStr(tg1) wird
die Bedingung von "aussen" geliefert.
Wie soll das dann gehen.

Zum Zusammenhang:
aus beiden tabellen werden daten ausgelesen
die anschliessend in eine dritte geschrieben werden,
sozusagen als ergebnis.

DeddyH 17. Apr 2008 10:03

Re: Abfrage vereinfachen
 
Wieso sollten sie untereinander verglichen werden? Das ist kein Join. Anders wäre das bei
SQL-Code:
WHERE K.ID = Z.ID

mkinzler 17. Apr 2008 10:03

Re: Abfrage vereinfachen
 
Wie sehen die beiden Tabellen aus?
Wie soll die zieltabelle aussehen?
Union?

Privateer3000 17. Apr 2008 11:38

Re: Abfrage vereinfachen
 
so zum Beispiel:
Tabelle 1: id,rezeptname,kategorie,kalorien,naehrwert,menge
Tabelle 2: rezeptnr,zutatnr,menge

jetzt alles zusammen
NIMM * von t1 und * von t2 WENN id=re.text und rezeptnr=re.text

das alles dann in variablen speichern
die ich dann benötige

Ich hoffe das die einigermassen verständlich war

DeddyH 17. Apr 2008 11:57

Re: Abfrage vereinfachen
 
Hast Du meine Abfrage mal ausprobiert?

mkinzler 17. Apr 2008 12:05

Re: Abfrage vereinfachen
 
So sieht es aber ganz anders aus. Die beiden Tabellen stehen nicht in einem 1:1 sondern in einem 1:n-Verhältnis.

DeddyH 17. Apr 2008 12:08

Re: Abfrage vereinfachen
 
Wäre das nicht eher eine m:n-Beziehung zwischen Rezept und Zutat? Zwar kenne ich das Datenmodell nicht, aber das erscheint mir logisch.

Privateer3000 17. Apr 2008 12:22

Re: Abfrage vereinfachen
 
Danke Leute

wie am anfang erwähnt geht das ja mit 2 abfragen
auch zum ergebnis.
Ich wollte es in eine packen, wenn das geht.
Denn dann stopfe ich die daten in 2 querys bzw datasets

mkinzler 17. Apr 2008 12:28

Re: Abfrage vereinfachen
 
Zitat:

Wäre das nicht eher eine m:n-Beziehung zwischen Rezept und Zutat? Zwar kenne ich das Datenmodell nicht, aber das erscheint mir logisch.
Dann wäre kein Verweis auf das Rezept in der Zutatentabelle und es gäbe eine 3. Tabelle.

DeddyH 17. Apr 2008 12:30

Re: Abfrage vereinfachen
 
Zitat:

Zitat von mkinzler
Dann wäre kein Verweis auf das Rezept in der Zutatentabelle und es gäbe eine 3. Tabelle.

Das weiß ich auch, deshalb kam mir das ja so komisch vor.

mkinzler 17. Apr 2008 12:49

Re: Abfrage vereinfachen
 
Zitat:

Ich wollte es in eine packen, wenn das geht.
Denn dann stopfe ich die daten in 2 querys bzw datasets
Und zwischen diesen am Besten eine Master-/Detailbeziehung einrichten.

Privateer3000 17. Apr 2008 12:59

Re: Abfrage vereinfachen
 
Zitat:

Zitat von mkinzler
Zitat:

Ich wollte es in eine packen, wenn das geht.
Denn dann stopfe ich die daten in 2 querys bzw datasets
Und zwischen diesen am Besten eine Master-/Detailbeziehung einrichten.

das bedürfte einer nähreren Erläuterung
im bezug auf meine Tabellen

Die Daten in beiden Tabellen sind schon durchdacht
auch wenn sich das für Euch nicht erschließt

mkinzler 17. Apr 2008 13:22

Re: Abfrage vereinfachen
 
verbinde das Detail-DataSet (Zutaten) mit Hilfe von .MasterSource mit der, mit dem Master-Dataset (Rezepte) verknüpften, DataSource.
Zitat:

Die Daten in beiden Tabellen sind schon durchdacht
auch wenn sich das für Euch nicht erschließt
Im allgemeinen würde man das aber nicht so (1:n):

Rezept:
ID Bez
1 Was Leckeres
...

Zutat:
ID Rezept Bez Anzahl
1 1 Zucker 2
2 1 Milch 500
...

Sondern so (n:m)

Rezept:
ID Bez
1 Was Leckeres
...

Zutat:
ID Bez
1 Zucker
2 Milch
...

Zuordnung:
ID Rezep Zutat Menge
1 1 1 2
2 1 2 500
...

Lösen.

DeddyH 17. Apr 2008 13:25

Re: Abfrage vereinfachen
 
Genau, da es sich ja wie gesagt in meinen Augen um eine m:n-Beziehung handelt: ein Rezept besteht aus m Zutaten und eine Zutat kann in n Rezepten verwendet werden.

Privateer3000 17. Apr 2008 18:14

Re: Abfrage vereinfachen
 
Danke Leute für Eure Antworten
ursprünglich hatte ich das auch so geplant.
Aber ich bin daran gescheitert, dass
wenn rezept und zutaten gespeichert werden
die id vom Rezept benötigte.
Returnid und ähnliches gibts in dem DBMS nicht.
Damit sieht es so aus:
Einträge in der Zutatentabelle werden also einzeln
jedem Rezept zugeordnet. Auch wenn es etwas umständlich ist.

Wenn ich dem Vorschlag von mkinzler folgen würde
müsste eine dritte Tabelle, Zuordungstabelle?,
ins Spiel kommen. Richtig?

DeddyH 17. Apr 2008 18:32

Re: Abfrage vereinfachen
 
Richtig. Ansonsten ist die DB nicht normalisiert.

mkinzler 17. Apr 2008 19:46

Re: Abfrage vereinfachen
 
Zitat:

Aber ich bin daran gescheitert, dass
wenn rezept und zutaten gespeichert werden
die id vom Rezept benötigte.
Returnid und ähnliches gibts in dem DBMS nicht.
Aber das Problem besteht doch auch bei 2 Tabellen.


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