Avatar billede Slettet bruger
27. januar 2005 - 16:17 Der er 6 kommentarer og
2 løsninger

Kan nogen se hvad fejlen er her?

Hej

Jeg har her nedenfor et ASP-script som skal ændre en værdi i nogle angivne felter. Altså alle de stedet hvor idUser er det som den har fået vir dens querystring...

<%
Rfile = request.querystring("file")
idUser = request.querystring("idUser")
Dim rs

'Creating the Recordset Object
Set rs = Server.CreateObject("ADODB.RecordSet")

'Creating a DSN-Less connection to your Database
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db.mdb")

rs.open "deFIRST", strDSN, adOpenDynamic, adLockOptimistic, adCmdTable
   
rs.find "idUser='" & idUser &"'"

if rs.EOF then
response.redirect "../main.asp?idUser=" & request.querystring("idUser") & ""
else
Do Until rs.EOF

rs("pic") = "" & Rfile & ""

rs.MoveNext
Loop
rs.close
set rs = Nothing
response.redirect "../main.asp?idUser=" & request.querystring("idUser") & ""
end if
%>

Men det der sker i stedet er at den bare ændre hele kolonnen i tabellen i stedet... Og den ændrer alså ikke kun der hvor idUser er det som det skal være, men hele kolonnen i tabellen...

Hvad er fejlen i dette?

Med venlig hilsen

Dan
Avatar billede Søren Bech Morsing Praktikant
27. januar 2005 - 16:37 #1
rs.Update

skal ind før rs.movenext

har du flere iduser med samme id?
Vil anbefale ikke at bruge en "DO / LOOP" men blot else efter din if rs.EOF then

if rs.EOF then
response.redirect "../main.asp?idUser=" & request.querystring("idUser") & ""
else
rs("pic") = "" & Rfile & ""
rs.Update
end if
Avatar billede softspot Forsker
27. januar 2005 - 22:33 #2
Du kan bruge en mere direkte metode til at opdatere rækker i en tabel, nemlig:

strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db.mdb")
set conn = Server.CreateObject("ADODB.Connection")
SQL = "UPDATE deFIRST SET pic='" & Rfile & "' WHERE idUser='" & idUser & "'"
conn.Open
conn.Execute(SQL)
conn.Close
set conn = nothing


Ovenstående kode forudsætter at idUser rent faktisk er en text i databasen. Hvis det er en tal (som det vil være hvis det er AutoNumber), så skal du fjerne opostrofferne omkring idUser i SQL'en...
Avatar billede Slettet bruger
27. januar 2005 - 23:12 #3
Hej

Det virker altså stadig ikke! Heller ikke selvom jeg har fulgt de ovenstående anvisninger... Det den gør, er stadig at den bare overskriver samtlige poster i min tabel i den kolonne som hedder "pic", med det den nu har fået besked på... Så den er stadig ligeglad med "idUser"-ordren. Alså om at det kun er der hvor idUser er noget bestemt at den skal overskrive...

Koden som stadig ikke virker ser nu sådan her ud:

<%
Rfile = request.querystring("file")
idUser = request.querystring("idUser")
Dim rs

'Creating the Recordset Object
Set rs = Server.CreateObject("ADODB.RecordSet")

'Creating a DSN-Less connection to your Database
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db.mdb")

rs.open "deFIRST", strDSN, adOpenDynamic, adLockOptimistic, adCmdTable
   
rs.find "idUser='" & idUser &"'"

if rs.EOF then
response.redirect "../main.asp?idUser=" & idUser & ""
else
Do Until rs.EOF

rs("pic") = "" & Rfile & ""

rs.Update
rs.MoveNext
Loop
rs.close
set rs = Nothing
response.redirect "../main.asp?idUser=" & idUser & ""
end if
%>

Hvad er der dog mon i vejen?

Med venlig hilsen

Dan
Avatar billede softspot Forsker
27. januar 2005 - 23:21 #4
Jeg skal lige sikre mig flg.:

Du udskifter dette kode

strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db.mdb")
set conn = Server.CreateObject("ADODB.Connection")
SQL = "UPDATE deFIRST SET pic='" & Rfile & "' WHERE idUser='" & idUser & "'"
conn.Open
conn.Execute(SQL)
conn.Close
set conn = nothing


med dette kode:

'Creating the Recordset Object
Set rs = Server.CreateObject("ADODB.RecordSet")

'Creating a DSN-Less connection to your Database
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db.mdb")

rs.open "deFIRST", strDSN, adOpenDynamic, adLockOptimistic, adCmdTable
   
rs.find "idUser='" & idUser &"'"

if rs.EOF then
response.redirect "../main.asp?idUser=" & idUser & ""
else
Do Until rs.EOF

rs("pic") = "" & Rfile & ""

rs.Update
rs.MoveNext
Loop
rs.close
set rs = Nothing

Når du siger at det stadig ikke fungerer, ikk'?

For det andet, så vil jeg sikre mig at
1. pic er et text-felt i databasen
2. idUser er et text-felt i databasen

Kan du bekræfte ovenstående?
Avatar billede Slettet bruger
27. januar 2005 - 23:51 #5
Hej.

Jo, jeg har udskriftet de koder som du anviser ovenfor... Men nu virker det slet ikke...? Nu siger den bare at der er sket en intern serverfejl...

pic er tekst og idUser er et tal.

Og lige nu ser min kode sådan her ud:

<%
Rfile = request.querystring("file")
idUser = request.querystring("idUser")

strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db.mdb")
set conn = Server.CreateObject("ADODB.Connection")
SQL = "UPDATE deFIRST SET pic='" & Rfile & "' WHERE idUser=" & idUser & ""
conn.Open
conn.Execute(SQL)
conn.Close
set conn = nothing

response.redirect "../main.asp?idUser=" & idUser & ""
%>

Og nu ved jeg slet ikke hvad fejlen er...

Med venlig hilsen

Dan
Avatar billede softspot Forsker
29. januar 2005 - 04:07 #6
Sorry, jeg tror det er fordi conn.Open skal bruge connection-string som parameter. Prøv:

conn.Open strDSN

i stedet for

conn.Open
Avatar billede softspot Forsker
29. januar 2005 - 04:16 #7
Du kan i øvrigt lave serverside errorhandling ved f.eks. at gøre således:

strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../db.mdb")
SQL = "UPDATE deFIRST SET pic='" & Rfile & "' WHERE idUser=" & idUser & ""

on error resume next ' slå standard fejlmeddelelser fra

set conn = Server.CreateObject("ADODB.Connection")
showError
conn.Open
showError
conn.Execute(SQL)
showError
conn.Close
showError
set conn = nothing

on error goto 0 ' slå standard fejlmeddelelser til igen...

sub showError()
  ' err er det globale objekt som indeholder den seneste fejl
  ' der er opstået. Denne skal checkes umiddelbart efter den
  ' sætning som man vil undersøge for fejl, ellers vil err
  ' blive overskrevet med fejlkoden for den næste sætning
  ' (og hvis den går godt bliver fejlobjektet nulstillet og
  ' du ignorerer dermed den pågældende fejl på siden).
  if err.number <> 0 then
    ' Så kan man redirect'e til en anden side eller skrive en inline besked
    Response.Write "Err: " & err.number & " / " & err.Description & "<br>"
    on error resume next
    ' bare luk forbindelsen, hvis den ikke er åben fejler
    ' kaldet, men det er jo ligemeget for vi har slået
    ' fejlhåndtering fra... ikke pænt, man burde checke
    ' om forbindelsen er åben inden man lukker
    conn.close
    Response.End
  end if
end sub
Avatar billede Slettet bruger
31. januar 2005 - 13:59 #8
Hej

Nu virker det!!! Tusind tak skal du have!!!

Med venlig hilsen

Dan
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester