Avatar billede gnukki Nybegynder
23. marts 2006 - 09:11 Der er 20 kommentarer og
1 løsning

Opdatere indhold i database

Hej jeg har en kode, som skal opdatere et felt, Conf, i en database for den post som har et bestemt ID, sendes via querystring. Men jeg kan ikke få min kode til at virke... Hvad gør jeg forkert?!

Koden er som følge:

<html>
<title>Verifikation</title>
<head>
</head>
<body>
<%@ Language="VBScript" %>
<% Option Explicit %>
<%
DIM CONNECT,DBCONN,SQL
CONNECT="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("system/users.MDB")
Set DBCONN=Server.CreateObject("ADODB.Connection")
DBCONN.OPEN CONNECT
%>

<%DIM ID,CONF
ID        =    REQUEST.QUERYSTRING("ID")
CONF        =    "Ja"
%>
<%

DIM rsUserAdd
  Set rsUserAdd = Server.CreateObject("ADODB.Recordset")
  rsUserAdd.open "users where usersID = '"&id&"'", dbconn, 3, 3   
  rsUserAdd.UPDATE
  rsUserAdd("Conf")        =    CONF
  rsuserAdd.Update
  rsUserAdd.CLOSE
  SET rsUserAdd = NOTHING

%>




<h1>Databasen er opdateret!</h1>
</body>
</html>
Avatar billede softspot Forsker
23. marts 2006 - 09:14 #1
Jeg skulle mene at du bør gøre således:

  Set rsUserAdd = Server.CreateObject("ADODB.Recordset")
  rsUserAdd.open "SELECT * FROM users WHERE usersID = '"&id&"'", dbconn, 3, 3 
  rsUserAdd("Conf")        =    CONF
  rsuserAdd.Update
  rsUserAdd.CLOSE
  SET rsUserAdd = NOTHING
Avatar billede gnukki Nybegynder
23. marts 2006 - 09:18 #2
Hmm med den ændring får jeg stadig en server 500 fejl...
Avatar billede softspot Forsker
23. marts 2006 - 09:24 #3
Alternativt benyt en SQL-sætning til at opdatere feltet:

  dbconn.execute "UPDATE users SET conf = " & CONF & " WHERE usersid = '" & id & "'"

i stedet for hele denne blok:

  Set rsUserAdd = Server.CreateObject("ADODB.Recordset")
  rsUserAdd.open "SELECT * FROM users WHERE usersID = '"&id&"'", dbconn, 3, 3 
  rsUserAdd("Conf")        =    CONF
  rsuserAdd.Update
  rsUserAdd.CLOSE
  SET rsUserAdd = NOTHING
Avatar billede gnukki Nybegynder
23. marts 2006 - 09:31 #4
Med følgende kode får jeg stadig en fejl:

<html>
<title>Verifikation</title>
<head>
</head>
<body>
<%@ Language="VBScript" %>
<% Option Explicit %>
<%
DIM CONNECT,DBCONN,SQL
CONNECT="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("system/users.mdb")
Set DBCONN=Server.CreateObject("ADODB.Connection")
DBCONN.OPEN CONNECT
%>

<%DIM ID,CONF
ID        =    REQUEST.QUERYSTRING("ID")
CONF        =    "Ja"
%>
<%

dbconn.execute "UPDATE users SET conf = " & CONF & " WHERE usersid = '" & id & "'"

%>




<h1>Databasen er opdateret!</h1>
</body>
</html>
Avatar billede softspot Forsker
23. marts 2006 - 09:55 #5
Hvilke typer har felterne conf og usersid i databasen?
Avatar billede gnukki Nybegynder
23. marts 2006 - 10:02 #6
conf er et tekstfelt og usersid er autonummerering
Avatar billede softspot Forsker
23. marts 2006 - 10:06 #7
OK, så prøv denne version:

dbconn.execute "UPDATE users SET conf = '" & CONF & "' WHERE usersid = " & id
Avatar billede gnukki Nybegynder
23. marts 2006 - 10:26 #8
Stadig en 500 fejl :)
Avatar billede softspot Forsker
23. marts 2006 - 10:38 #9
Prøv lige at slå venlige fejlbeskeder fra i IE, så du kan give mig en lidt mere præcis beskrivelse af hvad fejlen er, for det her er da noget være gætværk...

Du slå venlige fejlbeskeder fra under menuen "Funktioner / Indstillinger" på fanen "Avanceret" i den sektion der hedder "Gennemse" (typisk den første sektion) og noget med "Vis HTTP fejlbeskeder" eller sådan noget...
Avatar billede softspot Forsker
23. marts 2006 - 10:40 #10
Er der i øvrigt noget i request.querystring("ID")?

Kan du ikke lige prøve at udskrive din update-sql i stedet for at du udføre den:

sql = "UPDATE users SET conf = '" & CONF & "' WHERE usersid = " & id
response.write sql
'dbconn.execute sql
Avatar billede gnukki Nybegynder
23. marts 2006 - 11:02 #11
Når jeg udskifter
dbconn.execute "UPDATE users SET conf = '" & CONF & "' WHERE usersid = " & id

med det du foreslog kommer der en fejl.
Avatar billede softspot Forsker
23. marts 2006 - 11:12 #12
Hvilken fejl får du vist når du slår venlige fejlmeddelelser fra (jf. 23/03-2006 10:38:44)??

Og hvad var resultatet af forslaget i 23/03-2006 10:40:21?
Avatar billede gnukki Nybegynder
23. marts 2006 - 11:28 #13
Fandt en fejl og fjernede linjen <% Option Explicit %>.
Den udskriver update-sql nu og der kommer ingen fejl, men der rettes ikke i databasen..
Avatar billede gnukki Nybegynder
23. marts 2006 - 11:29 #14
Koden er nu som følge:

<html>
<title>Verifikation</title>
<head>
</head>
<body>
<%@ Language="VBScript" %>
<%
DIM CONNECT,DBCONN,SQL
CONNECT="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("system/users.mdb")
Set DBCONN=Server.CreateObject("ADODB.Connection")
DBCONN.OPEN CONNECT
%>

<%DIM ID,CONF
ID        =    REQUEST.QUERYSTRING("id")
CONF        =    "Ja"
%>
<%

sql = "UPDATE users SET conf = '" & CONF & "' WHERE usersid = " & id
response.write sql
dbconn.execute sql
%>




<h1>Databasen er opdateret!</h1>
</body>
</html>
Avatar billede gnukki Nybegynder
23. marts 2006 - 11:32 #15
Hej..

Rettede de nogle steder hvor der var anvendt lowercase, men hvor der skulle anvendes uppercase. Det virker nu!

Vil du smide et svar!
Avatar billede gnukki Nybegynder
23. marts 2006 - 11:34 #16
Lige hurtigt:

Er det muligt at først tjekke hvorvidt feltet har en vis værdi først, og derefter indsætte værdien hvis den f.eks. er "nej"?
Avatar billede softspot Forsker
23. marts 2006 - 11:56 #17
Du kan f.eks. gøre det i selve SQL-sætningen:

sql = "UPDATE users SET conf = '" & CONF & "' WHERE usersid = " & id & " AND lcase(conf) = 'nej'"

men det afhænger lidt af hvor kompleks dit check er (hvis det kan lade sig gøre i databasen er det næsten altid at foretrække f.s.v.a. performance).
Avatar billede gnukki Nybegynder
23. marts 2006 - 11:58 #18
det jeg ville tjekke var om conf var nej, hvis den er ja skal den ikke skrive en ny værdi til databasen, men f.eks skrive til brugeren "Ikke mulig" eller sådan noget...
Avatar billede softspot Forsker
23. marts 2006 - 12:09 #19
Den simple metode ville være at spørge først (med en SELECT-sætning i databasen) og så opdatere eller skrive en beked til brugeren alt efter hvad resultatet er). Det kan du nok godt finde ud af, men her er lige et forslag til koden:

sql = "SELECT conf FROM users WHERE usersid = " & id
set rs = dbconn.execute(sql)
if not rs.eof then
  confValue = lcase(rs("conf"))
else
  confValue = ""
end if
rs.close

if confValue <> "ja" then
  sql = "UPDATE users SET conf = '" & CONF & "' WHERE usersid = " & id
  dbconn.execute sql
else
  response.write "opdatering ikke nødvendig - eller hvad der nu skal stå..."
end if
Avatar billede gnukki Nybegynder
23. marts 2006 - 12:25 #20
Jeg siger mange tak for hjælpen. Ha' en god dag! :-) Hermed også dine point
Avatar billede softspot Forsker
23. marts 2006 - 12:35 #21
Velbekomme og tak for point :)
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