![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: DBE
datensätze ind DBDrid doppelt angezeigt
hey!
ich probiere mich erstmals mit delphi datenbanken und SQL verzeiht mir also bitte wenn manche dinge vielleicht nicht allzu perfektioniert gelöst sind. Ich habe folgendes problem: ich lese mittels SQL abfragen aus verschiedenen tabellen verschiedene werte per button klick in ein DBGrid ein. dies geschieht mittels implizite Join abfragen. im prinzip funktioniert auch alles so wie es soll es werden genau die daten aufgewählt die ich haben möchte das problem ist nur, dass sie mir gleich 2x angezeigt werden obwohl die datensätze in den tabellen nicht doppelt sind. hier nochmal der quellcode.
Delphi-Quellcode:
*1 alle einträge aus der spalte titel aus der tabelle lehrveranstaltung sollen angezeigt werden und zwar zu den unten angeführten bedingungen
frame61.Queryuebersicht2.Active:=false;
frame61.Queryuebersicht2.SQL.Clear; variable:= 'SELECT lehrveranstaltung.Titel //*1 FROM tabellen\stRichtung2, tabellen\lehrveranstaltung, tabellen\LVtyp2, tabellen\semester2, tabellen\datum WHERE (stRichtung2.studienname = "' + frame61.DBLookupComboBox1.Text + '") AND (stRichtung2.Studienrichtung_ID = lehrveranstaltung.ID_StRichtung) //*2 AND (semester2.Semester_ID = datum.ID_Semester) AND (semester2.Semester = "' + frame61.DBLookupComboBox3.Text + '") AND ( LVtyp2.LVType_ID = lehrveranstaltung.ID_Type) AND (LVtyp2.Typ = "' + frame61.DBLookupComboBox2.Text + '")'; //*3 frame61.Queryuebersicht2.SQL.Add(variable); frame61.Queryuebersicht2.Active:=true; end; *2 erste bedingung ist, dass die ausgewählte spalte einer dblookupcombobox mit dem studienname, der per fremdschlüsselfeld mit lehrveranstaltung verbunden ist übereinstimmt. *3 die lehrveranstaltung ist wiederum an LVtyp2 geknüpft. über eine zweite DBlookupcombobox wird sichergestellt, dass nur die titel ausgegeben werden, deren LVtyp in der dblookupbomobox2 ausgewählt wurde anmerkung: der obige quelltext wurde von mir zur leichteren veranschaulichung zerlegt und kommentare an den stellen //* eingefügt hoffe das hier ist annähernd verständlich erklärt vielleicht hatte ja schonmal wer ein ähnliches problem und kann mir helfen meins zu lösen :) |
Re: datensätze ind DBDrid doppelt angezeigt
Hallo veetschal,
Sieht so aus als wenn da eine Verknüpfung zwischen den Tabellen fehlt?! -> semester2 und datum stehen irgendwie in keiner verbindung zu deinen anderen Tabellen |
Re: datensätze ind DBDrid doppelt angezeigt
danke für den tipp nur leider hats nicht geholfen
hab jetzt die tabellen etwas umgestaltet damit semester direkt mit lehrveranstaltung verbunden ist mein aktueller quellcode sieht jetzt so aus:
Delphi-Quellcode:
datensätze werden immer noch doppelt angezeigt. falls er 2 verschiedene datensätze findet gibt er es folgender maßen aus:
frame61.Queryuebersicht2.Active:=false;
frame61.Queryuebersicht2.SQL.Clear; variable:= 'SELECT lehrveranstaltung.Titel FROM tabellen\stRichtung2, tabellen\lehrveranstaltung, tabellen\LVtyp2, tabellen\semester2, tabellen\datum WHERE (stRichtung2.studienname = "' + frame61.DBLookupComboBox1.Text + '") AND (stRichtung2.Studienrichtung_ID = lehrveranstaltung.ID_StRichtung) AND (semester2.Semester_ID = lehrveranstaltung.ID_Semester) AND (semester2.Semester = "' + frame61.DBLookupComboBox3.Text + '") AND ( LVtyp2.LVType_ID = lehrveranstaltung.ID_Type) AND (LVtyp2.Typ = "' + frame61.DBLookupComboBox2.Text + '")'; frame61.Queryuebersicht2.SQL.Add(variable); frame61.Queryuebersicht2.Active:=true; 1. datensatz_1 2. datensatz_2 3. datensatz_1 4. datensatz_2 also so als ob er eine schleife durchlaufen würde! |
Re: datensätze ind DBDrid doppelt angezeigt
Und wenn Du vorerst die Tabelle "datum" aus der Abfrage rauslässt?
|
Re: datensätze ind DBDrid doppelt angezeigt
Du benutzt die Tabelle datum in deiner Abfrage überhaupt nich - also weg damit.
Außerdem wäre es schön wenn du deine SQL-Statements ein wenig übersichtlicher/leserlicher formatieren würdest... |
Re: datensätze ind DBDrid doppelt angezeigt
Und der Einsatz von Parametern macht das ganze flexibler, lesbarer und bei Mehrfacher Verwendung auch schneller
|
Re: datensätze ind DBDrid doppelt angezeigt
wow danke leute offenbar hat das delphi tatsächlich verwirrt war auch keine absicht dass tabelle\datum noch dabei stand ist noch ein überbleibsel von variante 1 gewesen was ich schlicht weg übersehen hatte...
momentan zeigts mirs wieder richtig an ich hoff das war jetzt auch wirklich der fehler weils mir zwischendurch plötzlich den datensatz nicht mehr doppelt sondern gleich vierfach angezeit hat obwohl ich nichts verändert hatte warum nicht mit parameter? weil ich das noch weniger kann als ohne hab mich zwar schon etwas eingelesen aber muss ein programm für die schule machen und so viel zeit bleibt mir dann nicht mehr um das auch noch zu lernen und nochmals umzuändern vil. ändere ich das im nachhinein noch aber vorerst muss mal so reichen vielen dank nochmal für eure hilfe =) |
Re: datensätze ind DBDrid doppelt angezeigt
Zitat:
Bsp.:
SQL-Code:
Das ist jetzt vereinfacht - das was du gemacht hast. imho wird dabei jeder Datensatz aus table1 mit jedem Datensatz aus table2
SELECT table1.field1
FROM table1,table2; kombiniert, da du keine Beziehung zwischen den Tabellen angegeben hast. Deutlich wird das, wenn du mal alle Felder der beiden Tabellen selektierst:
SQL-Code:
Das mit den Parametern ist keine große Sache, kann dir aber eine Menge Ärger ersparen.
SELECT table1.*,table2.*
FROM table1,table2;
Delphi-Quellcode:
Query.SQL.Add('SELECT * FROM table1 WHERE table1.field1 = :value1');
Query.ParamByName('value1').asString := Edit1.Text; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 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