Robert: 1 auf den Inhalt einer Variablen addieren

Hallo!

Ich möchte mit ASP "1" (eins) zu auf den Wert einer Variablen addieren; allerdings sieht das bei mir folgendermaßen aus:

---
SQL_query2 = "SELECT * FROM Voting WHERE Download = '" & Request.Form("Download") & "'"
Set RS3 = MyConn.Execute(SQL_query2)

Voting_gut_neu = RS3("Voting_gut") + 1
---

Und IIS bleibt bei "Voting_gut_neu" hängen...wie addier ich nun richtig?

Robert

  1. was kommt den da für eine Fehlermeldung?

    1. was kommt den da für eine Fehlermeldung?

      Error Type: (0x80020009)
      Exception occurred.

      Voting_gut_neu = RS3("Voting_gut") + 1

      Error Type: (0x80020009)
      Exception occurred.

      Voting_gut_neu = CInt(RS3("Voting_gut")) + 1

      Ich hab den Error immer noch...

      Robert

      1. Hallo Robert.

        Das sieht mehr nach einem DB-Problem aus...
        "Error Type: ADODB.Field (0x80020009)
        Either BOF or EOF is True, or the current record has been deleted"

        Mach mal folgendes:

        <%
        if NOT RS3.BOF AND NOT RS3.EOF Then
        Voting_gut_neu = CInt(RS3("Voting_gut")) + 1
        end if
        %>

        Den isNumeric-Check kannst du auch noch dazu packen.

        Grüße
        Sascha

        1. Hallo Sascha!

          <%
          if NOT RS3.BOF AND NOT RS3.EOF Then
          Voting_gut_neu = CInt(RS3("Voting_gut")) + 1
          end if
          %>

          Error Type:
          Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
          [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

          MyConn.Execute "UPDATE Voting SET Voting_gut=Voting_gut_neu WHERE Download='Lena'"

          So, und wo ist da jetz der Fehler? Voting_gut (nimmt nur Zahlen an) existiert als Spalte in der Tabelle Voting, Spalte Download existiert ebenfalls.

          Robert

          1. Hi Robert.
            Ich habe ähnlichen Vorgang wie folgt gelöst:

            if goalsg = goalsh then
            objcmd.CommandText=("update bsvt1 set points = points+1 where teamhome = '" & teamh & "';")
            objcmd.Execute

            das funktioniert so! Mit deinen Felder und Variablen sollte es so auch laufen.

            dey

            1. Hi dey,

              if goalsg = goalsh then
              objcmd.CommandText=("update bsvt1 set points = points+1 where teamhome = '" & teamh & "';")
              objcmd.Execute

              Error Type:
              Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
              [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

              das funktioniert so! Mit deinen Felder und Variablen sollte es so auch laufen.

              Ansichtssache...

              MyConn.Execute "UPDATE Voting SET Voting_gut=Voting_gut_neu+1 WHERE Download='Lena'"

              Robert

              1. hi

                MyConn.Execute "UPDATE Voting SET Voting_gut=Voting_gut_neu+1 WHERE Download='Lena'"

                Du hast immer noch die variable drin, Voting_gut_neu+1. ich arbeite ohne! ->

                MyConn.Execute "UPDATE Voting SET Voting_gut=Voting_gut+1 WHERE Download='Lena'"

                test it

                bydey

          2. Hallo Robert.

            Momentemal, das ist jetzt aber ein ganz anderer Fehler, hat ja nu nix mit dem ersten zu tun.

            Du kannst in ASP nicht wie in PHP einfach Variablen in Strings schreiben...woher soll der Interpreter denn wissen, was eine Variable ist und was Teil des String, hm?

            Also, immer schön String aufmachen, String zumachen, wieder auf und wieder zu nicht vergessen:

            strSQL = "UPDATE Voting SET Voting_gut=" & Voting_gut_neu & "  WHERE Download='Lena'"
            MyConn.Execute strSQL

            Grüße
            Sascha

            1. Hallo dey,

              Momentemal, das ist jetzt aber ein ganz anderer Fehler, hat ja nu nix mit dem ersten zu tun.

              Ein Fehler hat immer etwas mit dem anderen zu tun - alleine weil das in einem Skript ist.

              Du kannst in ASP nicht wie in PHP einfach Variablen in Strings schreiben...woher soll der Interpreter denn wissen, was eine Variable ist und was Teil des String, hm?

              ...

              Also, immer schön String aufmachen, String zumachen, wieder auf und wieder zu nicht vergessen:

              strSQL = "UPDATE Voting SET Voting_gut=" & Voting_gut_neu & "  WHERE Download='Lena'"
              MyConn.Execute strSQL

              Das geht damit auch net - alleine weil es "' & Voting_gut_neu & "' heißen /müsste/sollte/ aber es geht halt ned.

              Robert

              1. Hallo Robert.

                Also gut, nochmal ganz von vorne...

                1. Die Fehler haben nur bedingt was miteinander zu tun.

                2. Der erste Fehler war nicht das Aufaddieren der Variablen, sondern der Zugriff auf ein leeres RecordSet-Objekt.

                3. Bei Verwendung von Integern ist eine Umschließung der Varibalen mit Hochkommata (') Unsinn. Das gilt für Strings.

                4. Da dein RecordSet leer ist (und wir das ja abfangen) wird deine Variable Voting_gut_neu gar nicht gesetzt, existiert also gar nicht.

                Also wird an die DB folgendes übergeben:
                UPDATE Voting SET Voting_gut= WHERE Download='Lena'

                Das erklärt die Fehlermeldung. Es wird ein Parameter erwartet und nicht übermittelt.

                Also: den oberen Block erweitern
                <%
                if NOT RS3.BOF AND NOT RS3.EOF Then
                if isNumeric(RS3("Voting_gut")) Then Voting_gut_neu = CInt(RS3("Voting_gut")) + 1
                else
                Voting_gut_neu = 0 ' oder irgendein Startwert
                end if
                %>

                Du kannst auch vorher Voting_gut_neu = 0 setzen. Falls RS3 nicht leer ist aber auch nicht numerisch ist Voting_gut_neu auf jeden Fall mit 0 deklariert.

                Ansonsten kannst du folgendes ausprobieren:
                gib den strSQL einfach mal mit Response.Write aus (ohne in auszuführen). Dann siehst du, was an die DB geschickt wird.
                Oder schreib den sql-String mal händisch:
                UPDATE Voting SET Voting_gut=1 WHERE Download='Lena'

                Wenn dann ein Fehler auftritt, liegt es an was anderem...

                Grüße
                Sascha

                1. Hallo Sascha,

                  1. Der erste Fehler war nicht das Aufaddieren der Variablen, sondern der Zugriff auf ein leeres RecordSet-Objekt.
                  1. Bei Verwendung von Integern ist eine Umschließung der Varibalen mit Hochkommata (') Unsinn. Das gilt für Strings.

                  ok

                  1. Da dein RecordSet leer ist (und wir das ja abfangen) wird deine Variable Voting_gut_neu gar nicht gesetzt, existiert also gar nicht.

                  Also wird an die DB folgendes übergeben:
                  UPDATE Voting SET Voting_gut= WHERE Download='Lena'

                  soweit mir auch klar

                  Das erklärt die Fehlermeldung. Es wird ein Parameter erwartet und nicht übermittelt.

                  Also: den oberen Block erweitern
                  <%
                  if NOT RS3.BOF AND NOT RS3.EOF Then
                  if isNumeric(RS3("Voting_gut")) Then Voting_gut_neu = CInt(RS3("Voting_gut")) + 1
                  else
                  Voting_gut_neu = 0 ' oder irgendein Startwert
                  end if
                  %>

                  hmmm....

                  Du kannst auch vorher Voting_gut_neu = 0 setzen. Falls RS3 nicht leer ist aber auch nicht numerisch ist Voting_gut_neu auf jeden Fall mit 0 deklariert.

                  RS3 ist nicht leer ("123") in der DB ist genug numerischer Wert; selbst das was geschrieben werden soll ist ja numerisch.

                  Ansonsten kannst du folgendes ausprobieren:
                  gib den strSQL einfach mal mit Response.Write aus (ohne in auszuführen). Dann siehst du, was an die DB geschickt wird.
                  Oder schreib den sql-String mal händisch:

                  UPDATE Voting SET Voting_gut=1 WHERE Download='Lena'

                  Händisch gehts ja schon seit heute morgen 8:00 Uhr ;) aber ich will ja net, dass alle für gut voten müssen *g*

                  Robert

                  1. Hallo Robert.

                    Aber in einem der vorherigen Postings haben wir doch festgestellt, dass RS3 offensichtlich leer war (Either EOF or BOF...etc.) und eben schreibst du selbst einmal, dass RS3 leer ist...was nun also....?

                    Hast du mal in einer Schleife alle Reihen des RecordSets ausgegeben?

                    <%
                    while not RS3.EOF AND NOT RS3.BOF
                    response.write RS3("Voting_gut") & "<br>"
                    RS3.movenext()
                    wend
                    %>

                    kommt da was?

                    Sonst kann ich nur noch raten:
                    wird das Feld "download" überhaupt übergeben?
                    Ist die Schreibweise des Feldes (Voting_gut) richtig hinsichtlich der Groß-/Kleinschreibung? (wenn ich mich recht entsinne ist ASP bei Verwendung von SELECT * FROM ... recht eitel, was das betrifft.)

                    Grüße
                    Sascha

                2. Hi,

                  evt. ist das entsprechende Feld NULL

                  denn es treten bei Operation mit NULL für gewöhnlich Exceptions auf.

                  Desweiteren sollte diese Aufgabe innerhalb von SQL gelöst werden.
                  Sonst müßte mit .open (nicht conn.execute) ein beschreibbares Recordset aufgerufen/geöffnet werden. mit .execute erhält man ein Recordset mit bestimmten Werten für den Locktype und Cursortype

                  Wenn Fehler auftreten sollte man sich vor der Ausführung immer noch den SQL-String ausgeben lassen... da stellt man 70% aller möglichen Fehler sofort visuell fest.

                  Gruß, und viel Spaß weiterhin

                  Frank

  2. Hallo Robert.

    Versuch es mal mit
    Voting_gut_neu = CInt(RS3("Voting_gut")) + 1

    CInt konvertiert den Parameter in einen Integer.
    Wenn allerdings in dem DB-Feld ein String steht, gehts natürlich in die Hose...

    Du kannst ansonsten auch noch vorher abfragen, ob es nulerisch ist:
    <%
    if isNumeric(RS3("voting_gut")) Then
    Voting_gut_neu = CInt(RS3("Voting_gut")) + 1
    end if
    %>

    Grüße
    Sascha

    PS: welche Fehlermeldung bekommst du denn?