Avatar billede mightythor Nybegynder
06. november 2002 - 11:29 Der er 14 kommentarer og
2 løsninger

Brug for hjælp med at indsamle date fra en loop

Jeg har en database med en masse medlemmer i, i et stykke kode laver jeg en loop hvor jeg udtrækker medlemsnavnene samt hvor jeg laver en input sætning ud for hver enkelt.

Hvordan samler jeg dataerne ud fra inputsætningerne og flytter dem ind i en database?

Her er koden jeg har brugt hidtil:

kode 1:

<%
set conn = server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)}; dbq=" & server.mappath("data.mdb")
sqlstmt = "select * from members order by membername"
conn.execute (sqlstmt)
set rs = conn.execute(sqlstmt)
%>

<center>
<br><br>
<table width="95%" cellpadding="5" cellspacing="3" border="1" bordercolor="#666666">
<tr>
<td align="center" width="100%" bordercolor="#cccccc"><font size="3"><b>Members Raidpoints</b></font></td>
</tr>
</table>
<br>
<table width="95%" cellpadding="5" cellspacing="3" border="1" bordercolor="#666666">
<form method="post" action="raidpointssavecorrected.asp?id=<%=rs("id")%>">

<%
do while not rs.eof
%>

<tr>
<td width="80%" bordercolor="#cccccc"><font size="2"><b><%=rs("membername")%></b></font></td>
<td width="20%" bordercolor="#cccccc"><input type="text" name="<%=rs("membername")%>" value="<%=rs("memberraidpoints")%>"</td>
</tr>

<%
rs.movenext
loop
rs.close
%>

</table>
<br>
<input type="submit" value="Send">
</form>

<%
conn.close
set conn = nothing
set sqlstmt = nothing
%>

Her er den skrupforkerte opsamlingskode (jeg er ingen ørn til ASP)

Kode 2:

<%
response.buffer = true

set conn = server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)}; dbq=" & server.mappath("data.mdb")
sqlstmt = Jeg aner det ikke :(
conn.execute (sqlstmt)
conn.close
set conn = nothing
set sqlstmt = nothing
response.redirect ("raidpointscorrect.asp")
%>
Avatar billede mightythor Nybegynder
06. november 2002 - 11:29 #1
Avatar billede di8leva Nybegynder
06. november 2002 - 11:35 #2
jag førsøger igen, men min ASP er ikke så go som den skall vare så der kommer lite små fejl som du får fixa.

kode 2:

set sql = ""
set conn = server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)}; dbq=" & server.mappath("data.mdb")
sqlstmt = select membername from members order by membername
set rs = conn.execute (sqlstmt)

do while not rs.eof

sql = sql & "update members set memberraidpoint = " & request.form(rs("membername")) & " where membername like '" & rs("membername") & "';"


rs.movenext
loop
rs.close

conn.execute(sql)

hvis du har en database som ikke støder multiple statements er du nødt till att byde
sql = sql & "update members set memberraidpoint = " & request.form(rs("membername")) & " where membername like '" & rs("membername") & "';"

mod ett conn.execute(update members set memberraidpoint = " & request.form(rs("membername")) & " where membername like '" & rs("membername") & "'")

og ta bort conn.execute(sql)

tror det skall virke hvis du retter nogle små fejl
Avatar billede di8leva Nybegynder
06. november 2002 - 11:37 #3
conn.execute(update --> conn.execute("update
Avatar billede mightythor Nybegynder
06. november 2002 - 11:48 #4
Min kode 2 ser nu sådanne ud:

<%
response.buffer = true

set conn = server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)}; dbq=" & server.mappath("data.mdb")
sqlstmt = "select membername from members order by membername"
set rs = conn.execute (sqlstmt)
do while not rs.eof
sqlstmt = sqlstmt & "update members set memberraidpoint = " & request.form(rs("membername")) & " where membername like '" & rs("membername") & "';"
rs.movenext
loop
rs.close
conn.execute (sqlstmt)
conn.close
set conn = nothing
set sqlstmt = nothing
response.redirect ("raidpointscorrect.asp")
%>

Men jeg får følgende fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'membernameupdate members set memberraidpoint = 0 where membername like 'Appoccolipstick Thunderbunz''.

/prot/raidpointssavecorrected.asp, line 13
Avatar billede di8leva Nybegynder
06. november 2002 - 11:52 #5
ah, det er fejl
først skall du ha en extra sql streng
set sql = "" i toppen

sqlstmt = sqlstmt & "update members set memberraidpoint = " & request.form(rs("membername")) & " where membername like '" & rs("membername") & "';"

-->

sql = sql& "update members set memberraidpoint = " & request.form(rs("membername")) & " where membername like '" & rs("membername") & "';"

og ner allt er klart skall du execute den nye sql

lige innan conn.close
Avatar billede di8leva Nybegynder
06. november 2002 - 11:53 #6
en streng anvænds før att hente data i databasen och sen bygger du op en anden sql streng med de data du hentet, og sen ecekverar du den nya strengen...
Avatar billede mightythor Nybegynder
06. november 2002 - 11:58 #7
Okay, min fejl...

Kode 2:

<%
response.buffer = true

sql = ""
set conn = server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)}; dbq=" & server.mappath("data.mdb")
sqlstmt = "select membername from members order by membername"
set rs = conn.execute (sqlstmt)
do while not rs.eof
sql = sql & "update members set memberraidpoint = " & request.form(rs("membername")) & " where membername like '" & rs("membername") & "';"
rs.movenext
loop
rs.close
conn.execute (sql)
conn.close
set conn = nothing
set sqlstmt = nothing
response.redirect ("raidpointscorrect.asp")
%>

Ny fejlmelding:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Characters found after end of SQL statement.

/prot/raidpointssavecorrected.asp, line 14
Avatar billede di8leva Nybegynder
06. november 2002 - 12:18 #8
ok, det betyder nok att du ikke kan lave multiple statements

du får ersætta:
sql = sql & "update members set memberraidpoint = " & request.form(rs("membername")) & " where membername like '" & rs("membername") & "';"

med:
conn.execute("update members set memberraidpoint = " & request.form(rs("membername")) & " where membername like '" & rs("membername") & "'")


så tror jag det skall virke
Avatar billede di8leva Nybegynder
06. november 2002 - 12:19 #9
och ta bort set sql = "" og conn.execute(sql)
Avatar billede eagleeye Praktikant
06. november 2002 - 12:23 #10
Dessvære kan du ikke med Access lave X antal SQL sætninger i en lan streng som man kan ved MSSSQL/MySQL. Så du skal for hver opdater databasen:


<%
response.buffer = true

sql = ""
set conn = server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)}; dbq=" & server.mappath("data.mdb")
sqlstmt = "select membername from members order by membername"
set rs = conn.execute (sqlstmt)
do while not rs.eof
  sql = "update members set memberraidpoint = " & request.form(rs("membername")) & " where membername like '" & rs("membername") & "';"
  conn.execute (sql)
  rs.movenext
loop
rs.close
conn.close
set conn = nothing
set sqlstmt = nothing
response.redirect ("raidpointscorrect.asp")
%>
Avatar billede eagleeye Praktikant
06. november 2002 - 12:23 #11
Så man er nød til som vist at opdater database for hver linie.
Avatar billede mightythor Nybegynder
06. november 2002 - 12:41 #12
Eagleeye:

Jeg har opdateret min kode som du foreslår, og får så denne fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

/prot/raidpointssavecorrected.asp, line 11

Min kode ser nu således ud:

<%
response.buffer = true

sql = ""
set conn = server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)}; dbq=" & server.mappath("data.mdb")
sqlstmt = "select membername from members order by membername"
set rs = conn.execute (sqlstmt)
do while not rs.eof
sql = "update members set memberraidpoint = " & request.form(rs("membername")) & " where membername like '" & rs("membername") & "';"
conn.execute (sql)
rs.movenext
loop
rs.close
conn.close
set conn = nothing
set sqlstmt = nothing
response.redirect ("raidpointscorrect.asp")
%>
Avatar billede mightythor Nybegynder
06. november 2002 - 12:44 #13
Satte lige en response.write sql ind før conn.execute

den kom ud med:

update members set memberraidpoint = 0 where membername like 'Appoccolipstick Thunderbunz';

Så det ser rigtigt ud i mine øjne, men den går ikke videre tilsyneladende.

suuuuuk
Avatar billede eagleeye Praktikant
06. november 2002 - 12:49 #14
Og du er 100% sikker på at kolonnenavne er stavet rigtigt ?

Eller så ret den til = og ikke LIKE:

sql = "update members set memberraidpoint = " & request.form(rs("membername")) & " where membername = '" & rs("membername") & "';"
Avatar billede mightythor Nybegynder
06. november 2002 - 12:51 #15
DOH havde en #%&¤ stavefejl, det fungerer nu, di8leva hvis du lige laver et svar, så får i begge nogen point....
Avatar billede di8leva Nybegynder
06. november 2002 - 12:57 #16
merci =)
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