COleDateTime allgemeines Problem



  • also ich hab da folgendes gefunden:

    SQL_TYPE_TIMESTAMP 1992-12-31 23:45:55.12

    SQL_C_CHAR (23-Bufferlength) 1992-12-31 23:45:55.12\0 [a] n/a

    SQL_TYPE_TIMESTAMP 1992-12-31 23:45:55.12

    SQL_C_CHAR (22-Bufferlength) 1992-12-31 23:45:55.1\0 [a] 01004

    SQL_TYPE_TIMESTAMP 1992-12-31 23:45:55.12
    SQL_C_CHAR (18-Bufferlength) ---- 22003

    zu finden in der MSDN unter dem Stichwort "SQL to C Data Conversion Examples"
    und unter "SQL versus C++ data types" findet man dass ein SQL Timestamp in C++ ein CTimeobjekt oder ein CString sein kann.
    Boa ich muss jetzt erst mal RUHE BEWAREN! Ich dreh sonst echt durch mit der scheiße.
    [Edit]
    Wollte nämlich grad sagen wenn ich in der Suche 07.04.2005 12:08:57 eingebe, dann geht es. Aber jetzt hab ich es grad versucht und es geht eben nicht! (es ging aber mal!)
    [Es geht doch hatte nur ' blabla ' vergessen] [\Edit]

    Zusammenfassung:
    Mein Datum dass ich aus der DB hole und in einem Editfeld ausgebe hat folgendes Format:
    07.04.2005 12:08:57

    Wenn ich suche nach '07.04.2005 12:08:57' geht die Suche ich will aber die Zeit weglassen können, also '07.04.2005' und alle an dem Datum erhalten, egal welche Zeit.
    😞 😞 BITTE HELFEN 😞 😞



  • Dann nimm im Filter statt = ein LIKE und hinter dem Datum das entsprechende Wildcard Zeichen der Datenbank.



  • Und falls das nicht klappt, sich nach allem zwischen 0:00:00 und 23:39:39 😃



  • OK und das sieht wie aus? Ich habe eine MS-SQL Datenbank der Datumstyp ist Timestamp. Anfrage nach alles am Tag 06.05.2005? 🙂

    Bekomm das nämlich nicht hin! Weil er immer meckert, er kann das nicht in ein Datetimeobjekt wandeln. 😞
    Danke für die Hilfe!



  • Ist die Meldung vielleicht so ähnlich?

    Line 1: Incorrect syntax near '2005-04-07'.
    Statement(s) could not be prepared.
    

    So langsam kam mir nämlich der Verdacht, dass ich das Codestück auf dem MS-SQL noch nicht getestet hatte und Pervasive hatte einen echten Datumstyp, ohne Zeit. 🙄

    So ein Mist, das hätte ich doch NIE gefunden. 😡



  • Also ich hab es jetzt wirklich mit >=00:00:00 <=nächsterTag 00:00:00 aber schön ist das nicht, mit Wildcards wäre das viel geiler! denn ich will ja auch machen könne alle Teile der Mittagschicht, also Tag Woche Jahr egal Zeit >=14:00:00 <= 22:00:00 mit Wildcards kein Thema mit der Variante von jetzt ein Problem mit schleifen und scheiß!



  • Zeig mal den Code bitte, ich kriegs nicht hin. 😞

    // 			strFilter += _T("([Verk_Dat] = CONVERT(\'" + tmTemp.Format(_T("%Y-%m-%d")) + "\',SQL_DATE))");
    
    			strFilter += _T("([Verk_Dat] LIKE CONVERT(\'" + tmTemp.Format(_T("%Y-%m-%d%%")) + "\',SQL_DATE))");
    
    // 			strFilter += _T("((([Verk_Dat] >= CONVERT(\'" + tmTemp.Format(_T("%Y-%m-%d 0:00:00")) + "\',SQL_TIMESTAMP))) AND");
    // 			strFilter += _T("(([Verk_Dat] <= CONVERT(\'" + tmTemp.Format(_T("%Y-%m-%d 23:59:59")) + "\',SQL_TIMESTAMP))))");
    

    Alle drei Versionen geben eine ähnliche Fehlermeldung.



  • öhm wenn ich ehrlich bin mach ich das viel einfacher! Wenn du oben nochmal liest kann man auch einfach einen CString übergeben, und das mach ich auch: ich hab so ne SQL zusammenclick-Maske, und in der clickere ich mir folgenden String für meinen Filter zusammen, so dass sich ergibt:

    m_pSet->m_strFilter = _T(" [ZeitStempel] >= '06.05.2005 00:00:00'  AND [ZeitStempel] <= '07.05.2005 00:00:00'");
    

    oder natürlich

    m_pSet->m_strFilter = _T(" [ZeitStempel] BETWEEN '06.05.2005 00:00:00'  AND '07.05.2005 00:00:00'");
    


  • Bei mir steht dann drin:

    ([LagerDat] LIKE '2005-04-07%')
    

    Die Klammern sind da, weil das Lagerdatum nur eine von 5 möglichken Sachen ist.
    Aber ich kriege nix. 😞

    Edit: Okay, das Problem liegt im Recordset. 😞
    Direkt im Manager bekomme ich zu

    SELECT     *
    FROM         Buch
    WHERE     (LagerDat BETWEEN '2005-04-07 0:00:00' AND '2005-04-07 23:59:59')
    

    auch das gesuchte. Na, ich such denn mal...



  • mach mal sicherheitshalber und nur als versuch

    strFilter = ID >=0;
    requery();
    

    Ich hatte auch schon oft nen Filter noch gesetzt und dann brachte er nur schrott



  • Wegen dem Problem, dass du Uhrzeiten abfragen willst...
    Ich habe hier gerade die MS-SQL Funktion DATEPART entdeckt.

    Wegen der Handhabung gucke ich grade mal... 🙂



  • juhu! Woher bekommst du MS-SQL-Funktionen?
    Ich hab keine Ahnung wo ich da suchen soll! wohl weniger über die MSDN!



  • Ich hab hier MS-SQL Server in 21 Tagen liegen. 😃

    Nur teilweise hilftreich, aber immernoch besser als das BlackBook. 😞

    Es gibt dann noch die SQL Books Online: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/startsql/getstart_4fht.asp

    Hier scheint leider einiges offline zu sein: http://www.dhruvaraj.com/Database/SQLServer.htm



  • hm OK werde mir wohl auch mal ein paar MS-SQL Bücher organisieren müssen, vielleicht komm ich dann weiter! Aber für heute reicht es mir echt! Schnauze voll ich geh nach hause!
    Vielleicht find ich hier ja morgen früh die Wildcard-Lösung 😃 😉 😃



  • So, so finde ich alles von einem bestimmten Tag.

    Schaus dir an, Erklärung folgt nach meiner Mittagspause. 😉

    CString strTmp;
    			strTmp.Format(_T("(((Select DAY([LagerDat])) = %d) AND "), tmTemp.GetDay());
    			strFilter += strTmp;
    			strTmp.Format(_T("((Select MONTH([LagerDat])) = %d) AND "), tmTemp.GetMonth());
    			strFilter += strTmp;
    			strTmp.Format(_T("((Select YEAR([LagerDat])) = %d))"), tmTemp.GetYear());
    			strFilter += strTmp;
    


  • meinst du nicht dass deine Filterung nach 3 verschiedenen Kriterien unnötig Zeit kostet? Wäre es nicht schöner und sauberer es in etwa so zu tun?

    [ZeitStempel] >= '10.05.2005 00:00:00'  AND [ZeitStempel] <= '11.05.2005 00:00:00'
    

    Die Zeiten musste dann natürlich noch variabel einlesen, dazu würde ich so spontan sagen kannst du über setDateTime die Zeit einfach auf 00:00:00 setzen und dann einfach mit gleicher funktion für letzteren Wert day ++ machen!

    Vielleicht



  • Erstens hab ich das so wie du da geschrieben hast ja nicht hinbekommen (siehe gestern), zweitens wolltest du nach Uhrzeiten filtern, da ist das da und ein wenig lesen die halbe Miete. 🙂

    Hier sind alle Versuche bisher. Das auskommentierte geht aus verschiedenen Gründen nicht. (Hat kein Ergbnis oder gibt ne Meldung.)

    CString strTmp;
    			strTmp.Format(_T("(((Select DAY([LagerDat])) = %d) AND "), tmTemp.GetDay());
    			strFilter += strTmp;
    			strTmp.Format(_T("((Select MONTH([LagerDat])) = %d) AND "), tmTemp.GetMonth());
    			strFilter += strTmp;
    			strTmp.Format(_T("((Select YEAR([LagerDat])) = %d))"), tmTemp.GetYear());
    			strFilter += strTmp;
    
    // 			strFilter += _T("([LagerDat] BETWEEN \'" + tmTemp.Format(_T("%Y-%m-%d 0:00:00")) + "\' AND \'" + tmTemp.Format(_T("%Y-%m-%d 23:59:59")) + "\')");
    
    // 			strFilter += _T("([LagerDat] = CONVERT(\'" + tmTemp.Format(_T("%Y-%m-%d")) + "\',SQL_DATE))");
    
    // 			strFilter += _T("([LagerDat] LIKE CONVERT(\'" + tmTemp.Format(_T("%Y-%m-%d%%")) + "\',SQL_DATE))");
    
    // 			strFilter += _T("([LagerDat] LIKE \'" + tmTemp.Format(_T("%Y-%m-%d%%")) + "\')");
    
    // 			strFilter += _T("((([LagerDat] >= CONVERT(\'" + tmTemp.Format(_T("%Y-%m-%d 0:00:00")) + "\',SQL_TIMESTAMP))) AND");
    // 			strFilter += _T("(([LagerDat] <= CONVERT(\'" + tmTemp.Format(_T("%Y-%m-%d 23:59:59")) + "\',SQL_TIMESTAMP))))");
    


  • Hm also ich hab es jetzt so vor, wenn ich nen RDOButton drücke Mittagschicht dann mach ich

    m_sDatumVon = m_dtpVonDatum.Format("%d.%m.%Y 14:00:00");
             m_sDatumBis = m_dtpVonDatum.Format("%d.%m.%Y 22:00:00");
    

    und die zwei Strings füge ich dann einfach in meinen Stringfilter ein

    m_pSet->m_strFilter.Format(_T("[TIMESTAMP] >= \'%s\' AND <= \'%s\'"), m_sDatumVon , m_sDatumBis );
    

    P.S.: Das und ein bischen lesen die halbe Miete? Ich versteh nicht so ganz was du mir damit sagen willst.



  • Polofreak schrieb:

    Also ich hab es jetzt wirklich mit >=00:00:00 <=nächsterTag 00:00:00 aber schön ist das nicht, mit Wildcards wäre das viel geiler! denn ich will ja auch machen könne alle Teile der Mittagschicht, also Tag Woche Jahr egal Zeit >=14:00:00 <= 22:00:00 mit Wildcards kein Thema mit der Variante von jetzt ein Problem mit schleifen und scheiß!

    Da klangst du so, als wenn das an jedem Tag die Zeit interessant wäre.
    Und dafür müßtest du das so ähnlich machen wie ich, nur mit der Zeit statt dem Datum. (Mit Datepart)



  • also ich hab hier grad noch ewig rumprobiert das wirklich auf alle Tage zu bringen, das was ich oben geschrieben hab, war allerdings blödsinn, wenn man will dass der Tag egal und uhrzeit fest ist. Ich hab gelesen bei Format kann man %% schreiben um ein % zu übergeben, dann wäre es ja

    m_dtpVonDatum.Format("%% 14:00:00");
    

    Eigentlich das was ich suche! aber ich komm damit auch nicht weiter! Ich hab dann versuch mal in nem einfachen Textstring ne Wildcard ein zu setzen und hab bemerkt, dass ich nicht einmal das kann! ich wollte was schreiben wie where Motornummer = 2C% aber alle Varianten sind gescheitert. kanst du mir sagen wie ich im strFilter mit ner MS-SQL-DB Wildcards allgemein einsetze??


Anmelden zum Antworten