webForumDet fria alternativet

Object not a collection

7 svar · 312 visningar · startad av per-v

per-vMedlem sedan maj 200161 inlägg
#1

Hej!

Har sökt på lite olika saker här på webforum för att kanske finna en lösning, men det gör jag inte, så jag ställer en fråga.

Jag tänkte använda mig av Paces förslag på validering av ett formulär. Dock så går det inte så bra...

Det där med arrayer och liknande har jag inte den blekaste om, så någon gång måste ju vara den första.

Hur som helst så ser min kod ut som nedan.

objTimecardDays = Request.Form("days")

If objTimecardDays = 1 Then
	arrRequiredFields = Array("date1", "hours1")
	arrRequiredFieldsErrors = Array("Datum för dag 1 saknas", "Antal timmar för dag 1 saknas")
ElseIf objTimecardDays = 1 Then
	arrRequiredFields = Array("date1", "hours1", "date2", "hours2")
	arrRequiredFieldsErrors = Array("Datum för dag 1 saknas", "Antal timmar för dag 1 saknas", "Datum för dag 2 saknas", "Antal timmar för dag 2 saknas")
End If

intIndex = 0
strErrorMessages = ""

For Each Var In arrRequiredFields
	If Len(Request.Form(Request.Form(Var))) < 1 Then
		strErrorMessages = strErrorMessages & "	<li>" & arrRequiredFieldsErrors(intIndex) & "</li>" & VbCrlf
	End If
	intIndex = intIndex + 1
Next

När jag kör ovanstående kod så får jag följande felmeddelande.

Microsoft VBScript runtime error '800a01c3' 

Object not a collection 

/timmar/db.asp, line 67

På linje 67 har jag följande.

For Each Var In arrRequiredFields

Så jag antar att det har något med "Var" att göra.

Hur som helst så är jag dyngsur av regnet som precis öste ner på mig på jobbet och helt slut i huvudet, så jag behöver hjälp ;).

Tack på förhand!

GuffaMedlem sedan juni 2004533 inlägg
#2

Är arrRequiredFields en array? Ifall objTimecardDays har något annat värde än ett så kommer det ju inte att skapas några arrayer.

Jesper TMedlem sedan nov. 20017 144 inlägg
#3

Du kan kolla med isarray() först.

If isarray(arrRequiredFields) then
     For Each Var In arrRequiredFields
     ...
     Next
End if
per-vMedlem sedan maj 200161 inlägg
#4

Guffa skrev:

Är arrRequiredFields en array? Ifall objTimecardDays har något annat värde än ett så kommer det ju inte att skapas några arrayer.

objTimecardDays är ett värde som kommer från en select i ett formulär, och där är värdet ... upps, nu såg jag ett fel direkt. Jag har ju satt värdet "1" i alla "Else If". Det ska vi nog ändra på. Men för att svara på din fråga så har objTimecardDays ett värde mellan 1-2 i selecten.

Ska prova med Jesper Ts variant nu...

per-vMedlem sedan maj 200161 inlägg
#5

Jesper T skrev:

Du kan kolla med isarray() först.

If isarray(arrRequiredFields) then
     For Each Var In arrRequiredFields
     ...
     Next
End if

Det var ingen array, så nu har jag sökt här och lagt in

dim arrRequiredFields(10)
dim arrRequiredFieldsErrors(10)

.

Nu får jag dock ett nytt felmeddelande.

Microsoft VBScript runtime error '800a000d' 

Type mismatch 

/timmar/db.asp, line 49

Rad 49.

arrRequiredFields = Array("date1", "hours1")

Nej, jag ska nog hålla mig till att snickra...

GuffaMedlem sedan juni 2004533 inlägg
#6

Ifall objTimecardDays kommer ifrån formulärdatat så kommer det aldrig att ha värdet ett eller två, såvida du inte konverterat värdet till ett tal. Request.Form returnerar alltid en sträng (eller en IStringList för att vara exakt). Värdet kommer alltså att vara en sträng; "1" eller "2".

Ifall du jämför en sträng med ett tal så kommer det inte att fungera. "1" är inte lika med 1.

per-vMedlem sedan maj 200161 inlägg
#7

Guffa skrev:

Ifall du jämför en sträng med ett tal så kommer det inte att fungera. "1" är inte lika med 1.

Hej igen...

Nu har jag satt en cInt runt mitt objTimecardDays.

objTimecardDays = cInt(Request.Form("days"))

Forfarande samma fel tyvärr.

Tack för att du tar dig tid!

GuffaMedlem sedan juni 2004533 inlägg
#8

Använd CLng istället för CInt. Det gör visserligen ingen skillnad i det här fallet, men det finns mycket sällan någon anledning att använda integer istället för long.

Lägg en Else i If-satsen där du skriver ut ett felmeddelande, så att du ser att något av alternativen verkligen används.

Eftersom du ändå behöver en räknare, varför inte använda den i For-loopen?

For intIndex = 0 to UBound(arrRequiredFields)
   Var = arrRequiredFields(intIndex)
   ...
Next

Jag ser att du använder Request.Form(Request.Form(Var)). Har du verkligen formulärfält som innehåller namnen på andra formulärfält?

131 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)