webForumDet fria alternativet

RecSet i RecSet, eller hur annars ?

ASP

17 svar · 183 visningar · startad av nill

Medlem sedan okt. 2001387 inlägg
Frågan#1

Försöker göra detta:

Användarna ska ha möjligheten att svar på en del frågor, vilka lagras i tabellen 'fragor'.
Svaren lagras sen i tabellen 'info'. Varför jag vill ha det så här är för att jag vill senare på ett enkelt sätt kunna lägga till fler frågor.

Problemet är nu när jag loopar fram alla frågorna med alla textinputs så vill jag även att om man redigerar sin info att de gamla svaren ska synas. Men det går ju inte så bra eftersom det är i loopen då frågorna loopas upp och svaren ligger inte samma tabell = RecSet i RecSet vilket inte fungerar vad jag vet...
något förslag på hur jag ska lösa detta ?

oj, det blev långt.. hoppas nån orkar läsa det :)

Medlem sedan dec. 19996 522 inlägg
#2

Varför inte lägga det tigidare värdet i textrutan som value ? från start då. Visa lite kod och ditt inlägg vad inte långt ;) välkommen till wf föresten

------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !

Medlem sedan okt. 2001387 inlägg
#3

Jo men det är precis det jag vill göra. Men det blir ju RecSet i RecSet :(

Nuvarande kod (där jag inte fått till value som ska egentligen ska hämta gamla svaren)

<FORM METHOD="post" NAME="formen" onSubmit="return ValidateSite()" ACTION="normal.asp?what=edited">

	\<%
	Fragor = "SELECT \* FROM fragor ORDER BY ID "
	RecSet.Open Fragor, Connect, adOpenStatic, adLockOptimistic

	Do Until RecSet.EOF
		%\>
		\<B\>\<%=RecSet("fraga")%\>\</B\>\<BR\>
		\<input type="text" SIZE="30" MAXLENGTH="30" VALUE="" name="\<%=RecSet("ID")%\>" CLASS="input"\>\<P\>
		\<%

		RecSet.MoveNext
	Loop

	RecSet.Close
	%\>
	\<P\>

	\<input type="submit" value="OK" CLASS="input" STYLE="font-weight: 900;"\>\<P\>
	\<input type="reset" value="Återställ" CLASS="input" STYLE="font-weight: 900;"\>

\</FORM\>

Tack förresten :)

Medlem sedan dec. 200012 464 inlägg
#4

Du kan väl hämta svaret i samma
sql-fråga.

<%
Fragor = "SELECT * FROM fragor Inner join info on fragor.id = info.id ORDER BY fragor.ID "
RecSet.Open Fragor, Connect, adOpenStatic, adLockOptimistic

och sedan lägga in svaret i fältet.

(Nu vet jag inte hur dina tabeller är relaterade så att du får kanske ändra på join-villkoret.)

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 2001387 inlägg
#5

Nu ligger tyvärr join-grejs utöver min kunskap :( Finns det någon bra guide till det ? (typ webstudio)

Det jag vill göra är:
har en tabell (fragor)
men måset i samma sql-sats ha med kolunnen 'svar' från taballen 'info'

och det ska bara vara svaren där Session("userid") är userid i tabellen info samt där ID i tabellen fragor är = fragID i tabellen info

frågorna loopas alltså ut och då måste de kopplas ihop med rätt svar samt rätt användare :/

jobbigt värre...

Medlem sedan dec. 200012 464 inlägg
#6
<%
Fragor = "SELECT * " & _
" FROM fragor Inner join info " & _
" on fragor.id = info.fragid " & _
" where info.userid = " & session("userid") & _
" ORDER BY fragor.ID "
RecSet.Open Fragor, Connect, adOpenStatic, adLockOptimistic

info om sql:
http://www.w3schools.com/sql/

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 2001387 inlägg
#7

tack så jättemycket.. ursäkta att jag är lite jobbig men, det fungerade inte riktigt.

Så här är koden nu:
<FORM METHOD="post" NAME="formen" onSubmit="return ValidateSite()" ACTION="normal.asp?what=edited">

	\<%
	
	Fragor = "SELECT \* " & " FROM fragor Inner join info " & " on fragor.id = info.fragid " & " where info.userid = " & session("userid") & " ORDER BY fragor.ID "
	RecSet.Open Fragor, Connect, adOpenStatic, adLockOptimistic

	Do Until RecSet.EOF
		%\>
		\<B\>\<%=RecSet("fraga")%\>\</B\>\<BR\>
		\<input type="text" SIZE="30" MAXLENGTH="30" VALUE="\<%=RecSet("svar")%\>" name="\<%=RecSet("ID")%\>" CLASS="input"\>\<P\>
		\<%

		RecSet.MoveNext
	Loop

	RecSet.Close
	%\>
	\<P\>

	\<input type="submit" value="OK" CLASS="input" STYLE="font-weight: 900;"\>\<P\>
	\<input type="reset" value="Återställ" CLASS="input" STYLE="font-weight: 900;"\>

\</FORM\>

Det som hände var att att Loopen gjordes en gång.. alltså endast en inputbox loopades fram. förstår inte riktigt varför.

Medlem sedan dec. 200012 464 inlägg
#8

Då verkar det som om du bara får 1 post.

Kan det vara så att användaren bara har svar på en fråga eller vet du att det finns poster för alla frågor i infotabellen? I så fall får du skriva frågan som en outer join

Fragor = "SELECT * " & " FROM fragor left outer join info " & " on fragor.id = info.fragid and info.userid = " & session("userid") & " ORDER BY fragor.ID "

Kan du testa ut sql-frågan separat?

Fragor = "SELECT * " & " FROM fragor Inner join info " & " on fragor.id = info.fragid " & " where info.userid = " & session("userid") & " ORDER BY fragor.ID "
response.write fragor

så kan du klippa ut sql-satsen och köra den i något verktyg.

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 2001387 inlägg
#9

användaren har bara svar på en fråga i info-tabellen. Han ska ju kunna redigera sin info även om han inte fyllt i allting innan, sorry :)

Provade då din outerjoin-kod och fick det här meddelandet:
Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][Drivrutin för ODBC Microsoft Access] Kopplingsuttrycket stöds inte.

Medlem sedan okt. 2001387 inlägg
#10

var det ingen som kunde det eller glömde ni bort det ? :)

Medlem sedan dec. 200012 464 inlägg
#11

Verkar vara lite begränsningar i Access

Ett (något) krångligare alternativ.

sql = _
"select f.id,f.fraga,i.svar " &_
" from fragor as f inner join " &_
" info as i on f.id = i.fragid " & _
" where i.userid = 1 " & _
" union " & _
" select f.id,f.fraga,' ' " & _
" from fragor as f " & _
" where id not in " & _
" (select fragid from info " & _
" where userid = " & session("userid") & ")"

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 2001387 inlägg
#12

Tack så mycket men hmm igen..

Nu loopades alla inputboxar och frågor ut men svaren (value i inputboxarna) kom inte ut ...

Medlem sedan okt. 2001387 inlägg
#13

samt att ifall alla svar är ifyllda så loopas ingen fråga, inputbox eller svar ut..

endast de frågor vars svar som är tomma loopas alltså ut.

Medlem sedan dec. 200012 464 inlägg
#14
sql = _
"select f.id,f.fraga,i.svar " &_
" from fragor as f inner join " &_
" info as i on f.id = i.fragid " & _
" where i.userid = [b]" & session("userid") [/b]& _
" union " & _
" select f.id,f.fraga,' ' " & _
" from fragor as f " & _
" where id not in " & _
" (select fragid from info " & _
" where userid = " & session("userid") & ")"

Lite cut och paste problem, ursäkta.

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 2001387 inlägg
#15

Åhhy... my saviour. Det fungerade.. är dig evigt tacksam :)

Medlem sedan okt. 2001387 inlägg
#16

haha.. skulle vara dig evigt tacksam gånger två om jag fick lite hälp med koden som tar emot informationen.

Vill jag alltså göra med Request.Form men det blir ju lite jobbigt eftersom jag inte har ett bestämt antal "inputboxar"/frågor. Samt är det ju inte säkert att det ska göras en ny post(RecSet.AddNew) utan den kanske bara ska ersättas...

skulle verkligen uppskattas om jag fick lite hjälp med detta också.

Medlem sedan dec. 200012 464 inlägg
#17

Döp alla textfält till samma namn. Lägg till ett hidden fält som innehåller id för frågan

Do Until RecSet.EOF
%>
<B><%=RecSet("fraga")%></B><BR>
<input type="text" SIZE="30" MAXLENGTH="30" VALUE="<%=RecSet("svar")%>" name="svar" CLASS="input"><P>
<input type="hidden" name="id" value="<% =recset("id")%>">
<%

RecSet.MoveNext
Loop

RecSet.Close
%>
<P>

På sidan som tar emot formuläret så kan du göra så här

set connect = server.createobject("adodb.connection")
connect.open "dsn"

for i = 1 to request.form("id").count
  sql = "update info set svar = '" & replace(request.form("svar")(i),"'","''") & "'" _
  & " where userid = " & session("userid") _
  & " and fragid = " & request.form("id")(i)

  connect.execute sql,rows,128
  if rows = 0 then 'fanns ej sedan tidigare, gör insert
     sql = "insert into info values(userid,fragid,svar) values " _
     & "(" & session("userid") & "," & request.form("id")(i) & ",'" _
     replace(request.form("svar")(i),"'","''") & "')"
     connect.execute sql,,128
  end if
next
connect.close

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 2001387 inlägg
#18

tackar så jättemycket. nu ska jag nog inte vara jobbig på ett tag.

260 ms totalt · 4 externa anrop · v20260731065814-full.868a69e5
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)