webForumDet fria alternativet

uppdatera ifyllda värden

ASP

18 svar · 284 visningar · startad av soffan76

Medlem sedan maj 2001684 inlägg
Frågan#1

Hej!
Finns det någon som kan hitta felet i denna kod? Meningen är att redan ifyllda data ska fyllas i enligt Request.QueryString("PA_ID"), men det gör det inte. Alla fält är tomma. Det är meningen att man ska kunna se dessa val sedan vid önskemål uppdatera dessa. Jättetacksam för all hjälp!


<% 
Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "PA" 

SQL = "SELECT * FROM PA_Atgard"
Set RS = Conn.Execute(SQL) 

SQL2 = "SELECT * FROM PA_Koppling_Atgard WHERE PA_ID = " & Trim(Request.QueryString("PA_ID")) & " "
Set RS2 = Conn.Execute(SQL2) 
%>

<table>
<tr><td>Projektanmälan: <%= Request.QueryString("PA_ID") %></td></tr>
</table>

<table>
<tr><td>&nbsp;</td></tr>
<tr><td>Följande uppgifter finns inlagda för denna projektanmälan. Registrera dessa genom att fylla i dem i formuläret nedan. Redigera efter behov.</td></tr>
<tr><td>&nbsp;</td></tr>
</table>

<table>
<tr>
<td><b>Åtgärd</b>&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td><b>Nybyggnad/Ombyggnad</b></td>
</tr>

<form method="POST" action="form1_atgard2.asp">
<input type="hidden" name="PA_ID" value="<% =Request.QueryString("PA_ID") %>">
<table>

<%
x=1
y=1
Do until rs2.EOF %>

<% Do until rs.EOF %> 

<td valign="top">
<input type="checkbox" value="<% = rs("Atgard_ID") %>" name="check<%=x%>"
<% if rs("Atgard_ID")=rs2("Atgard_ID") then
	Response.write "checked"
	Rad_Ifylld=true
else
	Rad_Ifylld=false
end if
%>><% = rs("Namn") %>
<%x= x--1%>
</td>

<td valign="top"><select name="koll<%=y%>">
<% if Rad_ifylld then %>
<option value="">
<option value="Ombyggnad" <%if trim(rs2("Val"))="Ombyggnad" then Response.write "selected"%>>Ombyggnad
<option value="Nybyggnad" <%if trim(rs2("Val"))="Nybyggnad" then Response.write "selected"%>>Nybyggnad
</select>
<%else %>
<option value="">
<option value="Ombyggnad">Nybyggnad
<option value="Nybyggnad">Ombyggnad
</select>
<%end if %>
<%y= y--1%>
</td>

</tr>
<%
rs.movenext 
loop
rs2.movenext
loop
Session("x")= x 
%>
</table>

<table>
<tr><td>&nbsp;</td></tr>
<tr><td><input type=submit value="submit"></td></tr>
</table>
</form> 

<% 
rs.close
rs2.close
conn.close 
set rs = nothing
set rs2 = nothing
set conn = nothing
%>

------------------
Sofia

Medlem sedan aug. 2000304 inlägg
#2

Hallo!

Prova att ändra din rad:

SQL2 = "SELECT * FROM PA_Koppling_Atgard WHERE PA_ID = " & Trim(Request.QueryString("PA_ID")) & " "

Till:

SQL2 = "SELECT * FROM PA_Koppling_Atgard WHERE PA_ID = " & Trim(Request.QueryString("PA_ID"))

[r]Stavfel[/r] ;)
------------------
/CoolDude

[Redigerat av CoolDude den 25 maj 2001]

Medlem sedan maj 2001684 inlägg
#3

Hej!
Tack för ditt förslag, tyvärr hjälpte det inte. Jag tror problemet har något att göra med att IF-satsen inte blir uppfylld, frågan är varför???

------------------
Sofia

Medlem sedan dec. 200012 464 inlägg
#4

Menar du denna if-sats

<% if rs("Atgard_ID")=rs2("Atgard_ID") then

du kan ju testa

<% if cint(rs("Atgard_ID"))=cint(rs2("Atgard_ID")) then

i så fall.

I och för sig så behöver du inte ha 2 select-satser utan man kan göra en outer join så får man upp det i ett recordset.

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

Medlem sedan maj 2001684 inlägg
#5

Tack, det satte lite fart på det hela. Fast skumt nog fylls bara ett värde i...fast jag vet att flera är ifyllda från början....då är det väl ngt fel på loopen va?

Och hur menade du med det där du skrev om outer join? Hur gör man då?

------------------
Sofia

Medlem sedan dec. 200012 464 inlägg
#6

I och med att du har så här:

  do until rs2.eof
     do until rs.eof
     loop
  loop

så kommer man bara in i den inre loopen första gången. Då man kommer till andra posten i rs2 så är ju rs.eof sant. Om du vill ha kvar den logiken skulle du behöva lägga in en rs.movefirst innan do until rs.eof. I så fall behöver du också ändra på hur du öppnar ditt recordset. (När du skapar ett recordset med hjälp av execute så går det bara att flytta sig framåt i det recordsetet.)

 
SQL2 = "SELECT * FROM PA_Koppling_Atgard WHERE PA_ID = " & Trim(Request.QueryString("PA_ID")) & " "
set rs2 = server.createobject("adodb.recordset")
RS2.open sql2,Conn,3,3

och sedan vid loopen så

Do until rs2.EOF %>

<% 
rs.movefirst
Do until rs.EOF %>

Jag återkommer efter lunch om outer join, vilket jag tycker är en bättre och effektivare lösning.

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

[Redigerat av LarsG den 25 maj 2001]

Medlem sedan maj 2001684 inlägg
#7

Hej och tack!
Jo, nu funkade det att alla värdena kom in. Fast problemet nu är att rs upprepas flera gånger, beroende på hur många värden som ska in. RS upprepas alltså först en gång då värde 1 fylls i, sen en gång till när värde 2 fylls i o.s.v. Vet du vad detta beror på?

------------------
Sofia

Medlem sedan dec. 200012 464 inlägg
#8

Jo, för varje post i tabellen PA_Koppling_Atgard, som uppfyller ditt villkor, så går du igenom alla poster i pa_atgard och skriver ut fält. Du får alltså alla möjliga kombinationer mellan dessa två recordset. Det du vill, förmodar jag, är att för varje post i rs2 så vill du kolla om det finns data i rs som matchar. Om det finns data som matchar skriver du ut en en sak och om inte, en annan.

Du borde alltså flytta ut utskriften utanför den inre loopen så att du bara får en utskrift per rad i rs2.

En alternativ lösning är att göra om select-frågan så att man bara får upp de poster som är relevanta.

<% 
Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "PA" 

SQL = "SELECT * FROM PA_Koppling_Atgard pka right join pa_atgard pa on pka.atgard_id = pa.atgard_id WHERE pka.PA_ID = " & Request.QueryString("PA_ID")
Set RS = Conn.Execute(SQL) 
%>

<table>
<tr><td>Projektanmälan: <%= Request.QueryString("PA_ID") %></td></tr>
</table>

<table>
<tr><td> </td></tr>
<tr><td>Följande uppgifter finns inlagda för denna projektanmälan. Registrera dessa genom att fylla i dem i formuläret nedan. Redigera efter behov.</td></tr>
<tr><td> </td></tr>
</table>

<table>
<tr>
<td><b>Åtgärd</b>    </td>
<td><b>Nybyggnad/Ombyggnad</b></td>
</tr>

<form method="POST" action="form1_atgard2.asp">
<input type="hidden" name="PA_ID" value="<% =Request.QueryString("PA_ID") %>">
<table>

<%
x=1
y=1

Do until rs.EOF %> 

<td valign="top">
<input type="checkbox" value="<% = rs("Atgard_ID") %>" name="check<%=x%>"
<% if not isNull(rs("val")) then
Response.write "checked"
end if
%>><% = rs("Namn") %>
<%x= x--1%>
</td>

<td valign="top"><select name="koll<%=y%>">
<% if not isNull(rs("val")) then %>
<option value="">
<option value="Ombyggnad" <%if trim(rs("Val"))="Ombyggnad" then Response.write "selected"%>>Ombyggnad
<option value="Nybyggnad" <%if trim(rs("Val"))="Nybyggnad" then Response.write "selected"%>>Nybyggnad
</select>
<%else %>
<option value="">
<option value="Ombyggnad">Nybyggnad
<option value="Nybyggnad">Ombyggnad
</select>
<%end if %>
<%y= y--1%>
</td>

</tr>
<%
rs.movenext 
loop
Session("x")= x 
%>
</table>

<table>
<tr><td> </td></tr>
<tr><td><input type=submit value="submit"></td></tr>
</table>
</form> 

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

Skillnaden mellan ej join och en outer join är att du även får rader där det inte finns någon match mellan tabellerna.

SELECT * FROM PA_Koppling_Atgard pka right join pa_atgard pa on pka.atgard_id = pa.atgard_id WHERE pka.PA_ID = " & Request.QueryString("PA_ID")

innebär att man får alla rader från den högra (right) tabellen som uppfyller where-villkoret. För de rader som inte har någon match i den vänstra tabellen så får man null-värden i dessa kolumner (Därför så testar jag med IsNull). Annars fungerar det som en vanlig join.

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

Medlem sedan maj 2001684 inlägg
#9

Hej igen!
OK, har nu testat din kod. Tyvärr får jag "Exception occured" på följande rad:

<option value="Ombyggnad" <%if trim(rs("Val"))="Ombyggnad" then Response.write "selected"%>>Ombyggnad

Och jag vill att alla rader ska visas, även de utan värde, eftersom man ska kunna uppdatera dessa.
Hur gör jag då?
Frågvis....

------------------
Sofia

Medlem sedan maj 2001684 inlägg
#10

Du borde alltså flytta ut utskriften utanför den inre loopen så att du bara får en utskrift per rad i rs2.

Vart ska jag då flytta den?

------------------
Sofia

Medlem sedan maj 2001684 inlägg
#11

Hilfe bitte..jag är så fast som man kan bli...

------------------
Sofia

Medlem sedan dec. 200012 464 inlägg
#12

Exception occured.

Har du kolumner som är av typen PM/Memo i din tabell? I så fall måste dessa behandlas speciellt. När man gör en select så måste dessa ligga sist i selectlistan och om du har flera PM/Memo fält så måste de vara i samma ordning som de är definerade i tabellen. Det verkar också vara problem med att referera till ett sådant fält i ett recordset flera gånger. Det man får göra i så fall är att lägga över värdet i en VBScript-variabel och använda den i stället.

Det där med att flytta ut utskriften menade jag att du skulle göra såhär ungefär, om man utgår från din lösning med två loopar


do until rs2.eof
   rs.movefirst
   rad_ifylld = false
   do until rs.eof
      if cint(rs("atgard_id")) = cint(rs2("atgard_id")) then
         rad_ifylld = true
         exit do
      end if
      rs.movenext
   loop
   if  rad_ifylld then
'skriv ut ifyllda
   else
'skriv ut icke utfyllda
   end if
   rs2.movenext
loop

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

Medlem sedan maj 2001684 inlägg
#13

Menar du så här? Fungerar inte...fattar inte...

<form method="POST" action="form1_atgard2.asp">
<input type="hidden" name="PA_ID" value="<% =Request.QueryString("PA_ID") %>">
<table>
<tr>
<td><b>Åtgärd</b>&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td><b>Nybyggnad/Ombyggnad</b></td>
</tr>

<%
x=1
y=1

Do until rs2.EOF 
rs.movefirst
rad_ifylld = false
Do until rs.EOF %> 
<tr>
<td valign="top">

<% if cint(rs("Atgard_ID"))=cint(rs2("Atgard_ID")) then
    Response.write "checked"
	Rad_Ifylld=true
	exit do
    end if
    rs.movenext
    loop
    if rad_ifylld then%>
<input type="checkbox" value="<% = rs("Atgard_ID") %>" name="check<%=x%>"><% = rs("Namn") %>
<% else %>
<input type="checkbox" value="<% = rs("Atgard_ID") %>" name="check<%=x%>"><% = rs("Namn") %>

<%x= x--1%>
</td>

<td valign="top"><select name="koll<%=y%>">
<% if Rad_ifylld then %>
<option value="Ombyggnad" <%if trim(rs2("Val"))="Ombyggnad" then Response.write "selected"%>>Ombyggnad
<option value="Nybyggnad" <%if trim(rs2("Val"))="Nybyggnad" then Response.write "selected"%>>Nybyggnad
</select>
<%else %>
<option value="">
<option value="Ombyggnad">Nybyggnad
<option value="Nybyggnad">Ombyggnad
</select>
<%end if %>
<%y= y--1%>
</td>
</tr>

<%
end if
rs2.movenext
loop
end if
%>
<%
Session("x")= x 
%>
</table>

<table>
<tr><td>&nbsp;</td></tr>
<tr><td><input type=submit value="submit"></td></tr>
</table>
</form>

------------------
Sofia

Medlem sedan maj 2001684 inlägg
#14

Hjälp snälla? Jag har trasslat in mig i alla koder och kommer inte ut.....

------------------
Sofia

Medlem sedan mars 2001243 inlägg
#15

Ett tips till dig är att börja kommentera din kodning, för du har väl gjort den själv? Kommentarer är guld värda när du programmerar långa koder... 'Kommentar'

------------------
http://www.hutters.net

Medlem sedan dec. 200012 464 inlägg
#16

Jag har gjort lite små justeringar

<form method="POST" action="form1_atgard2.asp">
<input type="hidden" name="PA_ID" value="<% =Request.QueryString("PA_ID") %>">
<table>
<tr>
<td><b>Etgdrd</b>    </td>
<td><b>Nybyggnad/Ombyggnad</b></td>
</tr>
<%
x=1
y=1

Do until rs2.EOF
rs.movefirst
rad_ifylld = false
Do until rs.EOF

if cint(rs("Atgard_ID"))=cint(rs2("Atgard_ID")) then
   Rad_Ifylld=true
   exit do
end if
rs.movenext
loop
%>

<tr>
<td valign="top">

if rad_ifylld then%>
<input type="checkbox" value="<% = rs("Atgard_ID") %>" name="check<%=x%>" checked><% = rs("Namn")%>\

<% else %>
<input type="checkbox" value="<% = rs("Atgard_ID") %>" name="check<%=x%>"><% = rs("Namn") %> >
<% end if %>

<%x= x--1%>
</td>

<td valign="top"><select name="koll<%=y%>">
<% if Rad_ifylld then %>
<option value="Ombyggnad" <%if trim(rs2("Val"))="Ombyggnad" then Response.write "selected"%>>Ombygg\
nad
<option value="Nybyggnad" <%if trim(rs2("Val"))="Nybyggnad" then Response.write "selected"%>>Nybygg\
nad
</select>
<%else %>
<option value="">
<option value="Ombyggnad">Nybyggnad
<option value="Nybyggnad">Ombyggnad
</select>
<%end if %>
<%y= y--1%>
</td>
</tr>

<%
rs2.movenext
loop
%>
<%
Session("x")= x
%>
</table>

<table>
<tr><td> </td></tr>
<tr><td><input type=submit value="submit"></td></tr>
</table>
</form>

Bara en fråga, stämmer detta

<option value="Ombyggnad">Nybyggnad
<option value="Nybyggnad">Ombyggnad

eller skall det vara tvärtom?

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

Medlem sedan maj 2001684 inlägg
#17

Hej!

Hmmm, jo det ska vara tvärtom...

<option value="Ombyggnad">Nybyggnad
<option value="Nybyggnad">Ombyggnad

Din kod fungerade fint. Tack för din hjälp. Problemet är dock att jag vill att alla checkboxar ska listas, även de som inte har ngt värde.. Detta för att man ska kunna uppdatera och ändra och kanske kryssa i en checkbox som inte var ikryssad förut.
Hur gör jag då?

------------------
Sofia

Medlem sedan maj 2001684 inlägg
#18

Finns det ingen som vet???

------------------
Sofia

Medlem sedan maj 2001684 inlägg
#19

Hej igen!
Fick hjälp av en snubbe som sade att jag skulle skriva SQL-satserna på följande sätt men då stämmer inte looparna längre. Vad jag göra? Vill förbi detta problem NU!

<% 
Set Conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "PA" 

SQL = "SELECT * FROM PA_Syfte WHERE Syfte_ID IN (SELECT Syfte_ID FROM PA_Koppling_Syfte WHERE PA_ID  = " & Trim(Request.QueryString("PA_ID")) & ")"
Set RS = Conn.Execute(SQL) 

SQL2 = "SELECT * FROM PA_Syfte WHERE Syfte_ID NOT IN (SELECT Syfte_ID FROM PA_Koppling_Syfte WHERE PA_ID = " & Trim(Request.QueryString("PA_ID")) & ")"
Set RS2 = Conn.Execute(SQL2) 
%>

<table>
<tr><td>Projektanmälan: <%= Request.QueryString("PA_ID") %></td></tr>
<tr><td> </td></tr>
</table>

<% If rs2.Eof Then %>
<p>
Inga uppgifter finns ännu inlagda. Var god uppdatera om så önskas.

<% Else %>
<form method="POST" action="form2_trafikslag2.asp">
<input type="hidden" name="PA_ID" value="<% =Request.QueryString("PA_ID") %>">

<table>
<tr><td> </td></tr>
<tr><td>Följande uppgifter finns inlagda för denna projektanmälan. Redigera efter behov.</td></tr>
<tr><td> </td></tr>
</table>

<table>
<tr><td><b>Syfte/bakgrund</b></td></tr>
<% 
x=1
Do until RS2.EOF 
%>
<%
RS.MoveFirst
Do until RS.EOF 
%> 
<tr>

<td valign="top">
<input type="checkbox" value="<% = rs("Syfte_ID") %>" name="check<%=x%>"
<% if cint(RS("Syfte_ID"))=cint(RS2("Syfte_ID")) then
	Response.write "checked"
	Rad_Ifylld=true
else
	Rad_Ifylld=false
end if
%>><% = rs("Namn") %>
<%x= x--1%>
</td>

<%
RS.MoveNext 
loop

RS2.MoveNext 
loop  

Session("x")= x %>

<% 
RS.close
RS2.close
Conn.close 
set RS = nothing
set RS2 = nothing
set Conn = nothing
%>

<tr><td> </td></tr>
<tr><td>
<input type=submit value="Godkänn">
</form>

<% End If %>

Den första SQL-satsen ska på ngt vis lista de ikryssade värdena och den andra ska lista de okryssade...

[Redigerat av soffan76 den 28 maj 2001]

294 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
159 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)