webForumDet fria alternativet

cBool ?

15 svar · 436 visningar · startad av Palle

PalleMedlem sedan apr. 20002 716 inlägg
#1

Jag blir tokig.. *slita håret* ..jag får inte detta till att fungera. :(

Har ett vanligt formulär, 1 textfält och 1 checkbox.
Detta skall uppdatera värden i en access-databas, hur databasen ser ut finns i bifogad bild.

Följande kod ger detta felmeddelande: För få parametrar angavs. 1 förväntades.

[RED]strName = dbSafe(Request.Form("txName"))
bolMailMe = cBool(Request.Form("txMailMe"))

Connect.Execute("UPDATE tblClients SET fldName='"& strName &"', fldMail="& bolMailMe &" WHERE ID="& trim(Request.Querystring("id")))[/RED]

sql-satsen ser ut så här om jag skriver ut den: UPDATE tblClients SET fldName='palleman', fldMail=Sant WHERE ID=14

Kopierar jag sql-satsen som jag skrev ut och exekverar den uppdateras posterna precis som det ska.. :q ..hur kan detta komma sig?

wf_cbool.gif
@ndersMedlem sedan juni 200026 914 inlägg
#2

Får du sant när du använder CBool()? Jag tror att du ska använda true/false i din SQL-fråga.

Mvh,

PalleMedlem sedan apr. 20002 716 inlägg
#3

Skriver jag så här:

[red]bolMailMe = cBool(Request.Form("txMailMe"))
Response.Write bolMailMe[/red]

..så får jag True/False.
Men när jag använder bolMailMe i sql-satsen så får jag Sant/Falskt

Hur kommer det sig? :OO

PalleMedlem sedan apr. 20002 716 inlägg
#4
[red]Response.Write VarType(bolMailMe)[/red]

..returnerar 11, så variabeln är ju vbBoolean.
..frågan är nu bara hur sjutton får jag den till engelskt-false i min sql-sats? ;)

PalleMedlem sedan apr. 20002 716 inlägg
#5

Testade lite med att gå runt cBool, tyvärr utan resultat. :(

[red]bolMailMe = trim(Request.Form("txMailMe"))
If Len(bolMailMe) > 0 Then bolMailMe = True Else bolMailMe = False

Connect.Execute("UPDATE tblClients SET fldName='"& strName &"', fldMail="& bolMailMe &" WHERE ID="& trim(Request.Querystring("id")))[/red]

..ger följande utskriven sql-sats: UPDATE tblClients SET fldName='jultomten', fldMail=Falskt WHERE ID=16

mrblondeMedlem sedan aug. 20011 386 inlägg
#6

gör en cint, så blir den en etta eller en nolla, det brukar databasen kunna acceptera.

PalleMedlem sedan apr. 20002 716 inlägg
#7

Aha, då har jag lärt mig något nytt idag. :bire
Fick göra så här:

[red]bolMailMe = cInt(cBool(Request.Form("txMailMe")))[/red]

..då ville den vara med och leka.

Skulle ändå vara intressant att veta varför jag får oanvändbara värden i min sql-sats när jag använder cBool. :l
Om någon har nått bra svar, please posta.

Tack mrblonde!

mrblondeMedlem sedan aug. 20011 386 inlägg
#8

jag gissar att du får sant/falskt för att du på servern har svenska installerat som språk på os:et? Eller att du kanske kör med LCID = 1053 (1053 = Svenska om jag inte missminner mig).

Svårt att komma runt på annat sätt än att antingen köra med engelskt os, eller alltid använda 1/0. Jag föredrar det sista för att slippa språkförbistring med kompilatorn :)

mikulMedlem sedan aug. 2001810 inlägg
#9

Tack mrBlonde, nu har även jag lärt mig nått nytt. ;)

/ Mikul

OveRRidEMedlem sedan feb. 20018 509 inlägg
#10

cBool() returnerar väl alltid True/False?
Svensk Access returnerar väl alltid Sant/Falskt?

m_soderlundMedlem sedan sep. 20024 733 inlägg
#11

Got'cha! mrBlonde, stark kandidat till denna trådens "förklarare".
I alla fall, kan det tänkas att det är nya artikelsystemet Palle gör, som kommer på nya ***********?
(fråga riktad till Palle)

PalleMedlem sedan apr. 20002 716 inlägg
#12

OveRRidE skrev:

cBool() returnerar väl alltid True/False?
Svensk Access returnerar väl alltid Sant/Falskt?

Testa följande, det ger helt olika resultat beroende på hur/när man använder det:

[RED]<%

intTest = 0
bolTest = cBool(intTest)

%>

Test1: <%= bolTest %>
<br>
Test2: <%= "SELECT fld1 FROM tbl1 WHERE fld1 = "& bolTest &" ORDER BY ID DESC" %>
<br>
Test3: <%= ""& bolTest %>[/RED]
PalleMedlem sedan apr. 20002 716 inlägg
#13

m_soderlund skrev:

I alla fall, kan det tänkas att det är nya artikelsystemet Palle gör, som kommer på nya ***********?
(fråga riktad till Palle)

Svar nej. :e

m_soderlundMedlem sedan sep. 20024 733 inlägg
#14

Palle skrev:

m_soderlund skrev:

I alla fall, kan det tänkas att det är nya artikelsystemet Palle gör, som kommer på nya ***********?
(fråga riktad till Palle)

Svar nej. :e

Oki doki. :)
Tyvärr är jag helt borta vad gäller ditt problem. Småskumt.

nikoMedlem sedan juni 20022 415 inlägg
#15

Det här är en bugg som har att göra med castning av boolean till string vid konkatenering.

Det är därför som:

response.write "" & bolTest

hos vissa inte ger samma resultat som:

response.write bolTest ' (ingen konkatening)

Jag känner själv igen den från VB: http://support.microsoft.com/?kbid=216379, har aldrig sett den i VBScript, dock. Jag får true/false i alla fallen även om jag kör svenskt LCID och svenska regional settings. Tricket som det står i länken är att köra CStr innan konkateneringen.

PalleMedlem sedan apr. 20002 716 inlägg
#16

Ok, intressant.
Tack för den informationen niko. :)

130 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
127 ms — hämta tråd, inlägg och bilagor (db)