Avatar billede chakawoo.dk Nybegynder
23. juli 2004 - 11:25 Der er 13 kommentarer og
1 løsning

Access / Insert smider komma væk

Jeg har en decimal med min totalprisen på en ordre som skal gemmes i en Access2003 database.
Problemet er at kommaet forsvinder når databasen opdateres.

Jeg laver et Trace.Write af min variable(decimal) der indeholder prisen umiddelbart før INSERT sætningen bliver udført og der er den som den skal være.
Men... når jeg efterfølgende tjekker databasen er kommaet væk.

Ex. 192,75 bliver til 19275
1500,99 bliver til 150099 ...osv

Udpluk fra koden:
(Insert metode)
int OpretOrdre1(decimal o_Totalpris, string o_BestDato, string o_EkspDato, int k_ID, string e_MAIL) {
...........
...........
string queryString = "INSERT INTO [Ordre] ([O_Totalpris], [O_BestDato], [O_EkspDato], [K_ID], [E_MAIL])" +
" VALUES (@O_Totalpris, @O_BestDato, @O_EkspDato, @K_ID, @E_MAIL)";
..............
.............
System.Data.IDataParameter dbParam_o_Totalpris = new System.Data.OleDb.OleDbParameter();
        dbParam_o_Totalpris.ParameterName = "@O_Totalpris";
        dbParam_o_Totalpris.Value = o_Totalpris;
        dbParam_o_Totalpris.DbType = System.Data.DbType.Decimal;
        dbCommand.Parameters.Add(dbParam_o_Totalpris);
.............
.............}
(udpluk fra metoden hvor Insert-metoden kaldes)
public void Bestil_Click(object sender, EventArgs e){
............
...........
total = calcTotal();
Trace.Write(total.ToString()); //Her er værdien ok ex. 192,95
int rowsAff = OpretOrdre1(total, sDato, sDato, kid, umail);
..........
..........
}

Hvad går galt ????
Avatar billede snepnet Nybegynder
23. juli 2004 - 11:40 #1
Prøv at angiv typen ført, og smide derefter din decimal-værdi ind med en Convert.ToDecimal(dbParam_o_Totalpris);
Hvis du vil sikre dig at det går ordentlig for sig skal du yderligere angive en formatter, hvilket du kan gøre på flere måder.

Den dyreste (og ikke særlig hensigtsmæssige) er at oprette en culture så kaldet bliver sådan her :
Convert.ToDecimal(dbParam_o_Totalpris, new System.Globalization.CultureInfo("da-DK").NumberFormat);

Men du kan også sørge for at bruge den hele tiden - f.eks. ved at sikre dig at du altid angiver en Culture i din aktuelle tråd ved :
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("da-DK");

Derefter kan du i alle tilsvarende formateringrutiner benytte :
Convert.ToDecimal(dbParam_o_Totalpris, System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat);
Avatar billede snepnet Nybegynder
23. juli 2004 - 11:43 #2
Bemærk at de fleste forhold omkring den slags ting er styret af dine regional settings på serveren.

Men dit problem vil opstå hvis den forsøger at konvertere din string til en decimal, og aktuelt arbejder med en-US (hvor kommaer vanligvis er 1000-tals seperator).
Avatar billede snepnet Nybegynder
23. juli 2004 - 12:00 #3
Hmm... du skal nok lige skifte CurrentCulture ud med CurrentUICulture.
Avatar billede chakawoo.dk Nybegynder
23. juli 2004 - 13:03 #4
Men min total variable er jo allerede en Decimal og har så vidt jeg kan se allerede det rigtige format...

nå men hvis jeg anvender den "dyre" løsning skal jeg så smide
Convert.ToDecimal(dbParam_o_Totalpris, new System.Globalization.CultureInfo("da-DK").NumberFormat); ind i min database metode...
og hvordan gør jeg lige det..

Jeg er ikke så stiv i asp.net .... Jeg bruger webmatrix's sql generator til mine databasekald
Avatar billede snepnet Nybegynder
23. juli 2004 - 13:33 #5
Ok... kan du ikke lige prøve at gøre sådan her :
dbParam_o_Totalpris.Value = o_Totalpris.ToString();

Og så skrive her hvad der sker.
Avatar billede chakawoo.dk Nybegynder
23. juli 2004 - 13:40 #6
Stadig det samme 181,34 bliver til 18134
Avatar billede chakawoo.dk Nybegynder
23. juli 2004 - 13:41 #7
Jeg prøvede også at trace.write o_Totalpris ... den gav 181,34
Avatar billede snepnet Nybegynder
23. juli 2004 - 13:46 #8
Prøv lige at lav en test på det her :
dbParam_o_Totalpris.Value = o_Totalpris.ToString().Replace(",",".");
Avatar billede chakawoo.dk Nybegynder
23. juli 2004 - 13:49 #9
det ændre ikke rigtigt noget---- kan det tænkes at det er noget i access der skal ændres ?
Avatar billede snepnet Nybegynder
23. juli 2004 - 13:56 #10
Hvad sker der hvis du bare skriver hhv :

dbParam_o_Totalpris.Value = "100,00";
dbParam_o_Totalpris.Value = "100.00";

Og prøv det samme men skift :
dbParam_o_Totalpris.DbType = System.Data.DbType.Decimal;
Ud med denne :
dbParam_o_Totalpris.DbType = System.Data.DbType.String;
Avatar billede chakawoo.dk Nybegynder
23. juli 2004 - 14:04 #11
Hmmm Hvis jeg ændrer den til string i stedet for decimal .. så spiller det squ
Avatar billede chakawoo.dk Nybegynder
23. juli 2004 - 14:06 #12
Cool smid et svar så du kan få nogle points
Avatar billede snepnet Nybegynder
23. juli 2004 - 14:14 #13
Ok .. du får et svar her, men når du gør det på den måde kan du godt resikere at det kikser hvis du lægger det over på en anden server.
Hvis du får den slags problemer skriver du bare her igen ok ?
Avatar billede chakawoo.dk Nybegynder
23. juli 2004 - 14:17 #14
Tak for hjælpen..
Der er heldigvis ikke udsigt til at jeg skal flytte til en ny server..
Men man ved jo aldrig :-)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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