Problemlösardags!
Har en tabell (Usertbl) med bla. kolumnen Userid.
Sen har jag en annan tabell (Relationtbl) med två kolumner,
Userid och Menuid, samt en relation mellan de två tabellerna
genom Userid, inget konstigt med detta alltså!
Nu vill jag jämföra Menuid i Relationtbl mellan två användare och
sedan få ett eof om de är identiska, hur skriver jag?
hmm, har inte testat men blir det inte fel?
om användare 1 har menuid 1 och 2 samt
att användare 2 har menuid 1,2 och 3.
då får jag väl ett eof då också, eller?
SELECT Menuid FROM Relationtbl
WHERE Menuid NOT IN
(SELECT Menuid FROM Relationtbl WHERE Userid = 2)
AND Userid = 1
GROUP BY Menuid
HAVING Count(*) = (SELECT Count(*) FROM Relationtbl Userid = 2)
Nu är jag inget vidare på det här med group by, men du kan ju testa och se om det fungerar
Det hade varot lättare om SQL server hade haft stöd för except eller minus.
select distinct 1 from relationtbl r1
where (select count(*)
from relationtbl r1, relationtbl r2
where r1.userid = 1 and r2.userid = 2
and r1.menuid = r2.menuid) =
(select count(*) from relationtbl
where userid = 1)
and (select count(*) from relationtbl
where userid = 1) =
(select count(*) from relationtbl
where userid = 2)
jag får inte någon av era koder att fungera.
själv är jag inne på denna, jag tycker att den borde funka, eller?
if (select count(menuid) from Relationtbl where Userid = 1) =
(select count(menuid) from Relationtbl where Userid = 2)
SELECT menuid from Relationtbl Where Userid = 1
And Menuid Not In
(SELECT menuid from Relationtbl Where Userid = 2)
men när jag sedan kör koden får jag:
Operation is not allowed when the object is closed.
[b]if rs.eof then[/b]
response.write "ok"
else
response.write "tok"
end if
set rs = nothing
varför får jag denna felkod?
jag provade också att sätta en if-tagg på om rs är ett objekt och det är det.
jo då, jag kör sql-frågan, som jag skrev, rs är ett objekt!
kan det vara nått med if-taggen i sql-strängen?
om inte första delen i strängen är lika så körs ju inte den undre delen.
jo då, jag kör sql-frågan, som jag skrev, rs är ett objekt!
Det är inte samma sak. Eftersom man ofta skapar recordset med set objRS = Server.CreateObject("ADODB.RecordSet") så är det inte ovanligt att man har recordsetobjekt som skapade och giltiga, men som inte har öppnats, därav min fråga.
doggelito skrev:
kan det vara nått med if-taggen i sql-strängen?
Det har jag svårt att tänka mig. Fungerar asp-koden och din EOF-kontroll om du bara byter ut SQL-frågan till något elementärt?
doggelito skrev:
om inte första delen i strängen är lika så körs ju inte den undre delen.
Sant. Du kan ju prova att lägga till en else-sats i SQL-frågan också, så en SELECT alltid utförs.
Har du möjlighet att köra frågan i något annat verktyg, exempelvis Enterprise Manager?
(Jag vet alltså inte om den fråga du skrev i ditt tidigare inlägg är helt korrekt, men det borde kunna fungera.)
tror jag hittade den fiffigaste koden! (om den nu är korrekt och om ingen skriver en smidigare förståss!)
if exists(
SELECT menuid from Relationtbl Where Userid = 1
And Menuid Not In
(SELECT menuid from Relationtbl Where Userid = 2))
select 1
else
if exists(
SELECT menuid from Relationtbl Where Userid = 2
And Menuid Not In
(SELECT menuid from Relationtbl Where Userid = 1))
select 1
else
select 0
dock problem kvarstår:
i query analyzer stämmer svaren jag får men skriver jag response.write(rs(0)) på asp-sidan får jag alltid 1 tillbaka, vad kan detta bero på då? kan man inte använda rs(0) med denna sql-sträng?
help please!
varför får jag bara ut 1 som värde på asp-sidan, inga ideér?
kan man skriva om sql-strängen så man verkligen får 1 eller 0 som resultat, om nu inte ovan är korrekt?