Kan du ikke vise noget mere kode, for du tildeler variablen product resultatet af cmd.execute, hvilket indikerer at du har en global variabel som hedder product...
Det virker i det hele taget meget ustruktureret. Du bør indkapsle hele funktionen at hente et arrangement, således der ikke er nogen afhængigheder af globale variable. Noget i stil med dette:
function Hentarrangement (AktivNr, conn)
dim cmd, rs
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandText = "SELECT id FROM dbo.tabel WHERE AktivNr = ?"
cmd.CommandType = 1
set rs = cmd.Execute(, array(AktivNr))
if not rs.eof then
Hentarrangement = rs("id")
else
Hentarrangement = 0
end if
rs.close
end function
Jeg antager at du kun finder et arrangement pr. aktivnr, men ellers skal du gennemløbe resultatet og f.eks. opbygge et array med id'er som så kan returneres i stedet for et enkelt id. Funktionen tager i øvrigt også connection-objektet fra den kaldende kode.
På denne måde har du indkapslet funktionaliteten og du erklærer de variable der benyttes inde i funktionen og risikerer ikke at overskrive variable erklæret i det globale scope (hvilket jeg umiddelbart tror er kilden til dit problem).