Avatar billede eksperten1 Nybegynder
10. januar 2001 - 12:35 Der er 18 kommentarer og
1 løsning

Tal værdi i SQL

Jeg har en Access 2000 db, hvori feltet pris_u_moms er af typen Tal \"Dobbelt Reelt Tal\". På en side kan (burde) jeg så opdatere disse værdier, men i min SQL sætning konverterer jeg til CLng(Trim(Request(\"pris_u_moms\"))), problemet er bare at den smider alle decimaler væk og runder op istedet for!!! ARGHH

SQL = \"UPDATE lavpris SET varenr = \"& CLng(Trim(Request(\"varenr\"))) &\", beskrivelse = \'\"& Trim(Request(\"beskrivelse\")) &\"\', pris_u_moms = \"& (Trim(Request(\"pris_u_moms\"))) &\", pris_m_moms = \"& (Trim(Request(\"pris_m_moms\"))) &\", varetekst = \'\"& Trim(Request(\"varetekst\")) &\"\', kolli = \'\"& Trim(Request(\"kolli\")) &\"\', orden = \"& CLng(Trim(Request(\"orden\"))) &\" WHERE ID = \" & vareID & \";\"


Håber virkelig at nogen kan hjælpe med denne her, det haster ad h. til.
Avatar billede mike@work Praktikant
10. januar 2001 - 12:38 #1
Prøv at brug
CCur(Trim(Request(\"pris_u_moms\")))
Avatar billede mike@work Praktikant
10. januar 2001 - 12:41 #2
Clng laver dit tal om til et hel tal i området: -2.147.483.648 til 2.147.483.647
Avatar billede eksperten1 Nybegynder
10. januar 2001 - 12:43 #3
Jeg får en fejl: Syntax error in UPDATE statement, med CCur.
Så vil CLng vel heller ikke kunne gøre det, hvis jeg mister mine decimaler ??

mvh,
Mark
Avatar billede mike@work Praktikant
10. januar 2001 - 12:48 #4
Clng smider dine decimaler væk....
De eneste tre der ikke gør det er:
CCur, CSng og CDbl

\"Dobbelt Reelt Tal\" betyder det ikke også uden decimaler ???
Det er i DB du har sat feltet til denne ???
Avatar billede eksperten1 Nybegynder
10. januar 2001 - 12:50 #5
???, men de er der jo alligevel, altså i db\'en. Hvad skal jeg så sætte den til i DBen??
Avatar billede mike@work Praktikant
10. januar 2001 - 12:53 #6
Hehehe der fanger du mig.... For jeg ved ikke hvad de hedder i den danske version af Access :-) Men i den engelske hedder de enten: Single, Double eller Decimal
Avatar billede mike@work Praktikant
10. januar 2001 - 12:59 #7
Du kan også vælge at benytte Data typen: Currency (Igen på engelsk)
Avatar billede eksperten1 Nybegynder
10. januar 2001 - 13:01 #8
Jeg ændrede den til VALUTA, og nu kan den opdatere HELtal, men ikke med decimaler ??
I den danske hedder de (Byte, Heltal, Langt Heltal, Reelt tal, Dobbelt Reelt tal, Replikerings-id, Decimal) Umiddelbart lyder Decimal jo tiltrækkende, jeg håber at den vil fungere!
Mark
Avatar billede mike@work Praktikant
10. januar 2001 - 13:04 #9
Har du husket at fjerne din CLng(Trim(Request(\"pris_u_moms\"))) - Den fjerne jo dine decimaler ???

I databasen kan du også definere hvormange decimaler feltet skal indeholde....
Avatar billede eksperten1 Nybegynder
10. januar 2001 - 13:08 #10
Jeg har fjernet den og afprøvet CDbl, CCur og CSng. Jeg indstillede feltet til Tal/Decimal, med 2 decimaler uden held..:(
Avatar billede mike@work Praktikant
10. januar 2001 - 13:11 #11
Ok... Det lidt kryptisk det her !
Har du mulighed for at maile mig de omtalte filer (DB\'en og ASP filen) ???
Avatar billede eksperten1 Nybegynder
10. januar 2001 - 13:12 #12
Det er pudsigt, det fungerer hvis jeg skriver et tal uden decimaler i formularen, men ikke hvis der er decimaler, så er der den UPDATE fejl. Så jeg er pænt sikker på at det er p.g.a. de rådne decimaler!
Avatar billede ikuyucu Nybegynder
10. januar 2001 - 13:27 #13
Har du prøvet at lade være med at konvertere dem til noget???
Avatar billede mike@work Praktikant
10. januar 2001 - 13:27 #14
Åhhh jeg store torsk.... Klart.... Klart....

Prøv og response.write din SQL linje ud....

Det fordi din sqllinje ser nogenlunde sådan her ud:

\"UPDATE lavpris SET varenr = 100, beskrivelse = \'test\', pris_u_moms = 55,5, pris_m_moms = 66,6, varetekst = osv...........\"

Databasen tror så at komaet i 55,5 er en delimiter mellem to værdier, hvad det jo ikke er. Så du bliver nød til at åbne dit recordset på den gode gamle facon :-/

strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=DIN_DB.mdb\"
Set oConn = server.CreateObject(\"ADODB.Connection\")
Set oRs = server.CreateObject(\"ADODB.RecordSet\")

oConn.Open strDSN

strSQL = \"SELECT * FROM lavpris WHERE ID = \" & vareID
oRs.Open strSQL, oConn, 1,3

oRs(\"varenr\") = trim(Request(\"varenr\"))
oRs(\"beskrivelse \") = trim(Request(\"beskrivelse\")
oRs(\"pris_u_moms\") = CCur(trim(Request(\"pris_u_moms\")))
oRs(\"pris_m_moms\") = trim(Request(\"pris_m_moms\"))
oRs(\"varetekst\") = trim(Request(\"varetekst\"))
oRs(\"kolli\") = trim(Request(\"kolli\"))
oRs(\"orden\") = trim(Request(\"orden\"))
   
oRs.Update

oRs.Close
oConn.Close

Set oRs = nothing
Set oConn = nothing
Avatar billede mike@work Praktikant
10. januar 2001 - 13:31 #15
Ahh så ikke lige min mailbox....

Men Din DB er fin nok....
Avatar billede eksperten1 Nybegynder
10. januar 2001 - 13:41 #16
Hold fast hvor tåbeligt, nu da du peger på fejlen er den jo indlysende som bare pokker.

Jeg takker, bukker og skraber. Nu spiller det for ole bent og vennerne ;)

Mark
Avatar billede mike@work Praktikant
10. januar 2001 - 13:44 #17
Ja ikk\'

Man kigger og kigger og pludslig kan man ikke se skoven for bare træer :-)

Anytime Mark !
Avatar billede ricki Nybegynder
10. januar 2001 - 13:49 #18
kan du ikke bare ændre \",\" til \".\" og så er det skid slået?

erstat:
(Trim(Request(\"pris_u_moms\")))
med:
(Replace(Request(\"pris_u_moms\"), \",\", \".\"))

Det er forresten ikke særligt smart både at gemme prisen med og uden moms, den ene er jo nok for den anden kan du jo regne ud vha den ene.

Og så er du åbenbart vild med Trim(), denne skulle ikke være nødvendig, med mindre du er helt vild med at sætte en masse mellemrum uden om din tekst og ikke vil have det med i databasen. :-)
Avatar billede eksperten1 Nybegynder
10. januar 2001 - 14:03 #19
Det er nu mest for at brugeren ikke smider en masse mellemrum ind foran dataene.

Tjo, det er rigtigt med erstat funktionen, men så skal brugeren vide at er med \".\" istedet for \",\" og de bruger copy/paste når de opretter varerne.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester