Autor |
Beitrag |
butterkeks
      
Beiträge: 56
Win XP, Win 7
Delphi 2007
|
Verfasst: Mo 15.11.10 16:37
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
_________________ Dear lord,
please grant me the ability to punch people in the face over Standard TCP/IP!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 56
Win XP, Win 7
Delphi 2007
|
Verfasst: 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.
_________________ Dear lord,
please grant me the ability to punch people in the face over Standard TCP/IP!
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: 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 |
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
butterkeks 
      
Beiträge: 56
Win XP, Win 7
Delphi 2007
|
Verfasst: 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.
_________________ Dear lord,
please grant me the ability to punch people in the face over Standard TCP/IP!
|
|
haentschman
      
Beiträge: 285
Erhaltene Danke: 33
DX10 Berlin Professional
|
Verfasst: 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 
      
Beiträge: 56
Win XP, Win 7
Delphi 2007
|
Verfasst: 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.
_________________ Dear lord,
please grant me the ability to punch people in the face over Standard TCP/IP!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 16.11.10 06:55
Ich habe gerade kurz gesucht und einen entsprechenden Bugreport gefunden:
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 
      
Beiträge: 56
Win XP, Win 7
Delphi 2007
|
Verfasst: 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?
_________________ Dear lord,
please grant me the ability to punch people in the face over Standard TCP/IP!
|
|
Burgwart
Hält's aus hier
Beiträge: 5
Erhaltene Danke: 1
|
Verfasst: 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 
      
Beiträge: 56
Win XP, Win 7
Delphi 2007
|
Verfasst: 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...
_________________ Dear lord,
please grant me the ability to punch people in the face over Standard TCP/IP!
|
|
|