webForumDet fria alternativet

funktion i SQL sats

10 svar · 358 visningar · startad av Calevan

CalevanMedlem sedan maj 20031 173 inlägg
#1

Hej!

Just nu ser min kod ut så här (den fungerar). Jag väljer ut alla poster i databasen som har rätt värde på "ar" och sen kollar jag med hjälp av en funktion som heter behorighet ifall den aktuella kategorin får visas. Men jag skulle vilja baka in kollen om den får visas redan när jag skapar recordsettet eftersom jag får ett onödigt stort recordsett och eftersom jag vill visa texten "Inga kategorier finns för detta år" om det inte finns några kategorier som användaren ska få se.

[I]connectar[/I] 
SQL = "SELECT * FROM kategori WHERE ar=" & ar & " ORDER BY katalog ASC"
RecSet.Open SQL, Connect, 3, 3
  IF RecSet.EOF THEN
    Response.Write "Inga kategorier finns för detta år"
  ELSE
    IF behorighet(Session("UserId"),behorig) = "TRUE" THEN
     [I]visar kategorin[/I] 
  END IF
[I]disconnectar[/I]

Någon som förstår vad jag menar och som kanske har något förslag?

Tack!

agneta_rungMedlem sedan juli 2002145 inlägg
#2

Vad gör funktionen behorighet? Gör den också en slagning mot databasen kanske? I så fall borde det gå att baka ihop den SQL-frågan med den andra och få upp enbart de poster användaren är behörig till mha en fråga...

CalevanMedlem sedan maj 20031 173 inlägg
#3

nix, bara kollar vad man loggat in som och vad kategorin har för behörighet. "behorig" kommer altså från den första SQL satsen.

@ndersMedlem sedan juni 200032 969 inlägg
#4

Visa funktionen.

CalevanMedlem sedan maj 20031 173 inlägg
#5

Har inte testat detta, men det borde funka. Här ser ni tydligt vad det är jag vill göra, fast jag undrar om man kan göra det med en SQL sats.

[I]connectar[/I]
SQL = "SELECT * FROM kategori WHERE ar=" & ar & " ORDER BY katalog ASC"
RecSet.Open SQL, Connect, 3, 3

DO UNTIL RecSet.EOF

behorig = RecSet("behorighet")

IF NOT behorighet(Session("UserId"),behorig) = "TRUE" THEN
 
RecSet.Delete
RecSet.Update
END IF

RecSet.MoveNext

LOOP

IF RecSet.EOF THEN
   Response.Write "Inga kategorier finns för detta år"
ELSE
[I]visar kategorier[/I]

END IF

funktionen "behorighet ser ut så här:

Function behorighet(UserID,behorig)

	IF UserID = "hej" OR UserID = behorig THEN
		behorighet="TRUE"
		Exit Function
	ELSE
		behorighet="FALSE"
	END IF

End Function
agneta_rungMedlem sedan juli 2002145 inlägg
#6

Ok, då skulle man kunna göra nåt sånt här. Kolla först vad användarid har för värde. Är det "hej" kör du den SQL-fråga du gör redan idag, annars bakar du in villkoret för behorig i frågan och kör den. Funktionen behorighet utgår...

connectar

anvandarid = Session("UserId")

IF anvandarid = "hej" THEN
  SQL = "SELECT * FROM kategori WHERE ar=" & ar & " ORDER BY katalog ASC"
ELSE
  SQL = "SELECT * FROM kategori WHERE ar=" & ar & " AND behorighet = " & anvandarid & " ORDER BY katalog ASC"
END IF

RecSet.Open SQL, Connect, 3, 3

IF RecSet.EOF THEN
   Response.Write "Inga kategorier finns för detta år"
ELSE
visar kategorier

END IF
CalevanMedlem sedan maj 20031 173 inlägg
#7

bra idé att försöka vända på det, ska fundera lite på det. Problemet med modellen du beskrev är att funktionen begorighet ska byggas ut så att flera vilkor kan fungera. det kan tex vara lika med "hej", "banan" eller 10 andra saker. Så går det att baka in en funktion i SQL frågan? annars får jag tänka om lite, och göra någon variant av det du föreslog Agneta!

agneta_rungMedlem sedan juli 2002145 inlägg
#8

Du menar alltså att ett antal användare, exv "banan" och "hej" ska ha behörighet att se alla kategorier medan andra bara ska få se "sina egna" kategorier, dvs där deras eget användarId står i kolumnen behorighet?

I så fall kan du ju göra en funktion behorighet som du anropar i IF-satsen. Så här:

connectar

anvandarid = Session("UserId")

IF behorighet(anvandarid) THEN
  SQL = "SELECT * FROM kategori WHERE ar=" & ar & " ORDER BY katalog ASC"
ELSE
  SQL = "SELECT * FROM kategori WHERE ar=" & ar & " AND behorighet = " & anvandarid & " ORDER BY katalog ASC"
END IF

RecSet.Open SQL, Connect, 3, 3

IF RecSet.EOF THEN
   Response.Write "Inga kategorier finns för detta år"
ELSE
visar kategorier

END IF

Funktionen behorighet skulle se ut så här. Den byggs ut med en OR för varje UserID med fullständig behörighet.

Function behorighet(UserID)
  behorighet = UserID = "hej" OR UserId = "banan" OR UserID = "VadSomHelst"
End Function
CalevanMedlem sedan maj 20031 173 inlägg
#9

ah!! tack! Detta ska jag testa så fort jag får tillfälle (till helgen) återkommer med resultatet här. tack!

CalevanMedlem sedan maj 20031 173 inlägg
#10

problemet är ju att funktionen behorighet behöver både Session("UserId") och det värdet som hamnar i RecSet(behorig) som indata, så att göra en sådan if sats som du har gjort innan SQL satserna fungerar ju inte.

agneta_rungMedlem sedan juli 2002145 inlägg
#11

Används funktionen behorighet till något annat också kanske? Min tanke var att du skulle skriva om den så att den bara tar Session("UserId") som inparameter... Hänsyn till vad som står i databaskolumnen behorig tas ju i SQL-frågan som vi skrivit i ELSE-grenen (Eller heter kolumnen behorighet? Du har skrivit olika i olika inlägg.)

För att uppnå den funktionalitet jag uppfattar att du beskriver kan du antingen göra en funktion som kollar om påloggad användare är behörig att se alla kategorier eller också lägga den kontrollen direkt i IF:en så här (det är ju bara att lägga till en OR för varje användare som ska ha full behörighet):

connectar

anvandarid = Session("UserId")

IF anvandarid = "hej" OR anvandarid = "banan" OR anvandarid = "NåtAnnat" THEN
  SQL = "SELECT * FROM kategori WHERE ar=" & ar & " ORDER BY katalog ASC"
ELSE
  SQL = "SELECT * FROM kategori WHERE ar=" & ar & " AND behorighet = " & anvandarid & " ORDER BY katalog ASC"
END IF

RecSet.Open SQL, Connect, 3, 3

IF RecSet.EOF THEN
   Response.Write "Inga kategorier finns för detta år"
ELSE
visar kategorier

END IF

Om denna kod inte gör vad du vill så har jag nog inte förstått frågan :)

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