webForumDet fria alternativet

kalender som visar matcher, tuneringar och träningar

ASP

137 svar · 3 703 visningar · startad av PLks · sida 5 av 7

Frågan, av PLks

hej wf jag har en tblKalender (Access 2003) med följande fält/egenskaper - id/räknare - datum/långformat - starttid/medellång tid - sluttid/medellång - aktivitet/text - motståndare - lokal/text Använder en formulär för att lägga in data. Datan vill jag sedan listapå rätt datum (dvs rätt tabellcell) Hur gör jag så jag täcker alla dess

Läs frågan i sin helhet →
Medlem sedan apr. 20031 660 inlägg
#81

HEJ!

Det tycker jag är ett glasklart felmeddelande!

[b]Extra )[/b] in query expression 'month(startDatum) = 5 AND month(dTempDate)[b])[/b]...
Medlem sedan sep. 2004201 inlägg
#82

tänk att man skall vara sååå blind :r
MEN,nu blir det

Microsoft JET Database Engine error '80040e10'
No value given for one or more required parameters.

/ovaasp/skrivbordskalender109.asp, line 289

Medlem sedan juni 200032 967 inlägg
#83

dTempdate är ju inget fält i tabellen, utan en variabel i ASP-koden.

Medlem sedan sep. 2004201 inlägg
#84

@nders skrev:

dTempdate är ju inget fält i tabellen, utan en variabel i ASP-koden.

det stämmer ju förstås...
Har du ngra förslag på lösning av mitt problem?

Medlem sedan juni 200032 967 inlägg
#85

Nix, för jag förstår inte varför du ska ha med dTempDate i SQL-frågan, eftersom det är en variabel som skapas i ditt Else-case i asp-koden.

Medlem sedan sep. 2004201 inlägg
#86

@nders, nu menade jag problemet med varför det blir så konstigt i juni ???
dvs
fungerande kod

 strSQL = "SELECT * FROM upptaget WHERE month(startDatum) = " & manad & " AND day(startDatum) = " & iDag & " ORDER by ID ASC"
rsBokad.Open strSQL, minCon, 3, 3
Do While Not rsBokad.EOF

If Left(rsBokad("aktivitet"), 3) = "Trä"  then
	    Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
	 	Response.Write ", kl " & FormatDateTime(rsBokad("startTid"), 4) & " - "
	 	Response.Write FormatDateTime(rsBokad("endTid"), 4) & " , " & rsBokad("lokal")
	
	  Else
	     Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		  Response.Write ", i " & rsBokad("lokal")
 
	Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
	Response.Write " i "  	
	Response.Write rsBokad("lokal")
	End if
	rsBokad.MoveNext
Loop

Ej korrekt fungerande kod

strSQL = "SELECT * FROM upptaget WHERE month(startDatum) = " & manad & " AND day(startDatum) = " & iDag & " ORDER by ID ASC"
rsBokad.Open strSQL, minCon, 3, 3
Do While Not rsBokad.EOF
    ElseIf Right(rsBokad("aktivitet"), 3) = "Cup" Then
	    dStartDate = Cdate(rsBokad("startDatum"))
	    dEndDate = Cdate(rsBokad("endDatum"))
		For dTempDate = dStartDate to dEndDate
		   Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		   Response.Write ", i " & rsBokad("lokal")
		   		Next
 
	  Else
	     Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		  Response.Write ", i " & rsBokad("lokal")
	Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
	Response.Write " i "  	
	Response.Write rsBokad("lokal")
	End if
	rsBokad.MoveNext
Loop
Medlem sedan juni 200032 967 inlägg
#87

I den ej fungerande koden inleder du med en elseif först i loopen. Du kan inte ha någon elseif om du inte har någon if som den hör ihop med.

Och sedan tror jag att jag sagt det tusen gånger i denna tråd: indentera, indentera, indentera! Indenterar man inte blir det bara kladd och massor av slarvfel.

Bra indentering:

If detena = detandra then
        for i = 0 to 6
              if detfjärde = detfemte then
                     Response.write "jodå!"
              end if
        next
Else
        if foo = "bar" then
                 set objRS = objConn.execute ("select * from foobar")
                 while not objRS.EOF then
                        if något = någotannat then
                                 ' gör något
                        end if
                        objRS.Movenext
                 wend
        End if
End if

Svårläst:

If detena = detandra then
        for i = 0 to 6
if detfjärde = detfemte then
      Response.write "jodå!"
              end if
  next
                 Else
            if foo = "bar" then
          set objRS = objConn.execute ("select * from foobar")
        while not objRS.EOF then
    if något = någotannat then
                           ' gör något
end if
             objRS.Movenext
 wend
End if

Indenterar man ordentligt är det extremt mycket lättare att läsa koden, och lättare att hitta slarvfel, som exempelvis att man missar att påbörja eller avsluta ett block, eller om saker och ting påbörjas / avslutas på fel ställe.

Medlem sedan sep. 2004201 inlägg
#88

tillbaka till civilisationen från landet...
@nders: jag försöker indentera, menmisslyckad tydlige...
Tycker det är svårt med indentering...

Medlem sedan sep. 2004201 inlägg
#89

Vet inte om detta du menade (försökt indentera)

Do While Not rsBokad.EOF

If Left(rsBokad("aktivitet"), 3) = "Trä"  then
	        Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
	 	    Response.Write ", kl " & FormatDateTime(rsBokad("startTid"), 4) & " - "
	 	    Response.Write FormatDateTime(rsBokad("endTid"), 4) & " , " & rsBokad("lokal")
	    ElseIf Left(rsBokad("aktivitet"), 2) = "Ma" Then
		            Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		            Response.Write " mot  " & rsBokad("Mot")
		            Response.Write " i " & rsBokad("lokal") & ", kl " 
		            Response.Write  FormatDateTime(rsBokad("startTid"), 4) 
		         
End If
If Right(rsBokad("aktivitet"), 3) = "Cup" Then
	              dStartDate = Cdate(rsBokad("startDatum"))
	              dEndDate = Cdate(rsBokad("endDatum"))
		                For dTempDate = dStartDate to dEndDate
		                 Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		                 Response.Write ", i " & rsBokad("lokal")
						 Next
		   		   ElseIf Right(rsBokad("aktivitet"), 3) = "Cam" Then
	                     dStartDate = Cdate(rsBokad("startDatum"))
	                     dEndDate = Cdate(rsBokad("endDatum"))
		                   For dTempDate = dStartDate to dEndDate
		                       Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		                       Response.Write ", i " & rsBokad("lokal")
                       Next
Else
	      Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		  Response.Write ", i " & rsBokad("lokal")
End if
	rsBokad.MoveNext
Loop
    rsBokad.Close

Men det blir konstigt

  1. träningen skrivs två gånger - men andra gången utan tid
  2. matchen skrivs två gånger - andra gången utan skriva ut motståndare
  3. Eken Cup slrivs ut 5 ggånger (som det skall) ... men i samma cell och inte cellen under varandra, som det är tänkt...
Medlem sedan sep. 2004201 inlägg
#90

Orsaken till #1 och #2 verkar att efter att kollat If och ElseIf satserna, så skrivs Else ut även om If eller ElseIf uppfylls...

Medlem sedan juni 200032 967 inlägg
#91

Om jag inte tolkar allt helt fel så borde väl:

End If
If Right(rsBokad("aktivitet"), 3) = "Cup" Then

vara:

ElseIf Right(rsBokad("aktivitet"), 3) = "Cup" Then
Medlem sedan sep. 2004201 inlägg
#92

men då @nders, har jag nog tolkat dig fel...
I inlägget fattade jag som att det var fel att börja med ElseIF :q

Medlem sedan juni 200032 967 inlägg
#93

Jo, men här har du ju en if-sats överst? Om du ändrar till ElseIf där jag föreslår så skulle ju hela if-satsblocket se ut så här (start med if-sats alltså):

If Left(rsBokad("aktivitet"), 3) = "Trä"  then
...
ElseIf Left(rsBokad("aktivitet"), 2) = "Ma" Then
...
ElseIf Right(rsBokad("aktivitet"), 3) = "Cup" Then
...
ElseIf Right(rsBokad("aktivitet"), 3) = "Cam" Then
...
Else
...
End if
Medlem sedan sep. 2004201 inlägg
#94

då förstår jag....
För att återkomma till indentering.. är det så här du menar?

If Left(rsBokad("aktivitet"), 3) = "Trä"  then
         ...
               ElseIf Left(rsBokad("aktivitet"), 2) = "Ma" Then
                          ...
                         ElseIf Right(rsBokad("aktivitet"), 3) = "Cup" Then
                                   ...
                                   ElseIf Right(rsBokad("aktivitet"), 3) = "Cam" Then
                                               ...
Else
...
End if
Medlem sedan juni 200032 967 inlägg
#95

Nej, det jag menar är att man ska hålla ihop de olika blocken så man ser vad som tillhör vad. Ett till exempel:

[kod]If Left(rsBokad("aktivitet"), 3) = "Trä"  then
	Response.write "trä"
ElseIf Left(rsBokad("aktivitet"), 2) = "Ma" Then
	Response.write "ma"
	if ett = tva then
		Response.write "foo"
	end if
ElseIf Right(rsBokad("aktivitet"), 3) = "Cup" Then
	Response.write "cup"
ElseIf Right(rsBokad("aktivitet"), 3) = "Cam" Then
	Response.write "cam"
Else
	Response.write "annat"
End if
Medlem sedan sep. 2004201 inlägg
#96

Efter att fyllt i med div Next som Brinkster sa´till se koden ut så här

Do While Not rsBokad.EOF

If Left(rsBokad("aktivitet"), 3) = "Trä"  then
	    Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
	 	Response.Write ", kl " & FormatDateTime(rsBokad("startTid"), 4) & " - "
	 	Response.Write FormatDateTime(rsBokad("endTid"), 4) & " , " & rsBokad("lokal")
	ElseIf Left(rsBokad("aktivitet"), 2) = "Ma" Then
		Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		Response.Write " mot  " & rsBokad("Mot")
		Response.Write " i " & rsBokad("lokal") & ", kl " 
		Response.Write  FormatDateTime(rsBokad("startTid"), 4) 
    ElseIf Right(rsBokad("aktivitet"), 3) = "Cup" Then
	      dStartDate = Cdate(rsBokad("startDatum"))
	      dEndDate = Cdate(rsBokad("endDatum"))
		         For dTempDate = dStartDate to dEndDate
		              If cint(manad) = Month(dTempDate) AND iDag = Day(dTempDate) then
		                 Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		                 Response.Write ", i " & rsBokad("lokal")
		   	           End If
		Next
     ElseIf Right(rsBokad("aktivitet"), 3) = "Cam" Then
	       dStartDate = Cdate(rsBokad("startDatum"))
	       dEndDate = Cdate(rsBokad("endDatum"))
		           For dTempDate = dStartDate to dEndDate
				       If cint(manad) = Month(dTempDate) AND iDag = Day(dTempDate) then
		                   Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		                   Response.Write ", i " & rsBokad("lokal")
                       End If
		     Next
Else
	Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
	Response.Write ", i " & rsBokad("lokal")
	End if
	rsBokad.MoveNext
Loop

rsBokad.Close

så blir det bara första dagen av Eken Cup utskrivet...

Medlem sedan juni 200032 967 inlägg
#97

Efteratt återigen ha indenterat din kod så ser man lätt att det saknas en next i din else-sats:

Do While Not rsBokad.EOF
	If Left(rsBokad("aktivitet"), 3) = "Trä"  then
		Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		Response.Write ", kl " & FormatDateTime(rsBokad("startTid"), 4) & " - "
		Response.Write FormatDateTime(rsBokad("endTid"), 4) & " , " & rsBokad("lokal")
	ElseIf Left(rsBokad("aktivitet"), 2) = "Ma" Then
		Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		Response.Write " mot  " & rsBokad("Mot")
		Response.Write " i " & rsBokad("lokal") & ", kl " 
		Response.Write  FormatDateTime(rsBokad("startTid"), 4) 
	ElseIf Right(rsBokad("aktivitet"), 3) = "Cup" Then
		dStartDate = Cdate(rsBokad("startDatum"))
		dEndDate = Cdate(rsBokad("endDatum"))
		For dTempDate = dStartDate to dEndDate
			If cint(manad) = Month(dTempDate) AND iDag = Day(dTempDate) then
				Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
				Response.Write ", i " & rsBokad("lokal")
			End If
		Next
	ElseIf Right(rsBokad("aktivitet"), 3) = "Cam" Then
		dStartDate = Cdate(rsBokad("startDatum"))
		dEndDate = Cdate(rsBokad("endDatum"))
		For dTempDate = dStartDate to dEndDate
			If cint(manad) = Month(dTempDate) AND iDag = Day(dTempDate) then
				Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
				Response.Write ", i " & rsBokad("lokal")
			End If
		Next
	Else
		Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		Response.Write ", i " & rsBokad("lokal")
		dStartDate = Cdate(rsBokad("startDatum"))
		dEndDate = Cdate(rsBokad("endDatum"))	
		For dTempDate = dStartDate to dEndDate 	
			Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
			Response.Write " i "  	
			Response.Write rsBokad("lokal")
		[b]Next[/b]
	End if
	rsBokad.MoveNext
Loop

rsBokad.Close
Medlem sedan sep. 2004201 inlägg
#98

tyvärr @nders är det fel kod du ändrade.
Den rätta

Medlem sedan juni 200032 967 inlägg
#99

Hmm

Jag tyckte det var den koden jag ändrade?
Redigerade du medans jag skrev mitt inlägg?

Medlem sedan sep. 2004201 inlägg
#100

vet inte om jag redigerade,men faktum kvarstar ;)

Har provat med

If Left(rsBokad("aktivitet"), 3) = "Trä"  then
	    Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
	 	Response.Write ", kl " & FormatDateTime(rsBokad("startTid"), 4) & " - "
	 	Response.Write FormatDateTime(rsBokad("endTid"), 4) & " , " & rsBokad("lokal")
	ElseIf Left(rsBokad("aktivitet"), 2) = "Ma" Then
		Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		Response.Write " mot  " & rsBokad("Mot")
		Response.Write " i " & rsBokad("lokal") & ", kl " 
		Response.Write  FormatDateTime(rsBokad("startTid"), 4) 
       ElseIf Right(rsBokad("aktivitet"), 3) = "Cup" Then
	      dStartDate = Cdate(rsBokad("startDatum"))
	      dEndDate = Cdate(rsBokad("endDatum"))
		         For dTempDate = dStartDate to dEndDate
		            [B]Do While NOT dTempDate = dEndDate[/B]
					  If cint(manad) = Month(dTempDate) AND iDag = Day(dTempDate) then
		                 Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		                 Response.Write ", i " & rsBokad("lokal")
		   	           End If
		
     ElseIf Right(rsBokad("aktivitet"), 3) = "Cam" Then
	       dStartDate = Cdate(rsBokad("startDatum"))
	       dEndDate = Cdate(rsBokad("endDatum"))
		           For dTempDate = dStartDate to dEndDate
				      [B]Do While NOT dTempDate = dEndDate[/B]
				       If cint(manad) = Month(dTempDate) AND iDag = Day(dTempDate) then
		                   Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
		                   Response.Write ", i " & rsBokad("lokal")
                       End If
		    
Else
	Response.Write "</FONT></B></TD><TD CLASS=""tdcal""  VALIGN=""BOTTOM"">" & rsBokad("aktivitet")
	Response.Write ", i " & rsBokad("lokal")
	End if
	rsBokad.MoveNext
Loop

rsBokad.Close

Microsoft VBScript compilation error '800a03fb'

Expected 'Loop'

/ovaasp/skrivbordskalender116.asp, line 310

ElseIf Right(rsBokad("aktivitet"), 3) = "Cam" Then
^

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