SQL mit Datum



  • Hallo Leute,

    bin gerade dabei, ein Programm zu schreiben, dass auf eine "Access-Datenbank" zugreifen soll. Hierbei handelt es sich um ein Programm, dass in MFC erstellt wurde.

    In einem Dialog will ich nun anhand eines eingegebenen Datum die betroffenen Sätz in einer Listbox anzeigen lassen.

    Dafür habe ich folgenden Code erstellt:

    void CBestellungenDlg::setDatenInMaske()
    {
    	CString sql;
    	CString datumsstring;
    
    	UpdateData(TRUE);
    
    	datumsstring = datumForSql(m_datum);
    
    	sql = "select distinct id, ip, kw from auswertung where datum = '"; 
    	sql += datumsstring + "'"; 
    
    	m_liste.ResetContent();
    
    	m_liste.fill(DBZugriff::getDB(), sql, -1);
    
    }
    
    CString CBestellungenDlg::datumForSql(const COleDateTime& datum)
    {
    	CString date;
    
    	date = datum.Format("%d.%m.%Y");
    
    	return date;
    }
    

    Das Datum kann man auch über einen Kalenderdialog ändern.

    Leider bekomme ich nun immer die Fehlermeldung:
    "Datentyp in Kriterientyp unverträglich"
    Dies wird wohl an der SQL-Anweisung liegen. 😕

    Kann mir da vielleicht einer von euch weiterhelfen????

    MfG
    Markus

    [edit=kingruedi] sfds [/edit]



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum MFC mit dem Visual C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Kann es sein das fill() eine selbstgeschrieben Methode ist? ich find
    die nicht.

    Vielleicht liegt es ja an der "-1", was ist denn der dritte Param
    der Methode?



  • Hallo,

    fill ist eine selbstgeschriebene Methode. Mit der -1 übergebe ich der Methode nur, welcher Eintrag in der Listbox markiert werden soll (bei -1 wird der erste Eintrag markiert).



  • Denke aber schon mal, dass es an der SQL-Anweisung liegen muß.
    Die fill() Methode dürfte nicht das Problem sein, da ich damit nicht nur diese eine Liste fülle, sondern auch alle Listen im Programm.



  • Hast Recht. Du kannst das Datum nicht mit einem String vergleichen. Das ist ne Access-Fehlermeldung.

    Access will das Datum so formatiert haben:

    #1/12/04#
    

    voll besch... 🙂

    edit: Oder du Wandelst das Datum im SQL in einen String um.
    Ich weiss aber nicht wie das bei Access geht.
    to_char(var, 'dd.mm.YYYY') (oracle) geht jedenfalls nicht 😞

    edit the second:

    "WHERE format(datum,'dd.mm.YYYY') = "+ stringdatum
    

    geht..



  • Access will das Format schon so haben

    #1/12/04#

    ABER in der amerikanischen Datumsschreibweise

    #Monat/Tag/Jahr#



  • Also meins mag die deutsch (Access '97).

    aber mit format ist das Problem ja eh behoben.

    Hatte da oben übrigens noch einen Fehler drin:

    strSQL = "SELECT id "
             "FROM tabelle "
             "WHERE format(datum,'dd.mm.YYYY') = '" +stringdatum+ "'"
    

    Das hab ich eben gestestet und es geht..



  • Hallo,
    vielen Dank für euere Hilfe.
    Hab jetzt das Problem wie folgt gelöst:

    CString CBestellungenDlg::datumForSql(const COleDateTime& datum)
    {
    	CString date;
    
    	date = datum.Format("#%m/%d/%Y#");
    
    	return date;
    }
    

    Den SQL hab ich jetzt wie folgt gemacht:

    sql = "select distinct id, ip, kw from auswertung where datum =" + datumsstring;
    

    Jetzt funktioniert auch alles.

    Vielen Dank nochmal an alle.

    Mfg
    Markus


Anmelden zum Antworten