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.
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.
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.
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
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
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?
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.
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