Avatar billede simsen Mester
14. marts 2007 - 19:38 Der er 8 kommentarer og
1 løsning

Gemme decimal tal i access database

Hej,

Jeg har følgende kode, hvor jeg forsøger at gemme et decimal tal ind i databasen.

Altså jeg skriver eksempelvis 56,66 ind i et tekstfelt, som så skal gemmes i databasen. Den gemmer det så i databasen som 5666 (jeg har også forsøgt med 56.66 med samme resultat). Problemet ligger ved "decimal Porto".

Det underlige er, jeg har et andet beløb, hvor jeg gør nøjagtig det samme i samme funktion, hvor den gemmer korrekt ned i databasen.....

Min funktion:

public FStatus SetUpdateInvoice(int KundeID, int Fakturanr, DateTime Dato, decimal Porto, decimal Momssats, decimal PrisIaltExMoms, string KundeNavn, string KundeAdresse, string KundePostnr, string KundeByen, string FirmaBank, string FirmaRegNr, string FirmaBankKontoNr)
    {
        FStatus status = FStatus.Failure;

        try
        {
            command.CommandText = "UPDATE Faktura SET KundeID = @KundeID, Dato = @Dato, Porto = @Porto, Momssats = @Momssats, PrisIaltExMoms = @PrisIaltExMoms, KundeNavn = @KundeNavn, KundeAdresse = @KundeAdresse, KundePostnr = @KundePostnr, KundeByen = @KundeByen, FirmaBank = @FirmaBank, FirmaRegNr = @FirmaRegNr, FirmaBankKontoNr = @FirmaBankKontoNr WHERE Fakturanr = @Fakturanr";

            command.Parameters.Clear();
            command.Parameters.Add(new OleDbParameter("@KundeID", KundeID));
            command.Parameters.Add(new OleDbParameter("@Dato", Dato));
            command.Parameters.Add(new OleDbParameter("@Porto", Porto));
            command.Parameters.Add(new OleDbParameter("@Momssats", Momssats));
            command.Parameters.Add(new OleDbParameter("@PrisIaltExMoms", PrisIaltExMoms));
            command.Parameters.Add(new OleDbParameter("@KundeNavn", KundeNavn));
            command.Parameters.Add(new OleDbParameter("@KundeAdresse", KundeAdresse));
            command.Parameters.Add(new OleDbParameter("@KundePostnr", KundePostnr));
            command.Parameters.Add(new OleDbParameter("@KundeByen", KundeByen));
            command.Parameters.Add(new OleDbParameter("@FirmaBank", FirmaBank));
            command.Parameters.Add(new OleDbParameter("@FirmaRegNr", FirmaRegNr));
            command.Parameters.Add(new OleDbParameter("@FirmaBankKontoNr", FirmaBankKontoNr));
            command.Parameters.Add(new OleDbParameter("@Fakturanr", Fakturanr));

            command.ExecuteNonQuery();

            status = FStatus.Success;
        }
        catch
        { }

        return status;
    }


Her kalder jeg så funktionen:
if (api.SetUpdateInvoice(KundeId, Convert.ToInt32(txtNewInvoiceNo.Text), InvoiceDate, Convert.ToDecimal(txtNewPorto.Text), Convert.ToDecimal(txtNewVat.Text), Convert.ToDecimal(txtTotalAmount.Text), CustomerName, CustomerAdress, CustomerPostnr, CustomerCity, CompanyBank, CompanyBankReg, CompanyBankAccount) == FaktureringApi.FStatus.Success)

Den der går godt er: Convert.ToDecimal(txtTotalAmount.Text)
Den der går skidt er: Convert.ToDecimal(txtNewPorto.Text)

Jeg HAR checket databasen.....
De to felter er fuldstændig identisk:
Feltstørrelse: Decimal
Format: Standard
Nøjagtighed: 18
Decimaler: 2
AntalDecimaler: 2

Nogen der kan hjælpe mig - det er jo ret vigtigt, at beløbet bliver gemt korrekt i databasen......

mvh
simsen :-)
Avatar billede kalp Novice
14. marts 2007 - 20:11 #1
har du prøvet at bare sende det som tekst og lade din command objects parameter metode selv konvertere den til decimal?
Avatar billede simsen Mester
14. marts 2007 - 20:14 #2
Nej det har jeg ikke - gider du smide et eksempel - ved ikke lige hvad du mener?

mvh
simsen :-)
Avatar billede kalp Novice
14. marts 2007 - 20:21 #3
ja men du skal ikke lave andet om en at bare sende txtNewPorto.Text med som parameter uden at lave Convert.ToDecimal altså..

og så skal du selvfølgelig gøre så metoden modtager en string Porto og ikke decimal porto.
Avatar billede simsen Mester
14. marts 2007 - 20:27 #4
Det er det med at modtage en string og så lade min command objects parameter konvertere, jeg er i tvivl om?
Avatar billede kalp Novice
14. marts 2007 - 20:32 #5
vi prøver igen..

du skal bare rette i din metode..

fra

public FStatus SetUpdateInvoice(int KundeID, int Fakturanr, DateTime Dato, decimal Porto, decimal Momssats, decimal PrisIaltExMoms, string KundeNavn, string KundeAdresse, string KundePostnr, string KundeByen, string FirmaBank, string FirmaRegNr, string FirmaBankKontoNr)

til

public FStatus SetUpdateInvoice(int KundeID, int Fakturanr, DateTime Dato, string Porto, decimal Momssats, decimal PrisIaltExMoms, string KundeNavn, string KundeAdresse, string KundePostnr, string KundeByen, string FirmaBank, string FirmaRegNr, string FirmaBankKontoNr)

og den her skal du ikke lave

Convert.ToDecimal(txtNewPorto.Text)


men bare

txtNewPorto.Text
Avatar billede simsen Mester
14. marts 2007 - 20:33 #6
Jo men skal jeg intet lave inde i min funktion, som modtager strengen?

try
        {
            command.CommandText = "UPDATE Faktura SET KundeID = @KundeID, Dato = @Dato, Porto = @Porto, Momssats = @Momssats, PrisIaltExMoms = @PrisIaltExMoms, KundeNavn = @KundeNavn, KundeAdresse = @KundeAdresse, KundePostnr = @KundePostnr, KundeByen = @KundeByen, FirmaBank = @FirmaBank, FirmaRegNr = @FirmaRegNr, FirmaBankKontoNr = @FirmaBankKontoNr WHERE Fakturanr = @Fakturanr";

            command.Parameters.Clear();
            command.Parameters.Add(new OleDbParameter("@KundeID", KundeID));
            command.Parameters.Add(new OleDbParameter("@Dato", Dato));
            command.Parameters.Add(new OleDbParameter("@Porto", Porto));
            command.Parameters.Add(new OleDbParameter("@Momssats", Momssats));
            command.Parameters.Add(new OleDbParameter("@PrisIaltExMoms", PrisIaltExMoms));
            command.Parameters.Add(new OleDbParameter("@KundeNavn", KundeNavn));
            command.Parameters.Add(new OleDbParameter("@KundeAdresse", KundeAdresse));
            command.Parameters.Add(new OleDbParameter("@KundePostnr", KundePostnr));
            command.Parameters.Add(new OleDbParameter("@KundeByen", KundeByen));
            command.Parameters.Add(new OleDbParameter("@FirmaBank", FirmaBank));
            command.Parameters.Add(new OleDbParameter("@FirmaRegNr", FirmaRegNr));
            command.Parameters.Add(new OleDbParameter("@FirmaBankKontoNr", FirmaBankKontoNr));
            command.Parameters.Add(new OleDbParameter("@Fakturanr", Fakturanr));

            command.ExecuteNonQuery();

            status = FStatus.Success;
        }
        catch
        { }
Avatar billede kalp Novice
14. marts 2007 - 20:43 #7
du skal ikke lave noget andet end jeg skrev.
som jeg skrev fra start af skulle command objektet gerne klare resten selv.
Avatar billede simsen Mester
14. marts 2007 - 21:08 #8
gawi

Du har ret........forstår bare så ikke hvorfor jeg altid skal hente i forskellige formater (når jeg selecter) - men skidt pyt - det virker......så nu har jeg bare en phannens masse felter, jeg skal have ændret.....

Smid et svar.....og tak for hjælpen

mvh
simsen :-)
Avatar billede kalp Novice
14. marts 2007 - 21:15 #9
du får et svar her.. :)
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