Laden...

[erledigt] SQL Abfragestring

Erstellt von silentcatcher vor 15 Jahren Letzter Beitrag vor 15 Jahren 7.700 Views
S
silentcatcher Themenstarter:in
8 Beiträge seit 2008
vor 15 Jahren
[erledigt] SQL Abfragestring

verwendetes Datenbanksystem: <Access>

Hallo leute ich habe da eine kleine Frage zu einem Abfragestring und zwar dem hier:


SELECT * FROM srtTitanStats2 where datestamp >= 27.8.2008 00:00:00 AND datestamp <= 27.8.2008 23:59:59

Was ist daran falsch? Ich blick nicht mehr durch, denn genau so lernten wir es im Unterricht, zwar mit MySQL aber das sollte eigentlich ja nicht so einen grossen Unterschied machen.

Achja, den Fehler der mir Visual Studio 2005 gibt ist folgender:
Syntax error (missing operator) in query expression 'datestamp ≥ 27.8.2008 00:00:00 AND datestamp ≤ 27.8.2008 23:59:59'.

Ich frage mich schon über eine viertelstunde lang was für ein Operator da fehlen könnte, eigentlich ist da ja alles drin was nötig ist, oder?

Ich hoffe ihr könnt mich eines besseren belehren,

Gruss
Daniel

365 Beiträge seit 2007
vor 15 Jahren

Ist ' datestamp ' der Spaltenname?!
Versuch doch einfach mal den Spaltennamen in dem das Datum drin steht zum Vergleich. 🤔

225 Beiträge seit 2006
vor 15 Jahren

Aloha,

ersetzt mal die "." durch "/" und denk dran, dass daten in "#" stehen müssen.

im übrigen empfehle ich dir mal die BuildCriteria methode anzuschauen, wenn du eh schon mit access arbeitest.
in der access-hilfe gibts mehr dazu

a hui hau
puppi

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

J
3.331 Beiträge seit 2006
vor 15 Jahren

... und zum (mindestens) 83. Mal der Hinweis: Wenn eine solche Abfrage mit **Parameters **erstellt wird, tritt das Problem überhaupt nicht auf:

DateTime d = new DateTime(2008, 8, 27);
OleDbCommand cmd = new OleDbCommand();
cmd.CommandText = "SELECT * FROM srtTitanStats2 where datestamp >= ? AND datestamp <= ?";
cmd.Parameters.AddWithValue("dateFrom", d);
cmd.Parameters.AddWithValue("dateTo", d);

Zu beachten ist lediglich, dass OleDb mit '?' arbeitet und andere DbProvider mit benannten Parametern und/oder '@' oder ':'.

Weitere Hinweise und Erläuterungen gibt es zuhauf in der Forumssuche.

Jürgen

S
silentcatcher Themenstarter:in
8 Beiträge seit 2008
vor 15 Jahren

@puppet: danke für deinen hilfe, es lag wirklich genau an dem was du gesagt hast. Für den Hinweis mit BuildCriteria bin ich dir ebenfalls dankbar, war sehr hilfreich.

@jürgen. danke auch für deinen Lösungsansatz, nur ist mir der ein bisschen zu umständlich und zuviel code um ans ziel zu kommen. Da setze ich mich lieber noch ein bisschen mit der thematik, wie schreibe ich richtige access-abfragestrings ausseinander.
Auch wenn ich dieses programm privat nie gebrauchen werde.

Gruss aus der Schweiz und danke für die hilfe
Daniel

363 Beiträge seit 2007
vor 15 Jahren

Das ist ja grad das schöne an den Commands. Die Stringfummelei fällt dann im Prinzip komplett weg (bis auf ein paar grundlegende Sachen). Den Rest erledigt dir der Stringbuilder.
Ich gebe dir recht, am Anfang ein Mehraufwand, hinterher hast du es dann umso einfacher. Gerade wenn du was ändern möchtest, im Extremfall ne andere DB, dann ist das schnell erledigt.
Musst du jetzt halt für dich entscheiden, wie sehr dich das Programm später noch verfolgen wird, Wartung etc. und wenn du dich eh einarbeitest, dann kannst du das auch gleich "richtig" machen. Aufwand <-> Nutzen
Vielleicht noch ein paar Vorteile von den Commands.
Du hast Datensicherheit in Bezug auf den Connection-String, den Parametern usw. das heißt der Abfrage-String stimmt dann immer, da gibts dann keine Fehler aufgrund falsch zusammengesetzter SQL-Strings.

Gruß Cookiie

"Hail to the King, Baby!"

F
10.010 Beiträge seit 2004
vor 15 Jahren

@silentcatcher:
Das friemeln der Parameter in den Sql-String ist der falsche weg, nicht der mit den Parametern

225 Beiträge seit 2006
vor 15 Jahren

aloha,

habt ja recht. parameter sind eindeutig die elegantere methode.
bloß so wie ich silentcatcher verstanden habe ist das eh nur ein "micky maus" programm zum üben.
und von daher finde ich es ok, wenn er sich nochn bissel mit sql-strings auseinander setzt, wenn er noch nicht so die ahnung hat.

später solltest du allerdings wirklich auf die parmeter basierende abfrage umsteigen. aber ich denk das kommt dann schon von alleine, wenn du mal deine erfahrungen gemacht hast.

a hui hau
puppi

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

F
10.010 Beiträge seit 2004
vor 15 Jahren

Gerade wenn man Übt sollte man doch die richtige Herangehensweise üben, sonst gibt es
keinen Lerneffekt.

S
silentcatcher Themenstarter:in
8 Beiträge seit 2008
vor 15 Jahren

Ich habe es verstanden, parameter sind die bessere Lösung...... soviele auf einmal können sich ja nicht irren. 🙂 Ich werde mich mit diesen Parametern noch ein bisschen ausseinandersetzen und werde dann noch auf euch zukommen wenn was ned klappt.

Und

@Puppetmaster: Wer sagt das ich keine ahnung von SQL-Strings habe? 8o Generell stimmt das nähmlich nicht, nur im Bezug auf Access und so wie mann das dort machen kann oder muss ist doch wirklich arg speziell. Jedenfalls im Gegensatz zu MSSQL und MySQL

Mein Geschäft hat aber leider sone DB und da kann ich ja nicht sagen, sone scheisse aber auch... macht das mit MSSQL-Server.

Grüsse
Dani

225 Beiträge seit 2006
vor 15 Jahren

aloha,

sry silentcatcher. wollt niemandem auf den schlips treten. habs wohl falsch interpretiert 😉
hast recht. access is da schon etwas speziell.

@FZelle
ich würde jetzt nicht unbedingt von einer falschen und richtigen herangehensweise sprechen. ich würde es eher mit assembly und höheren programmiersprachen vergleichen.
is doch gut, wenn man es von der pike auf lernt. dann kann man es immerhin auch auf die "altmodische" art und weise.
aber das kann silentcatcher ja eh schon. von daher macht dich ruhig an die parameter 😉

a hui hau
puppi

Yunky: was fürn operator muss ich den nehmen wenn ich sagen will nichtgrößergleich??
Yunky: !>3??
Yunky: !≥ ??
Puppetmaster: G
Yunky: aja ka
Puppetmaster: kleiner (<)
Yunky: stimmt^^

X
1.177 Beiträge seit 2006
vor 15 Jahren

huhu,

is doch gut, wenn man es von der pike auf lernt. dann kann man es immerhin auch auf die "altmodische" art und weise.

Die Parametrisierten Abfragen gibts schon ziemlich lange (ich Tip mal auf "von Anfang an"), das kam nicht erst die letzten Jahre auf, sondern ging bereits mit DBase und Paradox^^

Edit:
Verhält sich irgendwie mit dem "neu entdeckten" NX-Flag (No Execute für Datenspeicherseiten) - fürher gabs explizit Daten und Programm-Speicher. Wann ist das eigentlich der Faulheit zum Opfer gefallen? Protected Mode?

🙂

Xynratron

Herr, schmeiss Hirn vom Himmel - Autsch!

Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.

F
10.010 Beiträge seit 2004
vor 15 Jahren

@Puppetmaster:
Doch, in diesem Fall gibt es eine falsche herangehensweise.