Avatar billede danm Nybegynder
30. september 2007 - 01:27 Der er 11 kommentarer og
1 løsning

Indsætte decimal i database med parameter

Hej

Jeg har problemer med at indsætte et decimal tal i min access database, også selvom jeg bruger parametre.
De bliver simpelthen skrevet om fra eksempelvis "12,25" til "1225,00". Decimaltallet står i en tekstbox og indsættes i databasen med denne kode til parametren (cmd er selve kommandoen):

Dim par As ADODB.Parameter
Set par = cmd.CreateParameter("@Pris", adDecimal, adParamInput)
par.Value = CDec(txtPris.Text)
cmd.Parameters.Append par

Sproget er vb6
Avatar billede neoman Novice
30. september 2007 - 01:38 #1
Det lyder som problemer med locale, fordi en engelsk fortolkning af 12,25 vil typisk være 1225,00, da "." er decimal separator, mens "," markerer tusinde. Jeg ved ikke hvordan man fikser det hos dig, da jeg selv roder med vb.net, men måske hjælper det dig på vej ?

For at afprøve min teori prøv at taste 12.25 og se hvad det giver.
Avatar billede arne_v Ekspert
30. september 2007 - 04:08 #2
par.Value = CDec(Replace(txtPris.Text,",",".")

var en mulighed
Avatar billede nielle Nybegynder
30. september 2007 - 08:05 #3
Jeg er ikke sikker på at jeg forstår problemet. Er feltet i selve databasen også et float-type felt - altså ikke et text-felt? For så er tingene da som de skal være...
Avatar billede terry Ekspert
30. september 2007 - 10:34 #4
If the PC's regional settings are set to Danish there should be no problem inserting 12,25
Avatar billede danm Nybegynder
30. september 2007 - 13:42 #5
Jeg har prøvet både med , og . som decimal seperator men de giver begge det samme resultat. I databasen er typen sat til decimal(8,2). Altså 2 decimaler da det er en pris.
Jeg kunne selvfølgelig skifte typen ud i databasen så det bliver en tekststreng istedet hvis intet kan gøres, men så kan jeg ikke lave så mange beregninger på det...
Jeg ved ikke om det har noget at gøre med at jeg ikke har fastlagt en størrelse i selve parametren, men det var fordi jeg ikke vidste hvordan jeg angiver størrelsen når typen er decimal (der er jo to tal så).
Avatar billede nielle Nybegynder
30. september 2007 - 19:01 #6
Bliver beløbene ikke indsat i basen? Eller mangler decimaldelen, eller hvad?
Avatar billede neoman Novice
30. september 2007 - 20:10 #7
"De bliver simpelthen skrevet om fra eksempelvis "12,25" til "1225,00"."
Hvor ser du tallene  ?

Hvis du åbner din access, og direkte i tabellen skriver 12,25 og flytter til en anden celle/record, ser du 12,25 eller 1225,00?

Hvad giver CDec(txtPris.Text) konverteret til tekst og udskrevet på skærmen ?
Avatar billede kjulius Novice
30. september 2007 - 22:22 #8
I hjælpeteksten til CreateParameter metoden står der:

If you specify a numeric data type (adNumeric or adDecimal) in the Type argument, then you must also set the NumericScale and Precision properties.

Så prøv med følgenden:

par.NumericScale = 8
par.Precision = 2
par.Value = CDec(txtPris.Text)
Avatar billede danm Nybegynder
30. september 2007 - 23:55 #9
Det var straks mere underligt... Jeg prøvede kjulius forslag, og der var ingen ændring..
Tallene bliver simpelthen skrevet om fra 12,25 til 1225,00 og 12,5 skrives om til 125,00
Skriver jeg det selv i databasen gemmes det som det skal.
Men det der er underligt er så at jeg kiggede lidt efter i vb6, og der er åbenbart ikke en variabel type der hedder decimal?? I stedet bruges åbenbart den der hedder Currency. Skifter jeg så dem ud og skriver i stedet:

Set par2 = cmd.CreateParameter("@Pris", adCurrency, adParamInput)
par2.Value = CDec(txtPris.Text)

Virker det helt som det skal..
Det synes jeg nu ellers virker lidt underligt..
Men tusind tak for forslagende!
Avatar billede kjulius Novice
01. oktober 2007 - 11:37 #10
Hvis du ser i hjælpeteksten til CDec, vil du sikkert finde beskrevet, at den konverterer  til en variabel type Variant. Det er i hvert fald hvad der står i hjælpen til Access:

Note  The CDec function does not return a discrete data type; instead, it always returns a Variant whose value has been converted to a Decimal subtype.
Avatar billede danm Nybegynder
05. januar 2008 - 15:07 #11
Hov glemte at lukke tråden
Avatar billede nielle Nybegynder
05. januar 2008 - 22:09 #12
Jeg synes nu mere at du glemte at vende tilbage med noget respons...
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