webForumDet fria alternativet

villkor med boolskt värde mot accessdatabas

ASP

6 svar · 356 visningar · startad av johannaloke

Medlem sedan apr. 200393 inlägg
Frågan#1

Jag använder en access-databas där kolumnen "barn" är en kryssruta med ett boolskt värde.

RS_alla innehåller alla poster i databasen och RS_parent innehåller de som är förälder till någon i mitt organisationsschema. Vid utritningen av schemat måste jag veta om de har barn det är därför dessa whilear behövs.

Mina if-satser (markerade med fetstil) funkar inte. Jag vill ha med dem för att slippa uppdatera i databasen om den redan är ok. Om det redan är markerat att de har barn behöver jag inte uppdatera och markera igen. Likså om de inte har barn enligt markeringen behöver jag inte uppdatera med det igen.
Det kan ju vara så att jag flyttat alla poster under en förälder och då är han ju inte förälder längre alltså ska han avmarkeras i barnkolumnen.
Någon som vet hur villkoren ska ställas?

Har följande kod:

while not RS_alla.EOF 'så länge det finns poster kvar i tblOrg
			hittad = 0
			RS_parent.moveFirst 'ställ dig först i tblParent
			while not RS_parent.EOF and hittad = 0
				if RS_alla.Fields("ID") = RS_parent.Fields("parentID") then 'om ID finns i kolumnen parentID dvs är förälder till ngn/ngt
					[b]'if not CBool(RS_alla("barn")) then[/b]
						'skapar sql-fråga som uppdaterar tblOrg i barnkolumnen om posten har barn
						SQLfraga = "UPDATE tblOrg SET barn = '1' WHERE ID=" & RS_alla.fields("ID") & ""
						Response.Write("fråga1: " & SQLfraga)
						Connection3.Execute(SQLfraga)'ställer frågan till db
						hittad = 1 'posten har minst ett barn, gå ur whilen
					'else
						'hittad = 0 
					'end if
				end if
				RS_parent.moveNext 'flytta fram bland posterna i tblParent
			wend
			if hittad = 0 then 'om posten inte ska ha några barn 
				Response.Write("kommer jag hit")
				Response.Write(RS_alla.Fields("barn").value)
				Response.Write("hittad: " & hittad)
				[b]'if CBool(RS_alla("barn")) then[/b]
				Response.Write("men inte hit")
					'skapar sql-fråga som uppdaterar tblOrg i barnkolumnen om posten inte har barn
					SQLfraga = "UPDATE tblOrg SET barn = '0' WHERE ID=" & RS_alla.fields("ID") & ""
					Response.Write("fråga2: " & SQLfraga)
					Connection3.Execute(SQLfraga)'ställer frågan till db
				'end if
			end if
			RS_alla.moveNext 'flytta fram bland posterna i tblOrg
		wend

Hoppsa någon förstod mina förklaringar och min fråga ;) :q
//Johanna

Medlem sedan apr. 20003 174 inlägg
#2

Om jag inte minns helt fel kan du cint´a kolumnen istället och kolla om värdet är 1 eller 0, ska fungera bättre. :)

Typ:

    (True) If cInt(RS_alla("barn")) = 1
    (False) If cInt(RS_alla("barn")) = 0

Medlem sedan apr. 200393 inlägg
#3

Det funkar inte heller. Har provat massa olika sätt nu.
Den första if-satsen funkar men inte den andra. Den som ska sätta barnkolumnen till false om den var true. Posten har inga barn längre.

Det verkar vara när jag kollar med true som det blir fel. Fler förslag?

Har provat med både .fields och .value och utan dessa men det gör ingen skillnad.

Nu sist har jag skrivit så här:
if CInt(RS_alla.Fields("barn").Value) = 1

Kan det vara något annat i koden som gör att det blir fel?
//Johanna

Medlem sedan apr. 20003 174 inlägg
#4

SQLfraga = "UPDATE tblOrg SET barn = '0' WHERE ID=" & RS_alla.fields("ID")

Om barn är av datatypen True/False så ska du inte ha 'fnuttar' runt värdet i din sql-sats.

Medlem sedan apr. 200393 inlägg
#5

Det funkar inte heller. Då får jag inga värden alls i databasen.
Lutar åt att byta datatyp i kolumnen eftersom inget verkar funka.
//Johanna

Medlem sedan apr. 20003 174 inlägg
#6
[red]SQLfraga = "UPDATE tblOrg SET barn = false WHERE ID=" & RS_alla.fields("ID")[/red]

 

Mitt tips är dock att byta datatypen till Tal och sedan använda 0 resp. 1 som värde, ex.

[red][b]För [i]false[/i]:[/b]
SQLfraga = "UPDATE tblOrg SET barn = 0 WHERE ID=" & RS_alla.fields("ID")

[b]För [i]true[/i]:[/b]
SQLfraga = "UPDATE tblOrg SET barn = 1 WHERE ID=" & RS_alla.fields("ID")[/red]
Medlem sedan apr. 200393 inlägg
#7

Nu har jag löst det. Jag bytta datatyp. Kändes som det enklaste. Det här true/false verkar vara klurigt med accessdatabaser.

Sen upptäckte jag ett annat fel.... hittad=1 låg i fel if-sats. Den skulle ju ligga i den första ;-)
Så nu kanske det skulle funka med true/false i alla fall?! Men det tänker jag inte prova!

Tack för hjälpen!
//Johanna

271 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
148 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)