Entwickler-Ecke
Datenbanken - Fehler in WHERE Bedingung
butterkeks - Mo 15.11.10 16:37
Titel: Fehler in WHERE Bedingung
Hallo,
ich habe das Problem das ich den Fehler
Unknown Column 'Datum' in 'Where clause'
angezeigt bekomme wenn ich die abfrage
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7:
| SELECT Schmuck.snummer, Schmuck.ver_preis, Schmuck.lieferant, Kassenbericht.Datum FROM Schmuck, Kassenbericht WHERE STR_TO_DATE( Kassenbericht.Datum, "%d.%m.%Y" ) BETWEEN STR_TO_DATE( "01.03.2009", "%d.%m.%Y" ) AND STR_TO_DATE( "31.03.2009", "%d.%m.%Y" ) AND Schmuck.snummer = Kassenbericht.snummer ORDER BY Kassenbericht.id |
ausführe.
Die Spalten sind alle in den entsprechenden Tabellen vorhanden und es dürfte eigentlich keine Probleme geben, was man halt auch daran merkt das die abfrage von PHPMYADMIN fehlerfrei durchläuft.
Das komische dabei ist, das ich diese abfrage ohne Fehler in PHPMYADMIN ausführen kann, aus meiner in Delphi geschriebenen Anwendung heraus aber immer den Fehler ausgegeben bekomme.
Ich benutze die komponenten TSQLconnection und TSQLQuery.
Weiss jemand wie man das hinbekommen kann?
Moderiert von
Martok: SQL-Tags eingefügt
jaenicke - Mo 15.11.10 17:11
Geht es denn ohne die where Bedingung? Also wird die Spalte denn überhaupt gefunden?
Ich schau sonst nachher einmal.
butterkeks - Mo 15.11.10 17:27
Es SCHEINT zu gehen...ich kann es nur nicht zu ende testen, da ohne die Datumseinschränkung auf meinem System hier ein Durchlauf eine Stunde dauert^^
Er wirft auf jeden Fall nicht wie vorher direkt als erstes die Fehlermeldung aus.
Und das er die Spalte nicht findet kann eigentlich auch nicht sein, weil ich die Spalte mit einem "SELECT Datum FROM Kassenbericht" anzeigen lassen kann. Das muss irgendwie an dieser speziellen Abfrage hängen.
Sinspin - Mo 15.11.10 17:42
Was ist STR_TO_DATE? Ist das eine Funktion von PHP oder der Datenbank?
Wenn ich mir das allgemein anschaue, ist die Clausel für einen Datumsrange doch eigentlich
SQL-Anweisung
1:
| Datumsfeld BETWEEN "2010-01-01" AND "2010-12-31" |
In deinem Fall wäre das dann doch sicher eher so?
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7:
| SELECT Schmuck.snummer, Schmuck.ver_preis, Schmuck.lieferant, Kassenbericht.Datum FROM Schmuck, Kassenbericht WHERE Kassenbericht.Datum BETWEEN "2009-03-01" AND "2009-03-31" AND Schmuck.snummer = Kassenbericht.snummer ORDER BY Kassenbericht.id |
butterkeks - Mo 15.11.10 18:11
STR_TO_DATE ist eine MySql funktion.
Und diese muss enthalten sein weil das Datum als Varchar abgelegt wird und daher das Between sonst nicht richtig funktioniert.
haentschman - Mo 15.11.10 21:00
[OT]
| Zitat: |
| Datum als Varchar abgelegt |
wenns irgenwie machbar ist solltest du das ändern... oder dem DB Admin auf die Finger klopfen.
[/OT]
butterkeks - Mo 15.11.10 23:43
Ich weiss^^ aber geht im Moment nicht anders.
Aber es funktioniert ja per Datumsformatierung...ist halt nur die frage warum das in diesem Fall nicht geht.
jaenicke - Di 16.11.10 06:55
Ich habe gerade kurz gesucht und einen entsprechenden Bugreport gefunden:
http://bugs.mysql.com/bug.php?id=6310
Andere haben also wohl das selbe Problem. Und wenn du bei between direkt die Strings angibst und nur bei der Spalte selbst STR_TO_DATE benutzt?
butterkeks - Do 18.11.10 13:11
Jetzt konnte ich endlich die Möglichkeiten durchtesten.
Aber ich hab immer das gleiche Problem, er gibt die selbe Fehlermeldung aus.
Gibt es denn keine Möglichkeit das irgendwie hin zu bekommen?
Burgwart - Do 18.11.10 16:54
Hallo!
Also bei mir geht das so! Ich hoffe es hilft.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| SQL.Close; SQL.SQL.Clear; s := 'select b.aus,a.rechnungsdatum,c.anzahl,b.preis,d.artikelname,e.nachname,e.firma,'; s := s + 'e.land,b.id from rechnung a,rechnung_t b,auftrag_t c,artikel d,kunde e where a.id=b.rechnung_id and '; s := s + 'a.kunde_id=e.id and (a.storniert=0 or isnull(a.storniert)) and b.auftragt_id=c.id and '; s := s + 'c.artikel_id=d.id and d.artikelname like :p1 and a.rechnungsdatum >= :p2 and '; s := s + 'a.rechnungsdatum <= :p3 and e.land like :p4 order by 2'; SQL.SQL.Append(s); s1 := DateFormat(datetostr(d_begin.value)); s2 := DateFormat(datetostr(d_end.value)); SQL.ParamByName('p1').AsString := '%' + aname.Text + '%'; SQL.ParamByName('p2').AsString := s1; SQL.ParamByName('p3').AsString := s2; SQL.ParamByName('p4').AsString := '%' + land.Text + '%'; SQL.Open;
Function TForm32.DateFormat(date : String): string; var rechnungsdatum,m,d,y,s : string; begin s := date; d := Copy(s,1,Pos('.',s)-1); Delete(s,1,Pos('.',s)); m := Copy(s,1,Pos('.',s)-1); Delete(s,1,Pos('.',s)); y := Copy(s,1,Length(s)); rechnungsdatum := y+'-'+m+'-'+d; result := rechnungsdatum; end; |
Datum im Edit.Text := '18.11.2010';
Gruß Burgwart
Moderiert von
Martok: Delphi-Tags gesetzt
butterkeks - Mo 22.11.10 17:21
Hmm nee, auch mit deiner Schreibweise gibt's den selben Fehler...er weiß immer nicht das es eine Spalte gibt die er normalerweise haben müsste -.-
Ich versteh nicht was da falsch laufen kann...
Es ist, als ob er keine Join's kann...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!