AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi datensätze ind DBDrid doppelt angezeigt
Thema durchsuchen
Ansicht
Themen-Optionen

datensätze ind DBDrid doppelt angezeigt

Ein Thema von veetschal · begonnen am 13. Apr 2010 · letzter Beitrag vom 15. Apr 2010
Antwort Antwort
veetschal

Registriert seit: 25. Jun 2009
11 Beiträge
 
Delphi 7 Personal
 
#1

datensätze ind DBDrid doppelt angezeigt

  Alt 13. Apr 2010, 18:31
Datenbank: Paradox • Version: 7 • Zugriff über: DBE
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:
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;
*1 alle einträge aus der spalte titel aus der tabelle lehrveranstaltung sollen angezeigt werden und zwar zu den unten angeführten bedingungen
*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
there are only 10 kind of people - those who understand binary codes and those who don't
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
172 Beiträge
 
Delphi 12 Athens
 
#2

Re: datensätze ind DBDrid doppelt angezeigt

  Alt 13. Apr 2010, 19:08
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
Micha
  Mit Zitat antworten Zitat
veetschal

Registriert seit: 25. Jun 2009
11 Beiträge
 
Delphi 7 Personal
 
#3

Re: datensätze ind DBDrid doppelt angezeigt

  Alt 14. Apr 2010, 18:50
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:
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;
datensätze werden immer noch doppelt angezeigt. falls er 2 verschiedene datensätze findet gibt er es folgender maßen aus:
1. datensatz_1
2. datensatz_2
3. datensatz_1
4. datensatz_2

also so als ob er eine schleife durchlaufen würde!
there are only 10 kind of people - those who understand binary codes and those who don't
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: datensätze ind DBDrid doppelt angezeigt

  Alt 14. Apr 2010, 19:16
Und wenn Du vorerst die Tabelle "datum" aus der Abfrage rauslässt?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
172 Beiträge
 
Delphi 12 Athens
 
#5

Re: datensätze ind DBDrid doppelt angezeigt

  Alt 14. Apr 2010, 20:51
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...
Micha
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: datensätze ind DBDrid doppelt angezeigt

  Alt 14. Apr 2010, 20:53
Und der Einsatz von Parametern macht das ganze flexibler, lesbarer und bei Mehrfacher Verwendung auch schneller
Markus Kinzler
  Mit Zitat antworten Zitat
veetschal

Registriert seit: 25. Jun 2009
11 Beiträge
 
Delphi 7 Personal
 
#7

Re: datensätze ind DBDrid doppelt angezeigt

  Alt 14. Apr 2010, 21:14
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 =)
there are only 10 kind of people - those who understand binary codes and those who don't
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
172 Beiträge
 
Delphi 12 Athens
 
#8

Re: datensätze ind DBDrid doppelt angezeigt

  Alt 15. Apr 2010, 09:22
Zitat von veetschal:
wow danke leute offenbar hat das delphi tatsächlich verwirrt...
Das hat nichts mit Delphi zutun, sondern allein mit deinem SQL-Statement.
Bsp.:
SQL-Code:
SELECT table1.field1
FROM table1,table2;
Das ist jetzt vereinfacht - das was du gemacht hast. imho wird dabei jeder Datensatz aus table1 mit jedem Datensatz aus 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:
SELECT table1.*,table2.*
FROM table1,table2;
Das mit den Parametern ist keine große Sache, kann dir aber eine Menge Ärger ersparen.
Delphi-Quellcode:
Query.SQL.Add('SELECT * FROM table1 WHERE table1.field1 = :value1');
Query.ParamByName('value1').asString := Edit1.Text;
Micha
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 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