webForumDet fria alternativet

Boolean

14 svar · 514 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#1

:e
Hej!

Här följande kod som hämtar värde från en kryssruta.
Checked value = 1

blnBreakfast = CBool(request.Form("checkBreakfast"))

Hur får jag in det i en accessdatabas? har provat lite olika men inte lyckats.

Datbasen är inställd på Ja/nej med formatet sant/falskt.

vad ska jag ha runt ett booleskt värde i sql-frågan?

sätter jag '" & blnBreakfast & "' så blir det typblandningsfel
sätter jag bara " & blnBreakfast & " så blir det för få parametrar...

Mvh
Henrik

GuffaMedlem sedan juni 2004533 inlägg
#2

Så här tar du emot värdet:

blnBreakfast = Request.Form("checkBreakfast") = "on"

För att lägga in ett boolskt värde i SQL-frågan så använder du 1 för sant och 0 för falskt.

---------------
I want to hear you make decisions
Without your television

@ndersMedlem sedan juni 200032 969 inlägg
#3

Så kan man kanske göra om man inte har satt något värde på sin kryssruta, annars blir ju värdet aldrig on.

Det går alldeles utmärkt att skriva true resp. false direkt i SQL-frågan, så länge man inte anger några apostrofer runt.

mvh

devotionMedlem sedan jan. 20013 582 inlägg
#4

:)
Hmmm...

Får det inte att fungera...

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.
/time/registerTime2.asp, line 47

Jag har kollat att variabeln har värde och det har den. True resp. False, beroende på läge kryssrutan har.

Sgl ser ut så här:

strSQL = "INSERT INTO tblOtherTime (spec, startDate, stopDate, comments, totaltime, user, taskNr, created, Dinner, Breakfast) " &_
		 "VALUES ('" & strSpecification & "', #" & dtStartDate & "#, #" & dtStopDate & "#, '" & strComments & "', " & strTotalTime & ", '" & Request.Cookies("sydostel")("User") & "', '" & strTaskNr & "', #" & Now() & "#, " & blnDinner & ", " & blnBreakfast & ")"

Querystringen ser ut så här:

blnBreakfast = CBool(request.Form("checkBreakfast"))
blnDinner = CBool(request.Form("checkDinner"))

Mvh
Henrik

@ndersMedlem sedan juni 200032 969 inlägg
#5

Hej!

Prova att skriva ut SQL-frågan för att se om det verkligen ser ut som du tror.

Om man använder ett svenskt OS har boolska variabler förmågan att få värdena Sant resp. Falskt när de konverteras till en sträng. Kan det vara det som hänt?

Mvh

Jesper TMedlem sedan nov. 20017 144 inlägg
#6

Tror också att du kan skippa cbool och köra med 0 för false och 1 för true.

@ndersMedlem sedan juni 200032 969 inlägg
#7

Ja, man kan skippa Cbool, sätta värdet "1" på kryssrutan, och använda:

blnBreakfast = Len(request.Form("checkBreakfast"))

Då föreslår jag dock namnbyte på variablerna, men det är en petitess.

devotionMedlem sedan jan. 20013 582 inlägg
#8

:p

Tack för svaren....

Ska hem och testa!!!

Mvh
Henrik

J.N.Medlem sedan apr. 20031 660 inlägg
#9

HEJ!

Tänk också på att true/false är -1/0, observera minustecknet!
Jag har alltid använt siffror, vilket krånglar till det när man använder andra databaser, som använder 1/0 istället.

Det vore därför kanske enklare att använda true/false istället för siffror, som du gör. Ha det i åtanke.

devotionMedlem sedan jan. 20013 582 inlägg
#10

:e

Hej !

så här ser response.write sql ut:

INSERT INTO tblOtherTime (spec, startDate, stopDate, comments, totaltime, user, taskNr, created, Dinner, Breakfast) VALUES ('Kontorsarbete', #2005-05-25 07:00:00#, #2005-05-25 16:00:00#, '', 8, 'Henrik', '', #2005-05-26 13:44:51#, Sant, Sant)

mvh
Henrik

devotionMedlem sedan jan. 20013 582 inlägg
#11

:h
Hej!

Finns det verkligen inget sätt att sätta värdet True/false i en accessdatabas på en server som kör svenskt operativ?? Tycker det verkar konstigt...

Viss jag kan göra på ett annat sätt exempelvis som @nders skrev

blnBreakfast = Len(request.Form("checkBreakfast"))

...men jag tycker att det borde gå att göra så som jag tänkt liksom

Någon som vet???

Mvh
Henrik

@ndersMedlem sedan juni 200032 969 inlägg
#12
blnBreakfast = CBool(request.Form("checkBreakfast"))
if blnBreakfast then blnBreakfast = "True" else blnBreakfast = "False"
devotionMedlem sedan jan. 20013 582 inlägg
#13

:birp

Funkar fin-fint!!!

Mvh

GuffaMedlem sedan juni 2004533 inlägg
#14

@nders skrev:

Så kan man kanske göra om man inte har satt något värde på sin kryssruta, annars blir ju värdet aldrig on.

Det är just om man inte satt något värde på kryssrutan som man får värdet "on". Det är det som är standardvärdet.

J.N. skrev:

Tänk också på att true/false är -1/0, observera minustecknet!
Jag har alltid använt siffror, vilket krånglar till det när man använder andra databaser, som använder 1/0 istället.

Det vore därför kanske enklare att använda true/false istället för siffror, som du gör. Ha det i åtanke.

Det är just med tanke på migration till andra databaser som man bör använda siffror. Använd 1 för True och 0 för False så fungerar det exakt likadant i Access, MySQL och SQL Server.

@nders skrev:

blnBreakfast = CBool(request.Form("checkBreakfast"))

Värdet i Request.Form("checkBreakfast") är antingen "on" (ifall du inte specificerat ett annat värde i checkboxen) eller Empty. Värdet Empty konverteras till False, men värdet "on" går inte att konvertera till en boolean.

Använd koden som jag visade först istället:

blnBreakfast = Request.Form("checkBreakfast") = "on"
@ndersMedlem sedan juni 200032 969 inlägg
#15

Det är just om man inte satt något värde på kryssrutan som man får värdet "on". Det är det som är standardvärdet.

Ja, vi menar samma sak. Jag kanske uttryckte mig klumpigt.

Värdet i Request.Form("checkBreakfast") är antingen "on" (ifall du inte specificerat ett annat värde i checkboxen) eller Empty. Värdet Empty konverteras till False, men värdet "on" går inte att konvertera till en boolean.

Eftersom enligt ursprungsinlägget 1 var värdet för ikryssad checkbox fungerar "min" kod lika bra. =)

mvh

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