Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Statement (https://www.delphipraxis.net/71731-sql-statement.html)

stOrM 20. Jun 2006 11:28

Datenbank: Access • Zugriff über: Ado

SQL Statement
 
So langsam brech ich ins essen, hab kopfschmerzen vom sql :-(
Diesmal hab ich schwierigkeiten mit nem SQL Statement über 4 Tabellen...

Ersma die Tabellen:

Tabelle Kunde:
Kunden_ID (Autowert, indiziert)
Vorname
Nachname

Tabelle Konto
Konto_ID (Autowert, indiziert)
Kunden_ID (Referenz auf Kunde.Kunden_ID)
Spende (JA/Nein)
Betrag(Integer)
Finanzierung(JA/Nein)
Finanz_Betrag(Integer)
Angenommen_Von
Datum_Eingang

Tabelle RatenAuftrag:
RA_ID (interne eindeutige Nummer)
KD_ID (Referenz zum Konten.Kunden_ID)
AUFRAGSBEZEICHNUNG (damit man weiß worum es geht)
Gesamtbetrag
Konditionen
Laufzeit
erledigt ...

Tabelle RatenVerlauf
RV_ID (interne eindeutige Nummer)
RA_ID (Referenz zu Ratenauftrag.RA_ID)
Rate (wieviel)
Zahlungseingang (Datum) ...

Nun wollte ich eigentlich mittels SELECT erreichen, das mir alle Datensätze angezeigt werden, erstmal ohne Unterscheidung ob nun eine Finanzierung(JA/NEIN) oder SPENDE(JA/NEIN) vorliegt oder nicht...

Jetzt wirds komisch (Wahrscheinlich durch meine nicht Kenntnis von SQL)
Mir werden alle Datensätze angezeigt bis auf den der keine Finanzierung ist, der ist verschwunden...

Das Problem ist leider ich weiss nicht wie ich um himmelswillen richtig Filtern kann, ich blick nicht mehr durch :-(

Mals Query poschte:

SQL-Code:
AdQ1.SQL.Add('SELECT * FROM Kunde, Konto, Ratenauftrag, Ratenverlauf WHERE Kunde.kunden_id = Konto.kunden_id AND Ratenauftrag.Kunden_ID = Konto.Konto_ID AND Ratenverlauf.RA_ID = Ratenauftrag.RA_ID');
Dann hab ich noch versucht, nen SUM in die Select mit einzubauen welches mir folgendes ermitteln sollte:

Sum(Ratenauftrag.Gesamtbetrag - RatenverlaufRate) AS "TOTAL" usw...
Dabei bekam ich dann die schöne Meldung das Gesamtbetrag keinen Standartwert hat usw. usw... tritt bei unterschiedlichen Feldern auf also nicht nur bei Gesamtbetrag auch bei Total usw...

Ich blicks net mehr vielleicht brauche ganz dringend Hilfe, vielleicht kann jemand mit mir das ganze mal zerflücken das ich das endlich kapier...

DB = ACCESS!

vielen Dank!

morri 20. Jun 2006 11:56

Re: SQL Statement
 
?

Du hast doch im moment gar keinen Filter gesetzt!?!?

mikhal 20. Jun 2006 11:57

Re: SQL Statement
 
Dein Problem liegt wohl daran, daß es für den fehlenden Satz keine Referenzsätze in den Raten-Tabellen gibt. Du wirst wohl einen OUTER-Join auf diese beiden Tabellen generieren müssen. Das wird aber mit Access so nicht funktionieren, du wirst wohl eine etra Sicht auf die Ratentabellen generieren müssen.

Aggregat-Funktionen (SUM, AVG, COUNT etc) erwarten eine Gruppierung deiner abgefragten Felder, damit der SQL-Interpreter überhaupt weiß, wonach der die Summe bilden soll.

Wenn du Access auf deinem Rechner hast, versuch doch mal, dein SQL-Statement mit dem grafischen Editor für eine Sicht zu generieren.

Grüße
Mikhal

stOrM 20. Jun 2006 12:08

Re: SQL Statement
 
Uff!
Zitat:

Dein Problem liegt wohl daran, daß es für den fehlenden Satz keine Referenzsätze in den Raten-Tabellen gibt. Du wirst wohl einen OUTER-Join auf diese beiden Tabellen generieren müssen. Das wird aber mit Access so nicht funktionieren, du wirst wohl eine etra Sicht auf die Ratentabellen generieren müssen.
Das hab ich njetzt leider nicht wirklich kapiert :-(
Könntest du mir das mal erklären als wär ich 3 Jahre alt? Ich bin echt ein DB Anfänger deshalb kann ich dir grad nicht folgen...

Ps.
Sagmal brauche ich unbedingt 4 Tabellen oder kann ich nicht alles in einer anlegen würde glaube ich die Sache für mich extrem vereinfachen???!!!

Bitte ist schon dringend!
vielen Dank
s!

mikhal 20. Jun 2006 12:40

Re: SQL Statement
 
Versuch mal das folgende SQL-Statement:

SQL-Code:
SELECT * FROM (Kunde LEFT JOIN Konto ON Kunde.KundenID = Konto.Kunden_Id) LEFT JOIN (Ratenauftrag LEFT JOIN RatenVerlauf ON Ratenauftrag.RA_ID = RatenVerlauf.RA_ID) ON Kunde.KundenID = Ratenauftrag.KD_ID
Grüße
Mikhal

stOrM 20. Jun 2006 12:54

Re: SQL Statement
 
Besten dank ich werde es mal ausprobieren, ich hoffe ich darf wenns um die Agregat Sachen geht nochmal auf dich zurück kommen?!

PS. Muss ich an den Beziehungen noch etwas in Access ändern oder sind die soweit ok??

vielen Dank
s!

stOrM 21. Jun 2006 12:34

Re: SQL Statement
 
Hi mikhal,
also dein query läuft ohne Probleme, dass heisst relativ ohne Probleme, jetzt bekomme ich zwar alles von den 4 Tabellen angezeigt im Grid, jedoch fehlen bestimmte Einträge...

Es wird z.B. nur eine Rate vom Kunden 1 angezeigt alle anderen Raten die in der Tabelle vorhanden sind werden komischerweise nicht angezeigt. Ich blick nicht mehr durch, ich hab gestern zuhause mit nen QueryBuilder deine SQL Anweisung eingegeben und hin und her probiert aber es bleibt dabei, die Ratenzahlungen sind verschwunden. Dies passiert übrigends auch noch bei anderen Feldern wie z.B. Einzahlungsdatum da gibt er mir auch nur eins anstelle der 5 vorhandenen.

Ich könnte dir vielleicht mal die Access.mdb senden oder den Inhalt das du sehen kannst was drin ist in den Tabellen und wie die Spalten alle heissen und so weiter + Beziehungen...
Bei intereese natürlich...

Viele Grüsse
s!

shmia 21. Jun 2006 14:28

Re: SQL Statement
 
Ein Kunde hat 1 oder mehr Konten.
Ein Ratenauftrag ist in deinem Datenmodell an einen Kunden und nicht an ein bestimmtes Konto angebunden.
Man sollte den Ratenauftrag aber besser mit einen bestimmten Konto verbinden.
=> Ein Konto hat dann 0..N Ratenaufträge
Ein kleiner aber entscheidender Unterschied!!

Deine Idee mit allem in einer Tabelle taugt nix; die 4 Tabellen sind schon ok so.
Tipp:
in Access kann man übers Menü: Extras->Beziehungen die Beziehungen zwischen Tabellen visuell darstellen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 Uhr.

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