webForumDet fria alternativet

function

12 svar · 286 visningar · startad av gucken

guckenMedlem sedan sep. 2001287 inlägg
#1
function antal_lag(div)
	sql = "SELECT Anv_id FROM Users Where div = "& div &""
	set rs=databas.execute (sql)
	do while rs.eof <> true
		x = x +1
		rs.movenext
		
	if x = 40 then
		antal_lag = true
		else
		antal_lag = false
	end if
end function

I felmeddelandet står det att den förväntar en program satts på
raden med end function.
vad menar den med det? från vad jag ser så ska allt vara rätt,
jag har skrivit ut variabeln div och jag vet att den är 15 som den ska vara.

solbulleMedlem sedan mars 20015 287 inlägg
#2

Ska det inte vara en: loop innan du avslutar funktionen?

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#3

Använder du den koden för o kolla om det är 40 st poster i databasen?

Felet är egentligen att du måste ha Loop med, men jag ser hela funktionen som ett stort fel...

emissionMedlem sedan dec. 19996 721 inlägg
#4

du har glömt loop efter do while-loopen.

Dessutom är det en ineffektiv funktion

function antal_lag(div)
    sql = "SELECT COUNT(Anv_id) FROM Users Where div = "& div &" HAVING COUNT(Anv_id)=40"
    set rs=databas.execute (sql)
    antal_lag = (NOT rs.EOF)
end function

Förutsatt att din DBMS klarar HAVING. COUNT ska du använda i vilket fall som helst.

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#5

Vad är having till för?

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Det saknas en loop som avslutar do while i din kod.

function antal_lag(div)
    sql = "SELECT Anv_id FROM Users Where div = "& div &""
    set rs=databas.execute (sql)
    do while rs.eof <> true
        x = x +1
        rs.movenext
    loop
    if x = 40 then
        antal_lag = true
        else
        antal_lag = false
    end if
end function

Det är ineffektivt att koda på det sättet som du har gjort. Det är bättre att lägga så mycket av beräkningarna som möjligt direkt i sql-koden.

function antal_lag(div)
    sql = "SELECT count(Anv_id)  FROM Users Where div = "& div 
    set rs=databas.execute (sql)
    antal_lag = cint(rs(0)) = 40
end function

Skall funktionen bli sann om det är exakt 40 lag eller om det är minst 40 lag?

guckenMedlem sedan sep. 2001287 inlägg
#7

tack, det löste hela biffen, var ett tag sedan jag lekte med det här så hadde vist glömt lite..

solbulleMedlem sedan mars 20015 287 inlägg
#8

Schysst svarsfrekvens. ;)

LarsGMedlem sedan dec. 200012 464 inlägg
#9

Vad är having till för?

Having behövs egentligen inte, det går alltid att skriva om

SELECT antal FROM (select count(anv_id) as antal from Users Where div = 4711) where antal = 40

I having så kan du använda aggregatfunktioner vilket inte är tillåtet i where.

Having används oftast i samband med group by för att begränsa urvalet av grupper, t.ex.

select sum(amount),guest from bill natural join guests
group by guest having sum(amount) > 1000

för att få fram alla gäster som har räkningar med ett belopp på mer än 1000.

Egentligen så behövs inte group by heller utan det går också att skriva om. (Lämnas som uppgift till läsaren.)

guckenMedlem sedan sep. 2001287 inlägg
#10

Kompileringsfel i Microsoft VBScript (0x800A0400)
Programsats förväntas.
på raden med end function.
jag blir galen, vad menar han?? vad vill han igentligen av mig?

function Lag2(lag1,div)
	'nu ska den hämta ett motståndarlag.
	sql = "SELECT nick FROM User WHERE div = "&div&" ORDER BY Anv_id"
	set rs=databas.execute (sql)
	do while not rs.eof
		lag2 = rs.fields("nick")
		if lag2 = lag1 then rs.movenext
		sql = "SELECT * FROM DivMatch WHERE DivDiv = "&div&" AND DivLag1 = '"&lag1&"' AND DivLag2 = '"&lag2&"'"
		set rec=databas.execute (sql)
		if not rec.eof then
			rs.movenext
		else
		end if
end function
LarsGMedlem sedan dec. 200012 464 inlägg
#11

det saknas en avslutande loop till din do while

function Lag2(lag1,div)
    'nu ska den hämta ett motståndarlag.
    sql = "SELECT nick FROM User WHERE div = "&div&" ORDER BY Anv_id"
    set rs=databas.execute (sql)
    do while not rs.eof
        lag2 = rs.fields("nick")
        if lag2 = lag1 then rs.movenext
        sql = "SELECT * FROM DivMatch WHERE DivDiv = "&div&" AND DivLag1 = '"&lag1&"' AND DivLag2 = '"&lag2&"'"
        set rec=databas.execute (sql)
        if not rec.eof then
            rs.movenext
        end if
     loop
end function
guckenMedlem sedan sep. 2001287 inlägg
#12

tack.
tror du att du har lust att hjälpa mig med en liten sak privat?
jag vill inte skriva det här i forumet.

LarsGMedlem sedan dec. 200012 464 inlägg
#13

Du får väl skicka ett privat meddelande så får vi se vad det är.

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