30. september 2007 - 01:27Der 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
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.
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...
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å).
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!
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.
Jeg synes nu mere at du glemte at vende tilbage med noget respons...
Synes godt om
Ny brugerNybegynder
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.