Entwickler-Ecke

Datenbanken - query falsch???


Morpheus1572 - Mi 17.09.08 14:35
Titel: query falsch???
moin,

wenn ich diesen Query starte, bekomme ich als Antwort nicht den inhalt vom feld des 50sten ID's sondern vom ersten.

Kann mir jemand sagen why?

Delphi-Quelltext
1:
ADOQuery1.SQL.Text:='SELECT Tour FROM Tour WHERE TID = 50';                    


und JA, es existieren mehr als 50 einträge. ;-)


ene - Mi 17.09.08 14:44

Ich würd ja eher mit keiner Antwort rechnen. Ist TID eine Zahl auf Tabellenebene? Gibt es die ID vielleicht doppelt?


Morpheus1572 - Mi 17.09.08 14:47

DB = ACCESS
TABName : Tour
Feld ID : AutoIncrement
Feld Tour: Text

brauchst du noch mehr infos?

Warum keine Antwort? ich bekomme aber eine (nur die Falsche)...

Gruß Morph.


jaenicke - Mi 17.09.08 14:53
Titel: Re: query falsch???
user profile iconMorpheus1572 hat folgendes geschrieben:

Delphi-Quelltext
1:
ADOQuery1.SQL.Text:='SELECT Tour FROM Tour WHERE TID = 50';                    
user profile iconMorpheus1572 hat folgendes geschrieben:
DB = ACCESS
TABName : Tour
Feld ID : AutoIncrement
Feld Tour: Text
Wie heißt das Feld denn nun?


Morpheus1572 - Mi 17.09.08 14:57

Sorry, Fehlerteufel. Natürlich heißt es TID!


MDX - Mi 17.09.08 15:20

Ist ganz einfach, du musst eine LIKE abfrage nehemen:
Ausserdem, kannst du nicht TID abfragen, wenn du es gar nicht auswählst, richtig ist also so:


Delphi-Quelltext
1:
ADOQuery1.SQL.Text:='SELECT TID, Tour FROM Tour WHERE TID LIKE ''50'' '; // Muss "''" sein, damit eines ausgegeben wird!                    


Morpheus1572 - Mi 17.09.08 15:35

Hmmm... okay habe ich gemacht.

und wie kann ich mir nun das ergebnis zum beispiel in einem edit ansehen?

ich dachte das ginge so:


Delphi-Quelltext
1:
2:
      ds := DataSource1.DataSet;
      Edit1.Text := ds['Tour'];


wenn ich das aber mache, bekomme ich immer noch die Tourenangabe von TID 1!!!

mir scheint dass da was nicht funzt mit meinem Query...


baka0815 - Mi 17.09.08 16:29

user profile iconMDX hat folgendes geschrieben:
Ist ganz einfach, du musst eine LIKE abfrage nehemen

Da bin ich jetzt aber mal auf 'ne Begründung gespannt.


Morpheus1572 - Mi 17.09.08 16:41

ne muss ich nicht.

funzt jetzt hatte noch nen schreibfehler drin. stundenlang draufgesehen und nüscht jeseeen... sorry. danke für die Hilfe.


ene - Do 18.09.08 07:03

user profile iconMDX hat folgendes geschrieben:
Ist ganz einfach, du musst eine LIKE abfrage nehemen:
Ausserdem, kannst du nicht TID abfragen, wenn du es gar nicht auswählst, richtig ist also so:


Delphi-Quelltext
1:
ADOQuery1.SQL.Text:='SELECT TID, Tour FROM Tour WHERE TID LIKE ''50'' '; // Muss "''" sein, damit eines ausgegeben wird!                    


Bitte was? Natürlich kannst du über Felder filtern, die du nicht auswählen musst. Und ein Like brauchst du nur bei Textvergleichen mit Wildcards, sonst braucht man das nicht.

@Morph Wenn man sich den SQL-String ausgeben läßt und ihn einfach in eine leere Abfrage kopiert, kommt man meistens in sehr kurzer Zeit auf den Fehler ;)


jasocul - Do 18.09.08 10:40

user profile iconMDX hat folgendes geschrieben:
Ist ganz einfach, du musst eine LIKE abfrage nehemen:
Ausserdem, kannst du nicht TID abfragen, wenn du es gar nicht auswählst, richtig ist also so:


Delphi-Quelltext
1:
ADOQuery1.SQL.Text:='SELECT TID, Tour FROM Tour WHERE TID LIKE ''50'' '; // Muss "''" sein, damit eines ausgegeben wird!                    

So ein Quatsch.

@Morpheus:
Deine Abfrage ist theoretisch korrekt. Du musst den Fehler woanders suchen.


baka0815 - Do 18.09.08 12:37

user profile iconjasocul hat folgendes geschrieben:
@Morpheus:
Deine Abfrage ist theoretisch korrekt. Du musst den Fehler woanders suchen.

Er hat das Problem doch behoben.

Warum user profile iconMDX jedoch an dieser Stelle das LIKE empfiehlt, wüsste ich auch gerne.


MDX - Fr 19.09.08 13:47

Weil es bei mir nur mit LIKE ging, deshalb hatte ich LIKE gesagt!

Muss natürlich nicht überall so sein, aber damit geht es garantiert!


Robert.Wachtel - Fr 19.09.08 15:39

user profile iconMDX hat folgendes geschrieben:
[...] aber damit geht es garantiert!

Vollkommener Unsinn.


baka0815 - Fr 19.09.08 16:06

user profile iconMDX hat folgendes geschrieben:
aber damit geht es garantiert!

Solange man keine Platzhalter wie % oder _ (bei Oracle) verwendet, ist die Verwendung von LIKE im Ergebnis identisch mit dem Gleichheitszeichen.


SQL-Anweisung
1:
select * from tabelle where x like 'abc'                    


SQL-Anweisung
1:
select * from tabelle where x = 'abc'                    


Das Ergebnis der beiden Queries ist identisch (bzw. sollte identisch sein).

LIKE macht nur sinn, wenn du wirklich mit Platzhaltern, also "so ähnlich wie", suchen willst.


SQL-Anweisung
1:
select * from tabelle where x like '%ab_c%'                    


alzaimar - Fr 19.09.08 18:10

user profile iconbaka0815 hat folgendes geschrieben:
[quote="[user]Solange man keine Platzhalter wie % oder _ (bei Oracle) verwendet, ist die Verwendung von LIKE im Ergebnis identisch mit dem Gleichheitszeichen.
Fast: Prüfung auf Gleichheit berücksichtigt, falls eingestellt, Groß/Kleinschreibung, LIKE nicht.