Mannix: DB-Update klappt nicht (VBScript)

Hallo,

ich versuche in einer Prozedur, die im script-Bereich im head meiner Seite steht ein DB-Update durchzuführen (Access). Die Datenbank liegt auf dem selben Server wie die ASP-Seiten und die Verbindung funktioniert. Ich habe die Verbindung Con bereits am Anfang dieser Seite hergestellt. Die Prozedur wird per Button-Klick aufgerufen. Die Parameterübergabe funktioniert auch, die MsgBox gibt zum Test die Werte richtig aus. Nur die zweite MsgBox erscheint nicht und die Daten in der DB werden auch nicht geändert. An was könnte das liegen?

Sub DBUpdate(kursnummer,termin,freiePlaetze)

freiePlaetze = CInt(freiePlaetze)

If freiePlaetze > 0 Then
    freiePlaetze = freiePlaetze - 1
  End If

MsgBox freiePlaetze & " " & termin & " " & kursnummer

sqlString = "UPDATE Termine SET FreiePlaetze = " & freiePlaetze &_
              "WHERE Kursnummer = " & kursnummer & " AND Termin = " & termin

Con.Execute sqlString
  Con.Close

MsgBox "Die freien Plätze wurden um 1 reduziert!"

End Sub

Würde mich sehr über Eure Hilfe freuen. Ich weiß nicht mehr weiter.

Gruß Mannix

  1. Hallo!

    Nur die zweite MsgBox erscheint nicht und die Daten in der DB werden auch nicht geändert. An was könnte das liegen?

    Und wenn Du Dir das error-Objekt anschaust? Also »Set Errs = Conn1.Errors« und dann Errs durchläufst?

    Beste Grüße
    Viennamade

    1. Und wenn Du Dir das error-Objekt anschaust? Also »Set Errs = Conn1.Errors« und dann Errs durchläufst?

      Wie funktioniert das mit dem error-Objekt? Wo muss ich das hinschreiben und wie kann ich es dann anschauen?

      1. Hallo!

        Und wenn Du Dir das error-Objekt anschaust? Also »Set Errs = Conn1.Errors« und dann Errs durchläufst?

        Wie funktioniert das mit dem error-Objekt? Wo muss ich das hinschreiben und wie kann ich es dann anschauen?

        http://msdn.microsoft.com/library/en-us/ado270/htm/mdconhandlingerrorsvbscript.asp

        Beste Grüße
        Viennamade

        1. Danke, ich hab das jetzt mal bei eingefügt und es kam folgender Fehler:

          Error #0
          [Microsoft][ODBC Driver Manager] Fehler bei SQLSetConnectAttr-Aufruf für Treiber.
          (Source: Microsoft OLE DB Provider for ODBC Drivers)
          (SQL State: IM006)
          (NativeError: 0)
          No Help file available

          Kannst Du damit was anfangen?

          Ich habe bisher meine DB-Verbindung ganz oben auf der Seite innerhalb von <% und %> gemacht. Die Prozedur wird ja über einen Button weiter unten aufgerufen. Könnte es sein, dass die DB-Verbindung innerhalb der Prozedur, also innerhalb von <script> und </script> im head-Bereich nicht mehr aktiv ist?

          Gruß Mannix

          1. Hallo!

            Error #0
            [Microsoft][ODBC Driver Manager] Fehler bei SQLSetConnectAttr-Aufruf für Treiber.
            (Source: Microsoft OLE DB Provider for ODBC Drivers)
            (SQL State: IM006)
            (NativeError: 0)
            No Help file available

            Kannst Du damit was anfangen?

            Mh, das ist die Description, gibt es keine Number?

            Könnte es sein, dass die DB-Verbindung innerhalb der Prozedur, also innerhalb von <script> und </script> im head-Bereich nicht mehr aktiv ist?

            Das könntest Du mit Connection.State prüfen.

            Beste Grüße
            Viennamade

          2. Ich kann innerhalb der <script>-Tags gar kein Connection-Objekt erzeugen. Ist das hier vielleicht nicht möglich, sondern nur zwischen <% und %>. Oder vielleicht nicht im head? Kann ich Prozeduren und Functionen sowohl in den <script>-Tags im head als auch sonst wo auf der Seite schreiben (ich konnte nämlich beim onClick-Event eines Buttons nur Prozeduren aurufen, die innerhalb von <script> im head stand).

            1. Hallo,

              Ich kann innerhalb der <script>-Tags gar kein Connection-Objekt erzeugen. Ist das hier vielleicht nicht möglich, sondern nur zwischen <% und %>. Oder vielleicht nicht im head? Kann ich Prozeduren und Functionen sowohl in den <script>-Tags im head als auch sonst wo auf der Seite schreiben (ich konnte nämlich beim onClick-Event eines Buttons nur Prozeduren aurufen, die innerhalb von <script> im head stand).

              Kann es sein, dass Du nicht richtig verstanden hast, was der Unterschied zwischen serverseitig und clientseitig ist?

              ASP, also das zwischen <% und %>, wird vom Web-Server interpretiert und ausgeführt. Der Web-Server kann auch das Server-System um etwas bitte. Z.B. um eine Datenbank-Connection, einen Dateiinhalt oder darum, eine Datei zu speichern.

              Das zwischen den <script>-Tags wird vom Browser clientseitig ausgeführt. Scripts im Browser können _keine_ Datenbankverbindungen auf der Serverseite öffnen, genauso, wie sie keine Dateien, egal ob serverseitig oder clientseitig, speichern können sollten.

              viele Grüße

              Axel

              1. Wie kann ich dann per Button-Klick eine Prozedur aufrufen, die mir u.a. ein DB-Update durchführt? Wie muss die Prozedur dann aussehen und wo muss sie stehen?

                1. Hallo,

                  Wie kann ich dann per Button-Klick eine Prozedur aufrufen, die mir u.a. ein DB-Update durchführt?

                  Indem der Buttonklick eine ASP-Ressource vom Server via HTTP-GET bzw. HTTP-POST anfordert (über action eines Formulars z.B.). Diese Ressource muss _alle_ serverseitig notwendigen Tätigkeiten ausführen, bevor sie den Response generiert.

                  Wie muss die Prozedur dann aussehen und wo muss sie stehen?

                  Welches Lernmaterial für ASP benutz Du? Das sind die elementarsten Grundlagen.
                  http://www.tutorials.de/tutorials6465.html

                  viele Grüße

                  Axel

                  1. Ich habe am Anfang der Seite eine Prozedur, die immoment zum Testen nur eine MsgBox ausgeben soll. Mit onClick="ProzName(a,b,c)" eines Buttons läßt sich diese Prozedur aber nicht aufrufen, oder zumindest erscheint die MsgBox nicht. Schreibe ich die selbe Prozedur in den <script>-Bereich klappt es. Da ich aber in der Prozedur auch noch eine DB-Operation durchführen will, kann ich sie ja nicht in den <script>-Bereich schreiben. Wie kann ich die MsgBox denn dann richtig ausführen?

                    1. Hallo,

                      Ich habe am Anfang der Seite eine Prozedur, die immoment zum Testen nur eine MsgBox ausgeben soll. Mit onClick="ProzName(a,b,c)" eines Buttons läßt sich diese Prozedur aber nicht aufrufen, oder zumindest erscheint die MsgBox nicht.

                      Der onclick-Event tritt clientseitig im Browser auf. Zu dieser Zeit ist alles, was ASP verarbeiten soll, längst passiert. Der Browser kennt nur den Code, den Du mit Ansicht-Quelltext siehst. Lass Dir diesen Code anzeigen, und Du wirst sehen, dass Deine Funktion dort gar nicht vorhanden ist.

                      Schreibe ich die selbe Prozedur in den <script>-Bereich klappt es.

                      Ja, dann wird sie clientseitig ausgeführt. Allerdings nicht als ASP, sondern als clientseitiges VB-Script.

                      Da ich aber in der Prozedur auch noch eine DB-Operation durchführen will, kann ich sie ja nicht in den <script>-Bereich schreiben.

                      Ja, weil der Browser als Client mit VB-Script keine Datenbankverbindung herstellen kann.

                      Wie kann ich die MsgBox denn dann richtig ausführen?

                      Du willst wohl eher eine serverseitige ASP-Prozedur über einen onclick-Event aufrufen. Das geht nicht. Der Client kann nur eine ASP-Ressource (http://server.domain.tld/resource.asp) anfordern, in welcher dann die Prozedur abgearbeitet wird. Am einfachsten ist das mit einem HTML-Formular.

                      Um serverseitigen Code zu testen, kannst Du nicht mit MsgBox arbeiten, weil dieser Code eben serverseitig läuft und die Box dann ja auf dem Server zu sehen sein müsste. Schreibe die Tests mit response.write() in den Response des ASP-Scripts.

                      viele Grüße

                      Axel

                      1. OK, vielen Dank. Jetzt ist mir einiges klarer.

                        Gruß Mannix

  2. Hallo Mannix,

    solltest Du das Feld Termin als Datum definiert haben versuche bitte mal folgenden sqlString:

    sqlString = "UPDATE Termine SET FreiePlaetze = " & freiePlaetze &_
                "WHERE Kursnummer = " & kursnummer & " AND Termin = datevalue('" & termin & "')"

    Viele Grüße
    Holger

    1. solltest Du das Feld Termin als Datum definiert haben versuche bitte mal folgenden sqlString:

      Nein, ich habe es normal als text definiert.