Avatar billede sapworld Nybegynder
01. oktober 2003 - 22:55 Der er 21 kommentarer og
2 løsninger

ændre data i en database vha. en form

Hej
Jeg er ved at lave en "tre step" løsning på at kunne ændre data i en tabel.
1. step: data vises med et "Change" link(change_status.asp)
2. step: data hentes over i en form og kan ændres (form_status.asp)
3. step: data gemmes (result_status.asp)

Feltet "initials" skal vises, og feltet "status" skal kunne ændres. Databasen hedder education og tabellen hedder students.

Jeg kan ikke få det helt til at virke men er kommet et stykke af vejen. step 2 fejler, og når jeg gemmer, så opdateres tabelen ikke, men der kommer en ny i stedet

Håber jeg kan få lidt hjælp. Her er koden til siderne:

change_status.asp ----------------------------------
<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open="hcb_scales_education"
strSQL = "SELECT * FROM students ORDER BY students.ID Desc"
set news = objConn.Execute(strSQL)
%>
<%
While NOT news.EOF
%>

<table>
<tr>
<td width="100"><%=students.Fields("initials")%></td>
<td width="100"><%=students.Fields("status")%></td>
<td width="100"><a href="form_status.asp?id=<%=students.Fields("id")%>">Change status</a></td>
</tr>


</table>
<%
news.MoveNext
Wend
%>

<%
objConn.Close
%>

form_status.asp  ----------------------------------
<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open="hcb_scales_education"
%>
<%
strSQL = "SELECT * FROM students WHERE id = " & request.QueryString("id") & ""
Set objRs = objConn.Execute(strSQL)
%>               

<form method="post" action="result_status.asp">
<input type="text" name="status" value="<%= objRs("status") %>" size="20"> 

<input type="submit">
</form>

result_status.asp  ----------------------------------
<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open="hcb_scales_education"
strSQL = "Insert into students (initials) values('" & Request.Form("initials") &"')"
objConn.Execute(strSQL)
objConn.Close
%>
Avatar billede eagleeye Praktikant
01. oktober 2003 - 22:59 #1
Du skal havde lavet result_status.asp om til til UPDATE SQL sætning så den kan ændre den rigtige record i datasaen, syntax:

UPDATE tabelnavn SET kolonne1 = 'data', kolonne2 = 'data', kolonne3 = 'data' WHERE id = xx
Avatar billede eagleeye Praktikant
01. oktober 2003 - 23:04 #2
http://www.w3schools.com/sql/sql_update.asp

Det man typisk gør er at gemme ID for posten i et hidden felt på formen:

<input type="hidden" name="id" value="<%= objRs("id") %>">

Så kan man hendte ID med Request.Form("id") og bruge det i sin SQL sætning så koden i result_status.asp bliver som her:


<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open="hcb_scales_education"
strSQL = "update students set initials = '" & Request.Form("initials") & "' where id = " & Request.Form("id")
objConn.Execute(strSQL)
objConn.Close
%>
Avatar billede medions Nybegynder
01. oktober 2003 - 23:14 #3
Du må ikke oprette samme spørgsmål inde for 7 dage iflg. ekspertens regler!

http://www.eksperten.dk/spm/408416

//>Rune
Avatar billede sapworld Nybegynder
01. oktober 2003 - 23:14 #4
Det er opdateret  :)
Hvorfor kan jeg ikke få data frem på change_status.asp ?
Microsoft VBScript runtime error '800a01a8'

Object required: ''
Avatar billede sapworld Nybegynder
01. oktober 2003 - 23:16 #5
Att: Rune
Ups det vidste jeg ikke - sorry
Det var nu mest fordi jeg fik det oprettet tåbeligt første gang.

Kim
Avatar billede medions Nybegynder
01. oktober 2003 - 23:17 #6
Well, at afvise idet jeg er igang med at finde en løsning, finder jeg ikke høfligt!

//>Rune
Avatar billede sapworld Nybegynder
01. oktober 2003 - 23:19 #7
Absolut enig. Du svarede ikke i et stykke tid, så jeg troede at du havde opgivet mig. Hvordan kan jeg overføre 60 point til dig?

Kim
Avatar billede eagleeye Praktikant
01. oktober 2003 - 23:21 #8
Prøv at rette:
objConn.Open="hcb_scales_education"

Til:
objConn.Open "hcb_scales_education"
Avatar billede eagleeye Praktikant
01. oktober 2003 - 23:21 #9
men i hvilken fil kommer fejlen?
Avatar billede medions Nybegynder
01. oktober 2003 - 23:22 #10
du kan oprette et nyt spm og ligge 60 points i, så kan jeg svare og du kan acceptere...

//>Rune
Avatar billede sapworld Nybegynder
01. oktober 2003 - 23:28 #11
Det kommer i linie 84
<td width="100"><%=students.Fields("initials")%></td>
Avatar billede medions Nybegynder
01. oktober 2003 - 23:29 #12
<td width="100"><%=students("initials")%></td>
Prøv bare sådan...

//>Rune
Avatar billede eagleeye Praktikant
01. oktober 2003 - 23:30 #13
I den linje hedder recordsetet ikke students men news, så prøv:

<td width="100"><%=news.Fields("initials")%></td>
Avatar billede eagleeye Praktikant
01. oktober 2003 - 23:30 #14
Eller den simple udgave:
<td width="100"><%=news("initials")%></td>
Avatar billede sapworld Nybegynder
01. oktober 2003 - 23:37 #15
Det hjalp (rettet det til students hele vejen). Nu kommer der ikke data over i form'en.
<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open="hcb_scales_education"
%>
<%
strSQL = "SELECT * FROM students WHERE id = " & request.QueryString("id") & ""
Set objRs = objConn.Execute(strSQL)
%>


<form method="post" action="result_status.asp">
<input type="text" name="status" value="<%= objRs("status") %>" size="20"> 
<input type="hidden" name="id" value="<%= objRs("id") %>">
<input type="submit">
</form>
Avatar billede sapworld Nybegynder
01. oktober 2003 - 23:42 #16
Ups - er rette.
Når jeg "gemmer" kommer fejlen
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'id ='.

<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open="hcb_scales_education"
strSQL = "update students set status = '" & Request.Form("status") & "' where id = " & Request.Form("id")'"
objConn.Execute(strSQL)
objConn.Close
%>
Avatar billede medions Nybegynder
01. oktober 2003 - 23:44 #17
Tror du ik' nærmere der skal stå:

<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open="hcb_scales_education"
strSQL = "update students set status = '" & Request.Form("status") & "' where id = " & Request.Form("id")
objConn.Execute(strSQL)
objConn.Close
%>

//>Rune
Avatar billede medions Nybegynder
01. oktober 2003 - 23:44 #18
Eller:

<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open="hcb_scales_education"
strSQL = "update students set status = '" & Request.Form("status") & "' where id = " & Request.QueryString("id")
objConn.Execute(strSQL)
objConn.Close
%>

Grunden til den fejl kommer er at din ID er tom....

Oprettede du det spørgsmål eller?

//>Rune
Avatar billede eagleeye Praktikant
01. oktober 2003 - 23:46 #19
ja ret denne:
strSQL = "update students set status = '" & Request.Form("status") & "' where id = " & Request.Form("id")'"

Til denne:
strSQL = "update students set status = '" & Request.Form("status") & "' where id = " & Request.Form("id")
Avatar billede sapworld Nybegynder
01. oktober 2003 - 23:49 #20
Det hjælper ikke. Er denne forkert, så ID ikke kommer med fra foregående side?:

<input type="hidden" name="id" value="<%= objRs("id") %>">
Avatar billede sapworld Nybegynder
01. oktober 2003 - 23:50 #21
Att: Rune
Jeg sætter 60 point mere på dette spørgsmål (så er det i alt 120), og giver dig halvdelen.
Avatar billede medions Nybegynder
01. oktober 2003 - 23:52 #22
Ok, jeg ligger lige et svar så...

//>Rune
Avatar billede sapworld Nybegynder
02. oktober 2003 - 00:03 #23
Jeg tog denne med på change_status.asp
<td width="100"><%=students.Fields("id")%></td>

Så virker det - takker for en kanon hjælp :)))

Kim
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