MarkX: Fehler: Typen unverträglich

Guten morgen,

ich stehe vor folgendem Rätsel:

ich lese einen Wert aus einer Datenbank-Tabelle aus um diesen Wert in einer weiteren Abfrage zu verwenden. Bei der Datenbank handelt es sich um Access. Folgendes Konstrukt verwende ich dabei:

set ad2 = Conn.Execute("select * from Adressen where status = 'ne'")
x1 = ad2("DatumID")
set bd = Conn.Execute("select * from Bestellung where Datex = '" & x1 & "'")

Dabei erhalte ich folgende Fehlermeldung:

Laufzeitfehler in Microsoft VBScript- Fehler '800a000d'

Typen unverträglich

Die Fehlermeldung bezieht sich auf die Zeile "set bd = ....".

Nun habe ich folgendes versucht: ich lasse mir den Wert von x1 ausgeben und setze diesen Wert in die Abfrage der Zeile ein, die den Fehler verursacht. Der Fehler erscheint nun NICHT mehr! Dies verstehe ich nicht. Für Ansätze, die mich zur Lösung führen wäre ich dankbar.

MfG
MarkX.

  1. Hallo,

    unter Umständen läßt dich asp nicht einfach sowas ausführen:
    x1 = ad2("DatumID")

    Ich habe dieses auch mal erlebt in Bezug auf Access-Datenbanken.
    Bei MSSQL-Server kann es eventuell anders sein.
    Helfen kannst du dir, indem du zwangsläufig den Wert in einer Schleife ausliest. Wenn bei Status = 'ne' nur ein Wert gefunden wird, da dieser eindeutig ist ändert dies ja nichts am Ergebnis:
    do while not ad2.eof
    x1 = ad2("DatumID")
    loop

    Probier das mal aus....

    Odium

    1. Hallo Odium,

      danke erstmal, aber so wird leider immer noch kein Schuh draus.

      unter Umständen läßt dich asp nicht einfach sowas ausführen:
      x1 = ad2("DatumID")

      Diese Anweisung wird ja korrekt ausgeführt, weil ich mir auch deren
      Ergebnis problemlos anzeigen lassen kann.

      do while not ad2.eof
      x1 = ad2("DatumID")
      loop

      Außerdem war diese Anweisung bereits Bestandteil einer solchen
      Schleife.

      Probier das mal aus....

      Hab ich. :-) Trotzdem danke!

      MfG
      MarkX.

      1. Hallo,

        danke erstmal, aber so wird leider immer noch kein Schuh draus.

        unter Umständen läßt dich asp nicht einfach sowas ausführen:
        x1 = ad2("DatumID")

        Doch, nur ist ad2("DatumID") ein Field-Objekt. Dieses Field-Objekt kann nicht mit & an einen String gekettet werden. Das Objekt hat die Eigenschaft .value, welche einen String zurückliefert.

        x1 = ad2("DatumID").value

        Gibt es bei VBSCRIPT Option Explicite? Wenn ja, solltest Du das nutzen und die Variablen einzeln deklarieren.

        Dim x1 as String
        x1 = ad2("DatumID")

        Das hätte dann hier schon eine Fehlermeldung gegeben.

        viele Grüße

        Axel

        1. Hallo,

          das stimmt schon. VB-Script ist manchmal sehr kulant im Umgang mit Variablen. An anderer Stelle kann dies dann wieder zu Fehlern führen, auf deren Lösung man nicht sofort kommt.

          Die Kulanz auszunutzen verspricht eigentlich etwas schnellere Programmierung, kann aber auch verhängnisvoll sein.

          Odium

  2. Hallo,

    bei:

    response.write "select * from Bestellung where Datex = '" & x1 & "'"

    wird aber der korrekte Wert angezeigt?
    was wird bei vartype(x1) ausgegeben?

    http://www.gruenthal.de/tutorial/vbscript/vbs217.htm
    Vergeleiche dann den Type mit dem Zielfeld in der Tabelle.

    Eventuell ist deine DB pingelig und du musst den Variablentyp konvertieren.

    String<-->Integer<-->Date ??

    Odium

    1. Hallo,

      das war der entscheidene Hinweis:

      String<-->Integer<-->Date ??

      Der Wert, den ich ausgelesen habe, hat in der Datenbank den Typ "String", besteht aber nur aus Ziffern. ASP scheint diesen Wert
      dann als Zahl zu behandeln. Ich habe den Wert nun nach dem Auslesen
      wieder in einen String umgewandelt, was dazu führt, daß die zweite Abfrage nun ohne Fehler ausgeführt wird.

      Vielen Dank für den kleinen Denkanstoß!

      MfG
      MarkX.

  3. set ad2 = Conn.Execute("select * from Adressen where status = 'ne'")
    x1 = ad2("DatumID")
    set bd = Conn.Execute("select * from Bestellung where Datex = '" & x1 & "'")

    Dabei erhalte ich folgende Fehlermeldung:

    Laufzeitfehler in Microsoft VBScript- Fehler '800a000d'

    Typen unverträglich

    Es wurde versucht, Werte inkompatibler Datentypen zu vergleichen. Beispielsweise tritt dieser Fehler auf, wenn eine Zeichenfolge mit einem numerischen Wert verglichen wird.

    Schon mal versucht mit den Konvertierungsfunktionen was umzubiegen ???
    Ist nur ne Idee.

    1. Hi,

      Schon mal versucht mit den Konvertierungsfunktionen was umzubiegen ???
      Ist nur ne Idee.

      Die Idee hatte Odium schon vor ner ganzen Weile und genau das war es, was schließlich die Lösung gebracht hat. Ich hab den Wert in einen String konvertiert, was zum Erfolg geführt hat.
      Trotzdem vielen Dank!

      MfG
      MarkX.