webForumDet fria alternativet

Kan inte kolla om recset är tomt =(

ASP

21 svar · 451 visningar · startad av daniel_ra

Medlem sedan jan. 2002381 inlägg
Frågan#1

Har frågat detta förut och har använt mig av detta:

If recset.eof then

'recordset tomt
else
'recordset inte tomt
end if

men detta funkar inte om min tabell jag försöker hämta dada ifrån är tomt.. Jag har satt standardvärdena i tabellen till "" alltså tom sträng.. då kraschar allt. Sätter jag standardvärdet till 0 i dessa fält istället så tror den inte att recordsetet är tomt utan försöker gå vidare ändå.. Vad ska jag göra??

Medlem sedan jan. 2002381 inlägg
#2

Testade även det här men det funkar inte heller..


sql_max = "select max(produktkategori_ID) from produktkategori"

set maxRecSet = Server.CreateObject("ADODB.Recordset")
maxRecSet.open sql_max, connect
    	
if not maxRecSet.EOF  or not maxRecSet.BOF then
    		
response.write("Inte tom")
   		
else	
    		
response.write("Tom")

end if	
	
maxRecSet.Close

Den blir aldrig tom hur jag än gör.. Beror det på sql frågan att jag letar efter max?

Medlem sedan mars 20021 889 inlägg
#3

Skippa "not maxRecSet.BOF". I och med att scriptet börjar avläsa databasen från början så uppfylls ju alltid detta (beginning of file).

:)

Medlem sedan feb. 200112 078 inlägg
#4
"select max(produktkategori_ID)[b] as MaxAntal[/b] from produktkategori"

Kanske?

Medlem sedan jan. 2002381 inlägg
#5

funkar inte iallafall


sql_max = "select max(produktkategori_ID) as MaxAntal from produktkategori"

set maxRecSet = Server.CreateObject("ADODB.Recordset")
maxRecSet.open sql_max, connect
    	
if maxRecSet.EOF or maxRecSet.BOF then
    		
max_ID = 1
			
else	
    		
Do Until maxRecSet.EOF
max_ID = maxRecSet(0)
maxRecSet.MoveNext
Loop
max_ID = max_ID +1
	   			   		    
end if	
	
maxRecSet.Close

Även om jag bara anvånder if maxRecSet.EOF så verkar mitt
recordset aldrig vara tomt.. Eftersom det inte ligger någonting i tabellen så försöker den göra max_ID = max_ID +1, detta trots att
max_ID aldrig får ett värde, dvs det kraschar.. grr

Medlem sedan mars 20015 287 inlägg
#6

Om du testar att skriva:

max_ID = 1

Istället, vad får du ut för värde då på max_ID till slut?

Medlem sedan dec. 20003 887 inlägg
#7

kodsnutten

if maxRecSet.EOF or maxRecSet.BOF then

är redundant för dig, eftersom du gör en SELECT. End-Of-File räcker alldeles utmärkt. Det du har efter

Do Until maxRecSet.EOF
  max_ID = maxRecSet(0)
  maxRecSet.MoveNext
Loop

förstår jag inte vad det ska vara bra för. Ge tusan i defaultvärden. Dom ställer bara till med bekymmer ;)

sql_max = "SELECT (Max(produktkategori_ID) + 1) AS nNewValue FROM produktkategori"

maxRecSet.Open sql_max, connect

If maxRecSet.EOF Then
  [blue]'Ingen post... maxID = 1 ?[/blue]
Else
  maxID = maxRecSet("nNewValue")
End If

Det kan tänkas att jag inte förstog ditt problem, men jag antar att det är något sånt här du är ute efter.

Medlem sedan jan. 2002381 inlägg
#8

okay, jag förstår att jag kanske krånglat till det lite för mig.. Använder mig av det du skrev här innan, Mitt problem fortfarande är dock att

if maxRecSet.EOF then

aldrig blir sant. Trots att min tabell är tom och den inte borde ha nåt värde försöker den tilldela max_ID med någonting.. Förstår inte varför. Nu har jag i access inte satt något standardvärde alls. Jag antar att detta värde är NULL eller "" vet verkligen inte vad jag skall göra. Mitt max_ID får alltså inget värde då tabellen jag söker från är helt tom. Finns det en post och ett ID så går det bra men annars inte

Medlem sedan dec. 20003 887 inlägg
#9

Det är då väldigt konstigt...

If maxRecSet.RecordCount > 0 Then [blue]'Do stuff...[/blue]

Fungerar inte det så är det riktigt lurigt...

Medlem sedan juni 20022 599 inlägg
#10
sql_max = "select max(produktkategori_ID) as MaxAntal from produktkategori"
'
'
if maxRecSet(0) is null then
	'produktkategori är tom
else
	'produktkategori är inte tom
end if
Medlem sedan jan. 2002381 inlägg
#11

recordcount blir -1 så det blir aldrig > 0 däremot blir det ju <>0

men om recordset blir -1 så är det väl tomt, eller

Medlem sedan dec. 20003 887 inlägg
#12

Ja, om recordset.recordcount är mindre än noll, så...

Medlem sedan juni 200032 967 inlägg
#13

om .recordcount är -1 brukar det innebära att recordsetet inte är öppnat på ett sätt som stöder propertyn, och då är värdet alltid -1, oberoende av hur många poster där finns. Använd nikos förslag, det är mitt förslag.

Medlem sedan jan. 2002381 inlägg
#14

jag måste göra nåt annat fel. Såhär ser det ut nu, använde mig av nikos förslag:


sql_max = "select max(produktkategori_ID) as Maxvalue from produktkategori"

	set maxRecSet = Server.CreateObject("ADODB.Recordset")
    	maxRecSet.open sql_max, connect

if maxRecSet(0) is NULL then
max_ID = 1
response.write("TOMT")
else
max_ID = maxRecSet("Maxvalue")
end if

Resultatet blir fortfarande att max_ID inte har något värde

Medlem sedan jan. 2002381 inlägg
#15

Verkar vara ett knasigt problem, men eftersom jag vet att recordcount blir -1 då tabellen är tom. kan jag då skriva:

if maxRecSet.recordcount = -1 then
	max_ID = 1
else
	max_ID = maxRecSet("Maxvalue") +1	   			   			   			   		    		
end if

utan att det ställer till några andra problem, alltså kan recordcount bli -1 i andra fall än detta?

Medlem sedan dec. 20003 887 inlägg
#16

RecordCount

Medlem sedan jan. 2002381 inlägg
#17

aah.. tackar

Medlem sedan jan. 2002381 inlägg
#18

Det är helt otroligt, jag får det verkligen inte att fungera.

om jag skriver


sql_max = "select max(produktkategori_ID) as Maxvalue from produktkategori"

Vad får då Maxvalue för värde om tabellen jag hämtar från är tom..
Jag har testat med "" och is NULL men ingenting av detta blir sant
fattar verkligen inte

Medlem sedan juni 200032 967 inlägg
#19

Fungerar det inte om du använder funktionen isNull()?

if isNull(maxRecSet(0)) then
	'produktkategori är tom
else
	'produktkategori är inte tom
end if

mvh

Medlem sedan jan. 2002381 inlägg
#20

Äntligen verkar det fungera

if isNull(maxRecSet(0)) then
	'produktkategori är tom
else
	'produktkategori är inte tom
end if

Grymt tack @nders!! fattar att man sliter håret av sig efter ett tag

någonting som fortfarande är konstigt är att maxRecSet.recordcount fortfarande blir -1 trots att det finns poster i tabellen. Ett problem som jag iof inte orkar bry mig om just nu =)

257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)