webForumDet fria alternativet

döe få End If?

ASP

16 svar · 429 visningar · startad av plelkes

Medlem sedan mars 2002823 inlägg
Frågan#1

Nu har jag provat på "möblera om " en fungerande sida:

<%
If Request.QueryString("type") = "" Then
  intType = 1
Else
  intType = CInt(Request.QueryString("type"))
End If

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\vatskebalans\db\vbalans.mdb")
%>
	<table width="800" border="1">
		<tr>
			<td>&nbsp;</td>
			<td colspan="3"><%strSQL = "SELECT tblFluids.FluidNamn, ft.TypeNamn, ft.TypeID FROM tblFluidRelat, tblFluids, tblFluidTypes WHERE tblFluidRelat.FluidID = tblFluids.FluidID AND tblFluidRelat.typeID = tblFluidTypes.typeID AND tblFluidTypes.TypeID = " & intType & " ORDER by tblFluidTypes.typeID"
							Set objRS = objConn.Execute(strSQL)
							If NOT objRS.EOF Then
  							Response.WriteobjRS("TypeNamn")%>
		</td>
		</tr>
  			<tr> 
    			<td><%intLast = objConn.Execute("SELECT Max(TypeID) FROM tblFluidTypes")(0)
						For i = 1 To intLast
  					 Set objRS = objConn.Execute("SELECT TypeNamn FROM tblFluidTypes WHERE TypeID = " & i)
					 	If NOT i = intType Then
    						Response.Write("<a href=""?type=" & i & """>" & objRS("TypeNamn") & "</a><BR> ")
  								Else
  						End If
						Next%>
				</td>
    				<td>%strSQL = "SELECT tblFluids.FluidNamn, tblFluidTypes.TypeNamn, tblFluidTypes.TypeID FROM tblFluidRelat, tblFluids, tblFluidTypes  WHERE tblFluidRelat.FluidID = tblFluids.FluidID AND tblFluidRelat.typeID =tblFluidTypes.typeID AND tblFluidTypes.TypeID = " & intType & " ORDER by tblFluidTypes.typeID"
					 Set objRS = objConn.Execute(strSQL)
						Do Until objRS.EOF
    						Response.Write("<INPUT NAME=""leggatill"" TYPE=""checkbox"" VALUE="""& objRS("FluidNamn") &""">" )
					     %></td>
    			<td><%Response.Write objRS("FluidNamn") %></td>
    			<td><%Response.Write "<INPUT NAME=""volym"" TYPE=""text""><br>"%></td>
	     objRS.MoveNext
  Loop
 
 Else
  Response.Write("Det finns inga av den typen.")
End If

Response.Write("<br>")
Set objRS = Nothing
%>
		</tr>
	</table>
<%
Response.Write "<INPUT TYPE=""submit"" VALUE=""Lägg till Vätskebalansen"">"
Set objRS = Nothing
objConn.Close : Set objConn = Nothing
%>

Men jag verkar ha för få End IF, för jag får

Microsoft VBScript compilation error '800a03f4'

Expected 'If'

/vatskebalans/listainnehollet31.asp, line 55

End
---^

Lägger jag till ett End IF
får jag ändå fel

Snälla ni hjälp mig innan jag blir alldeles flint...

Medlem sedan dec. 20003 887 inlägg
#2

Jag ser inget End... städa koden och markera raden som ger felet.

Medlem sedan dec. 200012 464 inlägg
#3
for  ...

loop

No good-

Medlem sedan aug. 20021 752 inlägg
#4

Kan det kanske vara detta som spökar

If NOT i = intType Then
	Response.Write("<a href=""?type=" & i & """>" & objRS("TypeNamn") & "</a><BR> ")
Else
End If
Next%>

Där har du en Else utan något i, sedan kommer end if. Prova att ta bort Else.

/Viktor

Medlem sedan dec. 20003 887 inlägg
#5
<%
If Request.QueryString("type") = "" Then
  intType = 1
Else
  intType = CInt(Request.QueryString("type"))
End If

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\vatskebalans\db\vbalans.mdb")
%>
  <table width="800" border="1">
    <tr>
      <td> </td>
      <td colspan="3">
<%
strSQL = "SELECT tblFluids.FluidNamn, ft.TypeNamn, ft.TypeID " & _
         "FROM tblFluidRelat, tblFluids, tblFluidTypes " & _
         "WHERE tblFluidRelat.FluidID = tblFluids.FluidID " &_
         "  AND tblFluidRelat.typeID = tblFluidTypes.typeID " & _
         "  AND tblFluidTypes.TypeID = " & intType & _
         " ORDER by tblFluidTypes.typeID"

Set objRS = objConn.Execute(strSQL)

If NOT objRS.EOF Then
  Response.WriteobjRS("TypeNamn")
%>
      </td>
    </tr>
    <tr> 
      <td>
<%
  intLast = objConn.Execute("SELECT Max(TypeID) FROM tblFluidTypes")(0)

  For i = 1 To intLast
    Set objRS = objConn.Execute("SELECT TypeNamn FROM tblFluidTypes WHERE TypeID = " & i)
    
    If NOT i = intType Then
      Response.Write("<a href=""?type=" & i & """>" & objRS("TypeNamn") & "</a><BR> ")
    End If
  Next
%>
      </td>
      <td>
<% [blue]'Här kan ett fel ha varit. Ingen kråka före %[/blue]

  strSQL = "SELECT tblFluids.FluidNamn, tblFluidTypes.TypeNamn, tblFluidTypes.TypeID " & _
           "FROM tblFluidRelat, tblFluids, tblFluidTypes " &
           "WHERE tblFluidRelat.FluidID = tblFluids.FluidID
           "  AND tblFluidRelat.typeID = tblFluidTypes.typeID " & _ 
           "  AND tblFluidTypes.TypeID = " & intType & _
           " ORDER by tblFluidTypes.typeID"

  Set objRS = objConn.Execute(strSQL)

  Do Until objRS.EOF
    Response.Write("<INPUT NAME=""leggatill"" TYPE=""checkbox"" VALUE="""& objRS("FluidNamn") &""">" )
%>
      </td>
      <td>
<%
    Response.Write objRS("FluidNamn")
%>
      </td>
      <td>
<%
    Response.Write "<INPUT NAME=""volym"" TYPE=""text""><br>"
%>
      </td>
<% [blue]'Mera fel... ingen contextswitch...[/blue]
    objRS.MoveNext
  Loop
 
Else
  Response.Write("Det finns inga av den typen.")
End If

Response.Write("<br>")

Set objRS = Nothing
%>
    </tr>
  </table>
<%
Response.Write "<INPUT TYPE=""submit"" VALUE=""Lägg till Vätskebalansen"">"

Set objRS = Nothing [blue]' En gång till...[/blue]
objConn.Close : Set objConn = Nothing
%>

Denna kod är ett rätt bra exempel på hur man inte ska göra ;)
Dela upp sidan i två block istället. Lägg VBScript-delen först och HTML-biten sist. Gör om dom delar du har mitt i HTML-koden till funktioner och sub:ar. Tydlighet i kod är ett stort steg på vägen för att kunna felsöka och förstå vad det är som händer.

Medlem sedan mars 2002823 inlägg
#6

<% 'Mera fel... ingen contextswitch...
objRS.MoveNext
Loop

Vad menar du med ingen contextswitch???

Gör om dom delar du har mitt i HTML-koden till funktioner och sub:ar.

Funktioer och sub:ar en fortfarande mina S T O R A brister x( x( x( x(
Kan jag få exempel på hur jag borde lösa???

Medlem sedan mars 2002823 inlägg
#7

Det mest konstiga är att det funkar innan ommöbleringen, med följande kod

<%
If Request.QueryString("type") = "" Then
  intType = 1
Else
  intType = CInt(Request.QueryString("type"))
End If

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\vatskebalans\db\vbalans.mdb")
strSQL = "SELECT f.FluidNamn, ft.TypeNamn, ft.TypeID FROM tblFluidRelat fr, tblFluids f, tblFluidTypes ft WHERE fr.FluidID = f.FluidID AND fr.typeID = ft.typeID AND ft.TypeID = " & intType & " ORDER by ft.typeID"
Set objRS = objConn.Execute(strSQL)
If NOT objRS.EOF Then
  Response.Write(objRS("TypeNamn") & "<p>")
%>
<table width="500" border="1">
  
  <tr>
    <td><%intLast = objConn.Execute("SELECT Max(TypeID) FROM tblFluidTypes")(0)

For i = 1 To intLast
  Set objRS = objConn.Execute("SELECT TypeNamn FROM tblFluidTypes WHERE TypeID = " & i)

  If NOT i = intType Then
    Response.Write("<a href=""?type=" & i & """>" & objRS("TypeNamn") & "</a><BR> ")
  Else
   
  End If
Next

%></td>
    <td>&nbsp;</td>
    <td><%strSQL = "SELECT f.FluidNamn, ft.TypeNamn, ft.TypeID FROM tblFluidRelat fr, tblFluids f, tblFluidTypes ft WHERE fr.FluidID = f.FluidID AND fr.typeID = ft.typeID AND ft.TypeID = " & intType & " ORDER by ft.typeID"
Set objRS = objConn.Execute(strSQL)
Do Until objRS.EOF
    Response.Write("<INPUT NAME=""leggatill"" TYPE=""checkbox"" VALUE="""& objRS("FluidNamn") &""">" & objRS("FluidNamn") & "&nbsp;&nbsp;&nbsp;<INPUT NAME=""volym"" TYPE=""text""><br>")
     objRS.MoveNext
  Loop
 
 Else
  Response.Write("Det finns inga av den typen.")
End If

Response.Write("<br>")
Set objRS = Nothing
%></td>
  </tr>
</table>

<%
Response.Write "<INPUT TYPE=""submit"" VALUE=""Lägg till Vätskebalansen"">"
Set objRS = Nothing
objConn.Close : Set objConn = Nothing
%>
</BODY>
</HTML>

<% 'Mera fel... ingen contextswitch...
objRS.MoveNext
Loop

Vad menar du med ingen contextswitch???

Gör om dom delar du har mitt i HTML-koden till funktioner och sub:ar.

Funktioer och sub:ar en fortfarande mina S T O R A brister x( x( x( x(
Kan jag få exempel på hur jag borde lösa???

Medlem sedan dec. 20003 887 inlägg
#8

plelkes skrev:

Vad menar du med ingen contextswitch???

Du saknade <% där eller så såg jag fel då jag städade i din kod.

plelkes skrev:

Funktioer och sub:ar en fortfarande mina S T O R A brister x( x( x( x(
Kan jag få exempel på hur jag borde lösa???

Svårt att dela upp det här i fler än en funktion. Det finns ingen logik för det, eftersom dom sakerna här bara ska utföras en gång.
Men jag kan ju givetvis pilla lite mer i din kod :)

<%
Function CreateFluidTable()
  strDbPath = Server.MapPath("\vatskebalans\db\vbalans.mdb")

  Set objConn = Server.CreateObject("ADODB.Connection")
  objConn.Provider = "Microsoft.Jet.OleDb.4.0"

  strSQL = "SELECT tblFluids.FluidNamn, ft.TypeNamn, ft.TypeID " & _
           "FROM tblFluidRelat, tblFluids, tblFluidTypes " & _
           "WHERE tblFluidRelat.FluidID = tblFluids.FluidID " &_
           "  AND tblFluidRelat.typeID = tblFluidTypes.typeID " & _
           "  AND tblFluidTypes.TypeID = " & intType & _
           " ORDER by tblFluidTypes.typeID"

  objConn.Open strDbPath
  objRS.Open strSQL, objConn, 1, 3

  If Not objRS.EOF Then
    strHtml = objRS("TypeNamn")

    objRS.Close

    strHtml = strHtml & "</td></tr><tr><td>"

    intLast = objConn.Execute("SELECT Max(TypeID) FROM tblFluidTypes")(0)

    For i = 1 To intLast
      If Not i = intType Then
        objRS.Open  "SELECT TypeNamn FROM tblFluidTypes WHERE TypeID = " & i, objConn, 1, 3

        strHtml = strHtml & "<a href=""?type=" & i & "">" & objRS("TypeNamn") & "</a><br>")

        objRS.Close
      End If
    Next

    strHtml = strHtml & "</td><td>"

    strSQL = "SELECT tblFluids.FluidNamn, tblFluidTypes.TypeNamn, tblFluidTypes.TypeID " & _
             "FROM tblFluidRelat, tblFluids, tblFluidTypes " &
             "WHERE tblFluidRelat.FluidID = tblFluids.FluidID
             "  AND tblFluidRelat.typeID = tblFluidTypes.typeID " & _ 
             "  AND tblFluidTypes.TypeID = " & intType & _
             " ORDER by tblFluidTypes.typeID"

    objRS.Open strSQL, objConn, 1, 3

    Do Until objRS.EOF
      strHtml = strHtml & "<input name=""leggatill"" type=""checkbox"" value=""" & objRS("FluidNamn") & """>"
      strHtml = strHtml & "</td><td>" & objRS("FluidNamn") & "</td><td>"
      strHtml = strHtml & "<input name=""volym"" type=""text""><br></td>"

      objRS.MoveNext
    Loop

    objRS.Close
  Else
    strHtml = "Det finns inga av den typen."
  End If

  Set objRS = Nothing
  objConn.Close
  Set objConn = Nothing

  CreateFluidTable = strHtml
End Function

If Request.QueryString("type") = "" Then
  intType = 1
Else
  intType = CInt(Request.QueryString("type"))
End If
%>

<table width="800" border="1">
  <tr>
    <td></td>
    <td colspan="3">
<%
  Response.Write CreateFluidTable
%>
    </td>
  </tr>
</table>
<input type="submit" value="Lägg till Vätskebalansen">
Medlem sedan dec. 20003 887 inlägg
#9

plelkes skrev:

Det mest konstiga är att det funkar innan ommöbleringen

Jag tyckte du sa att det inte fungerade... eller var det innan du blev flint :q :)

Medlem sedan mars 2002823 inlägg
#10

Det mest konstiga är att det funkar innan ommöbleringen
--------------------------------------------------------------------------------

Jag tyckte du sa att det inte fungerade... eller var det innan du blev flint

Va+ nu fattar jag inget...
Länken jag skickade var ju innan mitt försök till ommöblering.
Håller du inte med om att det funkar?

Medlem sedan mars 2002823 inlägg
#11

Nu har jag läst och begrundat din kod. Rätt elegant lösning, :birp,
som dock jag själv aldrig skulle komma på :x

  • Du öppnar och stänger rs i varje tabellcell, eller hur?
  • Men connectionen stänger du bara på slutet, eller?

Du öppnar väl conn med

objConn.Open strDbPath

Men ändå har du med i varje tabellcell:

intLast = objConn.Execute("SELECT Max(TypeID) FROM tblFluidTypes")(0)

eller

objRS.Open strSQL, objConn, 1, 3
Medlem sedan mars 2002823 inlägg
#12

Med en dåres envishet har jag fortsatt på mitt inslagna väg, dvs utan funktioner - eftersom jag är övertygad att jag aldrig skulle klara av att komma på det själv.

Har lag till contextswitch som Engine^ skrev...
Nu får jag felutskriften:

Microsoft JET Database Engine error '80040e10'

No value given for one or more required parameters.

/vatskebalans/listainnehollet31.asp, line 20

Koden i området:

16: <table width="800" border="1">
17: <tr>
18: <td>&nbsp;</td>
19:<td colspan="3"><%strSQL = "SELECT tblFluids.FluidNamn, ft.TypeNamn, ft.TypeID FROM tblFluidRelat, tblFluids, tblFluidTypes WHERE tblFluidRelat.FluidID = tblFluids.FluidID AND tblFluidRelat.typeID = tblFluidTypes.typeID AND tblFluidTypes.TypeID = " & intType & " ORDER by tblFluidTypes.typeID"
20: Set objRS = objConn.Execute(strSQL)
21: If NOT objRS.EOF Then
22: Response.WriteobjRS("TypeNamn")%>
Medlem sedan juni 20003 076 inlägg
#13

Betyder att variabeln: intType förmodligen är tomt.

Medlem sedan juni 200032 967 inlägg
#14

Kolla så alla tabell- och fältnamn är rättstavade.

Mvh

Medlem sedan mars 2002823 inlägg
#15

dela upp strSQL på flera rader

Hej,
nedanstående vii jag dela upp på flera rader:

strSQL = "SELECT f.FluidNamn, ft.TypeNamn, ft.TypeID FROM tblFluidRelat fr, tblFluids f, tblFluidTypes ft WHERE fr.FluidID = f.FluidID AND fr.typeID = ft.typeID AND ft.TypeID = " & intType & " ORDER by ft.typeID"

Vilket är rätt:
1)

strSQL = "SELECT f.FluidNamn, ft.TypeNamn, ft._
TypeID FROM tblFluidRelat fr, tblFluids f, tblFluidTypes ft WHERE fr.-
FluidID = f.FluidID AND fr.typeID = ft.typeID AND ft.TypeID = " & intType & " ORDER by ft.typeID"

eller 2)

strSQL = "SELECT f.FluidNamn, ft.TypeNamn, ft.TypeID " &_
"FROM tblFluidRelat fr, tblFluids f, tblFluidTypes ft WHERE" & _
" fr.FluidID = f.FluidID AND fr.typeID = ft.typeID AND ft.TypeID = " & intType & " ORDER by ft.typeID"
Medlem sedan juni 200032 967 inlägg
#16

Alternativ två är korrekt.

Medlem sedan mars 2002823 inlägg
#17

Nu har jag nästan lyckats....

<%@LANGUAGE="VBSCRIPT" "%>
<HTML>
<HEAD>
<TITLE>Untitled Document</TITLE>
</HEAD>
<%
If Request.QueryString("type") = "" Then
  intType = 1
Else
  intType = CInt(Request.QueryString("type"))
End If

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("\vatskebalans\db\vbalans.mdb")
strSQL = "SELECT tblFluids.FluidNamn, tblFluidTypes.TypeNamn, tblFluidTypes.TypeID FROM " & _
         "tblFluidRelat, tblFluids, tblFluidTypes WHERE tblFluidRelat.FluidID = tblFluids.FluidID AND" & _
		 " tblFluidRelat.typeID = tblFluidTypes.typeID AND tblFluidTypes.TypeID = " & intType & " ORDER by tblFluidTypes.typeID"
Set objRS = objConn.Execute(strSQL)
If NOT objRS.EOF Then
%>
<table width="800" border="1">
		<tr>
		   <td>&nbsp;</td>
		   <td colspan="3"><%
			                Response.Write objRS("TypeNamn")
							objRS.Close
							       %>
		    </td>
		 </tr>
  				<tr> 
    				<td><%
					      intLast = objConn.Execute("SELECT Max(TypeID) FROM tblFluidTypes")(0)
							For i = 1 To intLast
  						  Set objRS = objConn.Execute("SELECT TypeNamn FROM tblFluidTypes WHERE TypeID = " & i)
							If NOT i = intType Then
    							Response.Write("<a href=""?type=" & i & """>" & objRS("TypeNamn") & "</a><BR> ")
						  objRS.Close
						  End If
						  Next
								%>
				     </td>
    					<td><%
							  strSQL = "SELECT tblFluids.FluidNamn, tblFluidTypes.TypeNamn, tblFluidTypes.TypeID FROM " & _
         								"tblFluidRelat, tblFluids, tblFluidTypes WHERE tblFluidRelat.FluidID = tblFluids.FluidID AND" & _
		 								" tblFluidRelat.typeID = tblFluidTypes.typeID AND tblFluidTypes.TypeID = " & intType & " ORDER by tblFluidTypes.typeID"
							  Set objRS = objConn.Execute(strSQL)
                              Do Until objRS.EOF
       						   Response.Write("<INPUT NAME=""leggatill"" TYPE=""checkbox"" VALUE="""& objRS("FluidNamn") &""">" )
					          %>
						</td>
    			  			<td><%Response.Write objRS("FluidNamn") %>
						</td>
    						<td><%Response.Write "<INPUT NAME=""volym"" TYPE=""text"">"%>
						
	    					<% objRS.MoveNext
  									Loop
 								objRS.Close
 									Else
  										Response.Write("Det finns inga av den typen.")
							End If
								Response.Write("<br>")
						Set objRS = Nothing
						objConn.Close
						Set objConn = Nothing
								%>
					
	</table>
<input type="submit" value="Lägg till Vätskebalansen">

</BODY>
</HTML>

Men som ni ser blir det inte rätt:
Första lopen stämmer (kryssruta -> namnet -> textruta).
Men de andra varven blir det snett.
Min avsikt är att andr kryssrutan skall hamna i 2:a tblradens 2:a kolumn, namnet i 2:a tblradens 3:e kolumn ...
Tredje kryssrutan under de övriga i 2:a tblradens 2:a kolumn osv...
Hoppas och tror att ni förstår!.
Har nu utan framgång fösökt i 4 timmar att få fason på det hela.

268 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)