webForumDet fria alternativet

undantag inträffade

ASP

14 svar · 357 visningar · startad av gucken

Medlem sedan sep. 2001287 inlägg
Frågan#1
function hamta_tva(mota,lag_ett,div)
	sql = "SELECT Nick, SenasteLag FROM User WHERE div = "& div &" ORDER BY Anv_id asc"
	set rs=databas.execute (sql)
	do while not rs.eof
		if rs.fields("nick") = mota then
			rs.movenext
			if rs.eof then
				set recset=databas.execute (sql)
					if recset.fields("nick") = lag_ett then
						recset.movenext
						hamta_tva = recset.fields("nick")
					else
						hamta_tva = recset.fields("nick")
					end if
			else
				'om det inte är slut på tabellen
				if rs.fields("nick") = lag_Ett then
					rs.movenxt
					hamta_tva = rs.fields("nick")
				else
					hamta_tva = rs.fields("nick")
				end if
			end if
		else
		end if
		rs.movenext
	loop
end function

undantaget inträffade på rad 5
if rs.fields("nick") = mota then
vad är det för kryptiskt meddelande han försöker tala om för mig?
som jag ser det så finns inget undantag.

Medlem sedan nov. 20017 144 inlägg
#2

Skall det inte vara:

if rs.fields("nick") = 'mota'

MVH Jesper T

Medlem sedan sep. 2001287 inlägg
#3

nej den ser det juh som en komentar då.

Medlem sedan dec. 19996 721 inlägg
#4

Vad ska funktionen göra? Det ser ut som ett typexempel på en funktion som man kan lösa direkt i SQL-satsen.

Medlem sedan sep. 2001287 inlägg
#5

den ska helt enkelt hämta SenasteLag och sedan hämta laget som kommer efter det som har samma div.
om det då blir samma lag som lag_ett så ska den ta nästa.

Medlem sedan dec. 19996 721 inlägg
#6

Jag hänger inte riktigt med. Kan du ge ett exempel, med tabellstruktur etc.?

Felet beror på att du försöker hämta ett värde från recordsetet trots att EOF har nåtts.

Medlem sedan sep. 2001287 inlägg
#7

tabellen.
id räknare
nick text
senastelag text
div integer

värde till mota skickas med. som är ett nick ex. kalle
sedan ska den kolla efter kalle i nick.
när den hittar kalle ska den gå ett steg till och spara nästa nick med samma nummer i div.

Medlem sedan dec. 19996 721 inlägg
#8

Och vad innehåller senastelag-kolumnen? Du använder inte den i din kod..

Medlem sedan sep. 2001287 inlägg
#9

den inehåller ett nick.. glömde säga att innehållet i mota är senasteLag

Medlem sedan dec. 19996 721 inlägg
#10

Jag är fortfarande lite lost, men följande kanske kan ge idéer i alla fall

function hamta_tva(mota,lag_ett,div)
   sql="SELECT TOP 1 U2.Nick FROM User U1, User U2 WHERE U1.div = "& div &" AND U1.div=U2.div AND U1.Anv_id<U2.Anv_id AND U1.nick='" & mota & "' AND U2.nick<>'" & lag_ett & "' ORDER BY U1.Anv_id"
   set rs=databas.execute (sql)
   if not rs.eof then hamta_tva=rs("Nick")
   rs.close
   set rs=Nothing
end function
Medlem sedan sep. 2001287 inlägg
#11

jag fattade inte alls många % av den sql sattsen.

går det inte att lösa lite mer på mitt sätt? =)

Medlem sedan dec. 19996 721 inlägg
#12

Jodå, men om tabellen blir lång så kommer det att bli en väldigt ineffektiv och långsam metod.

Kör på på samma sätt som förut, men tänk på att aldrig hämta ett värde från recordsetet direkt efter movenext, utan att kolla EOF först. Den andra databas.execute är lite konstig, eftersom den alltid kommer att returnera Nick från rad ett eller två i tabellen.

Den SQL-sats jag visade hämtar det första Nick som kommer efter Nick=Mota där Nick inte är lag_ett

Medlem sedan sep. 2001287 inlägg
#13

wow, du gjorde alltså allt det med en sql fråga.. vad menas med u1.fält? är det outer join det? och hur fungerar det som?.
eller rättare sagt, var kan man läsa om sådana avancerade sql grejjer på ett begripligt sätt?

Medlem sedan mars 20007 896 inlägg
#14

U1.fält pekar helt enkeöt ut vilket fält som ska hämtas, där U1 är tabellnamnet. emission hade satt ett alias på dina tabeller, vilket inte är ett måste, men det underlättar oftast.

...FROM User U1, User U2...

I "vanliga" fall skriver man ju som säkert bekant:
FROM User. Sätter man någonting efter tabellnamnet så blir det ett alias för tabellen, så att man kommer åt den med det.

För att kunna göra allting till en fråga, skapade emission två tabeller utifrån samma tabell - för att kunna jämföra värden i den. Det är ett måste om man vill jämföra olika rader med varandra, och man är då tvungen att skapa två olika alias för samma tabell - för att komma åt de olika raderna. Om du hänger med på min hyfsat flummiga förklaring. :)

Det här hade alltså inte funkat på samma sätt:

SELECT User.Nick 
FROM User
WHERE User.div = User.div
AND User.Anv_id < User.Anv_id

Som det här:

SELECT U1.Nick
FROM User AS U1, User AS U2
WHERE U1.div = U2.div
AND U1.Anv_id < U2.Anv_id

I första frågan hämtas ingenting, då tabellen jämför med sig själv hela tiden. Uttrycket User.Anv_id < User.Anv_id kommer ju aldrig att vara sant, då User.Anv_id ALLTID är lika med sig själv.
Så är inte fallet i andra frågan, då det existerar två temporära tabeller där man kan jämföra mellan fler rader.

Ingen outer join, med andra ord. :)

Medlem sedan sep. 2001287 inlägg
#15

Emission jo det är meningen att den andra ska göra det. bara rad 1 eller rad 2.
men hur som helst så har jag inte kommit förbi problemet än.
jag kollar om eof är sann på raden innan, men den gnäller iaf över undantagsfel. uppenbarligen så är eof falskt och den ska göra det den blir tillsagd.
jag blir galen av att inte få till detta, har hållt på med det alldeles för många dagar nu. (tror jag har blivit tunhårigare med)

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)