webForumDet fria alternativet

Insert Into

9 svar · 359 visningar · startad av PixelFix

PixelFixMedlem sedan juni 200046 inlägg
#1

Har skaffat mig boken "Teach Yourself E-Commerce Programming with ASP".
Nu har jag kört fast på dag 5 i boken. En produkt ska läggas till i en databas.
Den här koden fungerar:

<%
Set Con = Server.CreateObject( "ADODB.Connection" )
Con.Open "accessDSN"
sqlString = "INSERT INTO Products ( product_name, product_price ) " & "values ( 'Gift Basket', 34.54 )"
Con.Execute sqlString
Con.Close
%>

Men inte den här koden:

<%
Set Con = Server.CreateObject( "ADODB.Connection" )
Con.Open "accessDSN"
productName = "Gift Basket"
productPrice = 34.54
sqlString = "INSERT INTO Products ( product_name, product_price ) " & "values ( ' " & productName & " ' , " & productPrice & " )"
Con.Execute sqlString
Con.Close
%>

Jag får felmeddelandet:
Microsoft OLE DB Provider for ODBC Drivers fel '80040e14'
[Microsoft][Drivrutin för ODBC Microsoft Access] Antalet värden i frågan och antalet målfält är olika.

Någon som vet vad det kan vara för fel?

------------------
Tommy

LarsGMedlem sedan dec. 200012 465 inlägg
#2

Nej, jag ser inget direkt. Kan du lägga till en testutskrift av strängen så att man ser hur inserten ser ut, innan den exekveras

<%
Set Con = Server.CreateObject( "ADODB.Connection" )
Con.Open "accessDSN"
productName = "Gift Basket"
productPrice = 34.54
sqlString = "INSERT INTO Products ( product_name, product_price ) " & "values ( ' " & productName & " ' , " & productPrice & " )"
response.write sqlstring
'Con.Execute sqlString
Con.Close
%>

Kan det vara något problem med radbrytningen? (Det kanske bara är WF som gör att det ser fel ut?)

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

[Redigerat av LarsG den 20 maj 2001]

@ndersMedlem sedan juni 200026 914 inlägg
#3

det skulle mycket väl kunna vara så att i din andra fråga har du ett decimaltal med decimalkomma i variabeln productPrice. byt ut det mot en punkt så ska det nog gå bra.

sen bör du ta bort mellanslagen mellan apostrof och citationstecken här:

... ' " & productName & " ' ...

mvh,

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
nobody expects the spanish inquisition!</A>

PixelFixMedlem sedan juni 200046 inlägg
#4

Svar till LarsG:
sqlString raden är skriven på samma rad. Det är wf som har radbrutit. Ska kolla det där med Response.Write när jag kommer hem i eftermiddag.

Svar till @nders:
Kan inte hitta decimalkommat du skrev om.

Trist om jag inte ska komma längre än till sidan 97 av 600 i boken.

------------------
Tommy

@ndersMedlem sedan juni 200026 914 inlägg
#5

det är inte helt omöjligt att decimalpunkten du angett när du ger productPrice dess värde, ersätts med ett decimalkomma, beroende på serverns regionala inställningar.

prova att sätta citationstecken runt priset, även om det är fel att göra så egentligen. den här gången ska det dock inte spela någon roll, eftersom du inte använder värdet till någonting förutom att lägger till det till en sql-fråga (som är en sträng).

givetvis ska du komma förbi sidan 97, det ska vi se till! :)

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
nobody expects the spanish inquisition!</A>

PixelFixMedlem sedan juni 200046 inlägg
#6

Det funkar nu!

Lade till en Response.Write. Fick då utskriften:
INSERT INTO Products ( product_name, product_price ) values ( ' Gift Basket ' , 34,54 )

Satte citationstecken runt priset. Och fick då utskriften:
INSERT INTO Products ( product_name, product_price ) values ( ' Gift Basket ' , 34.54 )

Nu läggs produkten till i databasen utan knorr. Härligt, jag kan bläddra till sidan 98. :D
Tackar för hjälpen.

Men det där du skrev, @nders.

det är inte helt omöjligt att decimalpunkten du angett när du ger productPrice dess värde, ersätts med ett decimalkomma, beroende på serverns regionala inställningar.

Kan man ändra på sånt i PWS? Eller får jag leva med att sätta citationstecken runt alla priser i resten av bokens övningar?

------------------
Tommy

@ndersMedlem sedan juni 200026 914 inlägg
#7

det är möjligt att du kan ändra regional settings på din dator så du kan få decimalpunkt som standard istället, det vet jag faktiskt inte.

du borde dock kunna fuska genom att ändra lcid till något engelskt, där decimalpunkt är default.

kul att du fick bläddra! :)

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
nobody expects the spanish inquisition!</A>

PixelFixMedlem sedan juni 200046 inlägg
#8

???
Tvärstopp vid "lcid"... Har aldrig sett den bokstavskombinationen tidigare. Vad betyder det?

------------------
Tommy

@ndersMedlem sedan juni 200026 914 inlägg
#9

lcid står för locale identifier, och låter dig så att säga ändra regionala inställningar på sessionsnivå (eller dokumentsnivå).

normalt använder man (vi) nummer 1053 så här:

session.lcid=1053

det gör att vi får svenskt datumformat, svenska namn på dagar, månader och svenskt format på valuta osv.

lcid kan man då givetvis ändra på om man vill, så man får amerikanskt format på allt. då använder man lcid 1033.

vill man, kan man lägga in detta i session_onstart i global.asa, eller i @-taggen i det dokument där du behöver använda det.

hoppas min förklaring kom hela vägen fram.

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
nobody expects the spanish inquisition!</A>

PixelFixMedlem sedan juni 200046 inlägg
#10

Japp... jag har förstått.

Tackar för all hjälp.
Läggdags...zzzzzzzzzz

------------------
Tommy

Genererad på 371 ms · cache AV · v20260730165559-full.f96bc7eb