Facetious: ODBC Abfrage

Hi!

es geht um eine anmeldung. es soll überprüft werden ob vorname, nachname und geburtsdatum bereits vorhanden sind

tag, monat und jahr werden in verschiedenen drop down listen ausgewählt

mein statement:

SELECT vorname, nachname, gebdat FROM user WHERE vorname = '".$_POST['vn']."' AND nachname = '".$_POST['nn']."' AND gebdat = '".$_POST['tag'].".".$_POST['monat'].".".$_POST['jahr']."'

fehlermeldung: Datentypen in Kriterienausdruck sind unverträglich

hab auch schon probiert gebdat ohne die -'- zu machen funkt auch nicht

Bitte um Hilfe
mfg Facetious

  1. Hallo,

    $SQLStatement = "SELECT vorname, nachname, gebdat FROM user WHERE vorname = '".$_POST['vn']."' AND nachname = '".$_POST['nn']."' AND gebdat = '".$_POST['tag'].".".$_POST['monat'].".".$_POST['jahr']."'";

    Was ergibt
    echo $SQLStatement;
    ?

    fehlermeldung: Datentypen in Kriterienausdruck sind unverträglich

    Welches Datenbanksystem wird abgefragt?

    Welchen Datentyp haben die Felder vorname, nachname und gebdat?

    viele Grüße

    Axel

  2. Hi,

    mein statement:

    SELECT
     vorname,
     nachname,
     gebdat
    FROM
     user
    WHERE
     (<INHALT DER WHERE KLAUSEL>)

    fehlermeldung: Datentypen in Kriterienausdruck sind unverträglich

    Mit Kriterienausdruck ist der Inhalt der WHERE Klausel gemeint.

    Es gibt also eine Typumwandlung, die explizit zu erfolgen hat. Bitte mal das gesamte SQL-Statement "im Moment der Ausfuehrung" hier posten.

    Gruss,
    Ludger

  3. erstmal danke für eure prompten antworten

    das echo ergibt das folglich wird es so auch ausgeführt
    das ganze is in access 2003

    nachname = text
    vorname = text
    geburtsdatum = datum, kurz

    SELECT nachname, vorname, geburtsdatum FROM schueler WHERE schueler.nachname = 'Pfeiffer' AND schueler.vorname = 'Sebastian' AND schueler.geburtsdatum = '23.02.1987'

    mfg Facetious

    1. Hi,

      SELECT
       nachname,
       vorname,
       geburtsdatum
      FROM
       schueler
      WHERE
       (schueler.nachname = 'Pfeiffer') AND
       (schueler.vorname = 'Sebastian') AND
       (schueler.geburtsdatum = '23.02.1987')

      welche Datentypen? Favorit hier das 'geburtsdatum'.

      Gruss,
      Ludger

      1. Hi,

        SELECT
        nachname,
        vorname,
        geburtsdatum
        FROM
        schueler
        WHERE
        (schueler.nachname = 'Pfeiffer') AND
        (schueler.vorname = 'Sebastian') AND
        (schueler.geburtsdatum = '23.02.1987')

        welche Datentypen? Favorit hier das 'geburtsdatum'.

        funktioniert auch nicht gleiche fehlermeldung
        datentyp von geburtsdatum schon wie vorher dazu geschrieben

        zeit/datum, kurz

        1. Hi,

          funktioniert auch nicht gleiche fehlermeldung

          schon klar.

          datentyp von geburtsdatum schon wie vorher dazu geschrieben

          Dummerweise gibt es diese Datentypen nicht. Das UI von 'M$ Access' gaukelt Dir das in der Deutschen Version nur vor.

          Mal die M$ Access Doku bzgl. Datumswerten erforschen!   ;-)

          Gruss,
          Ludger

          1. gut
            ich hab ein bisschen gegoogelt

            da ist rausgekommen;
            format sollte sein: yyyy-mm-dd

            gesagt getan, gleiche fehlermeldung
            ...

            mfg Facetious

            1. da ich nicht weiss wie ich meinen post editiere

              ich habe das problem gelöst

              ich frage ab
              ... WHERE geburtsdatum = $_POST['jahr'] - $_POST['monat'] - $_POST['tag']

              danke für alle beteiligten

              mfg und thx Facetious

              1. SELECT vorname, nachname, gebdat FROM user WHERE vorname = '".$_POST['vn']."' AND nachname = '".$_POST['nn']."' AND gebdat = '".$_POST['tag'].".".$_POST['monat'].".".$_POST['jahr']."'

                Ich finde es übersichtlicher das so zu schreiben:

                $osc = array("'" => "''"); // ODBC-Special-Chars, evtl. unvollständig

                $gebdat = sprintf('#%s-%s-%s#', $_POST['jahr'], $_POST['monat'], $_POST['tag']);

                $selectStatement = sprintf('SELECT vorname, nachname, gebdat FROM user ' .
                  'WHERE vorname = "%s" AND nachname = "%s" AND gebdat = "%s"',
                  strtr($_POST['vn'], $osc),
                  strtr($_POST['nn'], $osc),
                  $gebdat);

                Das sprintf spart eine Menge Tippfehlersuche bei den Anführungszeichen.

                <durchsage type="Flughafen">Achtung Sicherheitshinweis! Verwenden Sie keine Usereingaben ungeprüft!</durchsage>
                Was ist, wenn jemand O'Brian heißt, oder ungünstigerweise '; DELETE * FROM tabelle;  ?

                Ein Kommentar im Manual zu odbc-exec sagt, dass das Datum in # einzuschließen sei und in der Reihenfolge Jahr, Monat, Tag anzugeben ist. Eventuell muss auch noch die Uhrzeit mit dazu...

            2. Hi,

              da ist rausgekommen;
              format sollte sein: yyyy-mm-dd

              ich hatte das gleiche Problem mal vor einigen Jahren. Bitte _wiederum_ das SQL-Statement posten. - So zu sagen aus Gruenden der fachmaennischen Problembearbeitung...   ;-)

              Gruss,
              Ludger

    2. Hallo,

      das ganze is in access 2003
      geburtsdatum = datum, kurz

      Access speichert Datumswerte nicht als String, sondern als Zahl. Eine solche Datumszahl kann mit Hilfe von Funtionen aus Strings oder Zahlen ermittelt werden.

      SELECT nachname, vorname, geburtsdatum FROM schueler WHERE schueler.nachname = 'Pfeiffer' AND schueler.vorname = 'Sebastian' AND schueler.geburtsdatum = '23.02.1987'

      Du hast ja Tag, Monat, Jahr in einzelnen Werten vorliegen. Deshalb kannst Du die Funktion DateSerial(Jahr, Monat, Tag) nutzen.

      SELECT nachname, vorname, geburtsdatum FROM schueler WHERE schueler.nachname = 'Pfeiffer' AND schueler.vorname = 'Sebastian' AND schueler.geburtsdatum = DateSerial(1987, 2, 23)

      viele Grüße

      Axel