webForumDet fria alternativet

Msg beroende på om poster finns?

5 svar · 172 visningar · startad av CokeLight

CokeLightMedlem sedan juni 2000504 inlägg
#1

Hejsan allihopa :)

Jag har en vanlig SQL-select (mot Access 2000). Nu vill jag göra en sak om WHERE-villkoret uppfylls (dvs poster loopas fram) och en annan om inga poster hittas.

Provade lite olika:

if rs.eof then

hjälper ju inte eftersom SELECTEN blir ju EOF hur som helst.

sen tänkte jag att om count(*)=0 så får jag ju det jag vill, men istället får jag felmeddelande:

SELECT COUNT(*), kol1, kol2 FROM tblX WHERE.. ORDER BY etc

Felmsg:
You tried to execute a query that does not include the specified expression 'kol1' as part of an aggregate function

Om jag tar bort "kol1" så klagar den på "kol2" osv. Varför då? :)

Ännu bättre nästan om nån dessutom vet om det finns något SQL-nyckelord för att kolla om poster finns?

Har för mig att när jag körde stored proc. gick det bra att sätta en flagga som returnerade true/false t.ex men jag vet inte hur man gör det med Access queries. Förslag...? :)

------------------
"Between stimulus and response is a pause wherein our ability to choose lies".

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Jag förstår inte vad du menar när du säger att rs.eof inte fungerar?


sql = "select * from ogrish where aleb > 12"
set rs = connect.execute(sql)

if rs.eof then
'inga poster
else
while not rs.eof 
'hantera data
rs.movenext
wend
end if

skulle jag skriva.

------------------
essentitia preter non sans multiplicandum

LarsGMedlem sedan dec. 200012 464 inlägg
#3

Att du får fel när du lägger count(*) beror på att man inte kan blanda aggregatfunktioner (sum,max etc) med kolumneferenser om man inte har en group by.

------------------
essentitia preter non sans multiplicandum

CokeLightMedlem sedan juni 2000504 inlägg
#4

ehm, jo, det stämmer faktiskt.. jag hade ju en sån konstruktion redan kom jag på, men fick för mig att skriva en ny IF rs.eof någon annanstans.. bland HTML:n (i onödan) tackar ! :)

Jaha ja... hmm.. ang. count, om man inte kan blanda kol.ref/aggregate func. får man köra separata SQL-satser då, eller..? En där man plockar ut data, o en som man har för att räkna poster..?

Tack för hjälpen igen :)

------------------
"Between stimulus and response is a pause wherein our ability to choose lies".

LarsGMedlem sedan dec. 200012 464 inlägg
#5

Njae, du behöver inte skriva två satser. Ett alternativ är att skriva


select aleb,caleb,(select count(*) from ogrish where aleb > 12) as antal from ogrish where aleb > 12

och då får man ut antalet värden med rs("antal") om det finns några poster.

Man kan också använda metoden getrows

set rs = connect.execute(sql)
if not rs.eof then
arr = rs.getrows()
antal = ubound(arr) + 1
for i = 0 to ubound(arr,2)
'presentera data från arr
next

getrows returnerar en två-dimensionell array med allt data. Det är effektivare att använda, då man gör färre anrop till databashanteraren.

Det här har diskuterats ganska mycket i ASP-forumet, så om du gör en sökning där så ´hittar du fler exempel.

------------------
essentitia preter non sans multiplicandum

CokeLightMedlem sedan juni 2000504 inlägg
#6

Aha, på det viset.. intressant.. jo, getRows har jag sett inlägg om men inte provat..

Tackar, då ska jag läsa o experimentera lite :)

------------------
"Between stimulus and response is a pause wherein our ability to choose lies".

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