COleDateTime allgemeines Problem
-
Motornummer LIKE '2C%'
-
So, mein Datumsproblem ist gelöst:
strTmp.Format(_T("([VerkDat] BETWEEN \'%s 0:00:00\' AND \'%s 23:59:59\')"), tmTemp.Format(_T("%Y-%m-%d")), tmTemp.Format(_T("%Y-%m-%d")));
Ich hatte die Anführungszeichen um die Datumsangaben nicht.
-
hatte den vorlestzten Post nicht gelesen, mit motornummer like 2C% geht es leider auch nicht!
Freut mich, dass es jetzt mit deiner Abfrage klappt, ich komm mit meinen Wildcards immernoch nicht weiter! Hast du schon mal Wildcards gesendet? Wenn ja kannst du mir mal die Query zeigen?
-
Und wenn du Anführungsstriche machst? Ist doch eine Zeichenkette. (Habs editiert.)
Das funktioniert beim Datum leider nicht.
-
auch bei einer Zeichenkette geht es nicht ich hab es ja genau deswegen erst mal an ner Zeichenkette probiert, aber dann kommt ungültiger deskriptorindex.
-
Schau mal, diese Zeile habe ich eben ausprobiert - funktioniert.
strFilter = _T("(Kunde_Nachname like \'" + m_strNachname + "%\')");
-
Juhu das geht! da werd ich morgen gleich mal genauer rein schauen was man da alles noch machen kann hast mir den feierabend gerettet. Vielen Dank
Bis morgen
-
Gerne
Solltest du rausfinden, wie das beim Datum geht, gib Bescheid.
Momentan habe ich es da mit BETWEEN gelöst, aber irgendwie gefällt mir die Lösung nicht so ganz.
-
Ich bleib noch am Ball!
Und wenn ein Tor fällt schrei ich !
-
ich hab zwar noch keine wirklich Lösung gefunden, aber neue Ansätze, mit denen ich bisher aber leider noch nicht wirklich erfolgreich war!
1. starting with; Ich dachte mir ein starting with Datum sollte eigentlich alle Datensätze eines Tages anzeigen!
2. IN; mit dem IN kann ich sagen, dass das in was ich danach in Klammern angebe im Feld enthalten sein muss. so sollte IN (05.05.2005) gleiches ergebnis wie oben bringen.
3.Es gibt für datetime Typen sowas wie das hier:
YEAR(EMENDATE) IN (YEAR(CURRENT DATE), YEAR(CURRENT DATE - 1 YEAR), YEAR(CURRENT DATE - 2 YEARS))
4. sollte das mit Wildcard auch gehen, das Problem ist nur folgendes:
For a TIMESTAMP: If the host variable is less than 19 bytes, an error occurs. If the length is less than 26, but greater than or equal to 19 bytes, trailing digits of the microseconds part of the value are omitted.
Sprich ich muss den String den ich übergebe auf ne bestimmte Größe bringen!
5. Timestamp kann konvertiert werden in Char, VarChar,
Date
Time dann kann man einen Stringvergleich bzw Date vergleich machen
Ich werd noch ein wenig weiter forschen und wenn ich neuigkeiten hab melde ich mich
-
zu 1: Muss ich mal nachlesen, kenne ich nicht.
zu 2: IN (05.05.2005) ist doch das Gleiche wie = 05.05.2005
zu 3: Das ist eine Hilfe zu DB2 - sicher, dass das identisch ist? Oder, wie so gerne, nur zu 90% und der Rest bricht einem das Genick?
zu 4: Quelle? Und über den Satz muss ich mal in Ruhe nachdenken...
zu 5: Wie konvertiert man das? DASS man das machen kann war mir ziemlich klar, nur wie ist die Frage.
-
zu 2. ich dachte IN bedeutet soviel wie es muss enthalten sein also quasi %05.05.2005%
zu 3. nein es kann schon sein dass es nur die 90% sind weiß ich leider nicht so genau
zu 4. Quelle weiß ich nicht mehr muss nochmal schauen
zu 5. Hast du ein Dynaset? da sollte sowas funktionieren:CString SQLStr = _T("select DATE(\'Zeitstempel\') from [dbo].[TRWErgebnisse]"); m_pSet->Close(); m_pSet->Open(NULL,SQLStr,NULL);
aber es gibt dann noch CAST was glaube ich ganz gut ist oder convert
MY-SQL ist auch nett mal anzuschauen
schau mal im SQL ind 21 Tagen Verzeichnis [url]\SQL21\Sql_in_21_Tagen\KAP19.HTM[/url]
[EDIT] noch was zu cast
-
Hab ne Lösung! Für meine Schichten und alles!
Also das Zauberwort dafür heißt datepart(day,[zeitstempel]) wenn ich das im SQL-Server mache, dann bekomm ich den Tag vom Timestamp! schön gell!
wenn ich jetzt meine Schicht will, dann mach ich folgendes:datepart(hour,[zeitstempel])+2)%24/8+1
Jetzt hab ich schicht 1 gleich Nacht 2 Früh drei Mittag.
Jetzt kommt allerdings das aber!
Der ODBC-Treiber unterstützt keine Dynasets, sprich du kannst das ganze nicht in deinen WHERE einbauen! Ist etwas scheiße, aber du musst jetzt mittels einem anderen Tool eine virtuelle Spalte in der DB anlegen die ein kalkuliertes Feld ist. dieses Feld entsteht dann bei Abfrage nach obiger Formel. Wenn du kein richtig schönes MS-DB-Verwaltungstool hast schau mal hier
Mit dem Tool kannst du soooo viel geile Sachen machen der bildet dir auch richtig schöne SQL-Querys nach Clickibundi und und und wenn du als kein richtig geiles hast schau es dir unbedingt an!
-
Ich kann dir jetzt weiter helfen!
Besteht dein Problem noch?
-
Ich bin grade an einer anderen Baustelle.
Das Suchen hab ich erstmal geparkt und mache gerade was anderes.
Ich melde mich dann bei dir, danke!
-
OK mach das, hab jetzt festgestellt wenn man weiß wie ist das alles kein Problem!
-
Nabend ich bin auch grad dabei ne Datumsabfrage zu machen, komm aber mit dem Code von esartu ned klar
Und zwar will ich nen Datum in nem ActiveX-Kalender anklicken und denn übern button mir für dieses Datum Einträge aus der tabelle anzeigen lassen. Bei mir haberts grad an der Umsetzung vom Datum aus dem ActiveX-Element in die FilterZeile. Kein Plan wie ich das umsetzten kann
Edit: Hab mir nun zuerst nen CString angelegt mit dem Datum ausm Kalender beim raufklicken. Denn hba ich das gemacht wenn ich suchen drück
strTmp.Format(_T("([Termine].[Datum] BETWEEN \'%s 0:00:00\' AND \'%s 23:59:59\')"), tmTemp.Format(_T("%Y-%m-%d")), m_strOutput); dateSet.m_strFilter=strTmp;
Kein plan ob es so richitg ist, aber auf jeden fall kommt wenn ich Suchen drücke die Meldung das bei der konvertierung eines char-Wertes in einen datetime Wert der datetime Wert ausserhalb des gültigen berieches liegt
-
Was GENAU steht in m_strOutput? Wie sieht das Datum aus, schreib mal ein Beispiel rein.
Die Sache hat nämlich einen fetten Haken: Wenn das Datum nicht exakt so aussieht, wie der SQL-Server das haben will, versteht er es nicht.Das muss so mit Bindestrichen usw. sein, sonst wird das nichts.
Kannst du dir kein CTime oder COleDateTime Objekt von dem Control geben lassen?
Was nutzt du? CDateTimePicker?
-
Also,
ich mach das Ganze mit den Punkten wie hierzulande üblich:CString CGrundForm::BuildQuery(CString Const1, CString Operator, CTime Const2) // Erzeugt Query-String der Art (StartDatum >= '31.12.2005 12:30:30') { CString Ergebnis; Ergebnis = "(" + Const1 + Operator + "\'" + Const2.Format("%d.%m.%Y %H:%M:%S") + "\'" + ")"; return Ergebnis; }
und es funktioniert tadellos. Datenbank ist übrigens der MS-SQL-Server 2000 über ODBC.
Kann es sein, dass in den Optionen des Servers hier etwas eingestellt werden kann, damit das funktioniert?