1 auf den Inhalt einer Variablen addieren
Robert
- asp.net
0 Dirk0 Robert0 Sascha Mandelkow0 Robert0 dey0 Sascha Mandelkow0 Robert0 Sascha Mandelkow
0 Sascha Mandelkow
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
was kommt den da für eine Fehlermeldung?
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
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
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
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
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
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
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
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
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
Hallo Sascha,
- Der erste Fehler war nicht das Aufaddieren der Variablen, sondern der Zugriff auf ein leeres RecordSet-Objekt.
- Bei Verwendung von Integern ist eine Umschließung der Varibalen mit Hochkommata (') Unsinn. Das gilt für Strings.
ok
- 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
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
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
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?