tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von raiguen
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
1348
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    timee timee ist offline Mitglied Bronze
    Registriert seit
    Jan 2009
    Beiträge
    36
    Hi,

    derzeit habe ich folgendes Problem!
    Mit VB.NET verwalte ich Artikel mit ek (Einkaufspreis) und vk (Verkaufspreis) in Euro.
    Wenn ich die Eingaben nun mit Double.Prase(xyz) in eine Variable schreibe und sie dann per cmd.ExecuteScalar() in die MySQL Datenbank schreibe habe ich das Problem, dass dort unter Decimal das Trennzeichen nicht "," (Komma) sondern "." (Punkt) ist!
    Im Moment habe ich es so glöst, dass die DB auf varchar(5) steht, was mir aber nicht gefällt.
    Übergebe ich in VB.NET einen Preis mir . (z.b. 1.90), erkennt er den Punkt nicht als Trennzeichen, sondern als Hundertertrennung und schreibt 190 in die DB.
    Mit einer Funktion, welche den Punkt durch eun Komma ersetzt habe ich schon eingebaut, aber die DB muss dazu immer noch auf varchar(5) stehen.

    Bekommt man das irgendwie anders gelöst?

    THX
    Timee
     

  2. #2
    Kankomi Kankomi ist offline Grünschnabel
    Registriert seit
    Mar 2009
    Beiträge
    3
    Ich hatte das selbe Problem. Ich weiss nicht wie du deine Daten genau in die Datenbank schreibst, ich jedenfalls habe meine Daten aus einer Textbox gelesen und per Update Befehl in die DB geschrieben. Sieht dann ungefähr so aus

    Code :
    1
    2
    3
    4
    
    dim str as string = textbox.text.Replace(",",".")
     
    ...
    cmdStr = "UPDATE tabelle Set Preis = " & str & " WHERE ID = 2;"

    'Preis' ist dann ein Double in der DB. So funktioniert es jedenfalls bei mir, vielleicht hilft es dir ja weiter.
     

  3. #3
    timee timee ist offline Mitglied Bronze
    Registriert seit
    Jan 2009
    Beiträge
    36
    Hast du dann die DB auf varchar, text oder so stehen?
    Meine DB hatte ich am anfang auf Decimal (was mir am besten gefallen hat), den mit varchar(5) schneidet er die Nullen am Ende ab, was nicht so schön aussieht, so wir z.b. aus 1,90 nach dem DB Update eine 1,9
     

  4. #4
    raiguen raiguen ist offline Mitglied Silber
    Registriert seit
    Feb 2008
    Ort
    Salzhemmendorf(Nds)
    Beiträge
    51
    Moin,

    SQL-CommandString so zusammenstellen verursacht IMMER Probleme - wie ja selbst festgestellt

    Die eleganteste Lösung ist -> Verwendung von Parametern.

    Beispielcode
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    public void PreisUpdate( string preis, int id)
    {
    MySqlCommand cmdStr = new MySqlCommand (  "UPDATE tabelle SET Preis = ?PREIS  WHERE ID = ?ID" );
    cmdStr.Parameters.Add ( "?PREIS", MySqlDbType.Decimal, 5 );
    cmdStr.Parameters.Add ( "?ID", MySqlDbType.Int16, 0 );
    ...
    }
    Hier wird erstmal das Statement vorbereitet und kann dann wie folgt aufgerufen werden:
    Code :
    1
    
    PreisUpdate ( meineTextBox.Text,  meineDatensatzID );

    Der Vorteil von Parametern ist u,.a. der, dass die Datenbank bzw der DBServer den übergebenen Parameterwert automatisch in das Datenbank-conforme Format umwandelt; in Eurem Fall z.B. das deutsche Gleitkomma-Format in das allgemein übliche US-Gleitkomma-Format -> will sagen: das dt. Dezimaltrennzeichen wird entsprechend in das US-Dezimaltrennzeichen umgewandelt.

    Weitergehende Informationen zu Parametern siehe u.a. hier: http://dev.mysql.com/doc/refman/5.1/de/index.html (MySqlCommand.Parameters)

    Das Bsp. oben ist in C# dürfte aber ohne grosse Probs auf VB umzusetzen sein...

    Rainer
    Kankomi bedankt sich. 
    Es ist erstaunlich, was man alles findet, wenn man etwas sucht...

  5. #5
    Kankomi Kankomi ist offline Grünschnabel
    Registriert seit
    Mar 2009
    Beiträge
    3
    Zitat Zitat von raiguen Beitrag anzeigen
    Moin,

    SQL-CommandString so zusammenstellen verursacht IMMER Probleme - wie ja selbst festgestellt

    Die eleganteste Lösung ist -> Verwendung von Parametern.

    Beispielcode
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    public void PreisUpdate( string preis, int id)
    {
    MySqlCommand cmdStr = new MySqlCommand (  "UPDATE tabelle SET Preis = ?PREIS  WHERE ID = ?ID" );
    cmdStr.Parameters.Add ( "?PREIS", MySqlDbType.Decimal, 5 );
    cmdStr.Parameters.Add ( "?ID", MySqlDbType.Int16, 0 );
    ...
    }
    Hier wird erstmal das Statement vorbereitet und kann dann wie folgt aufgerufen werden:
    Code :
    1
    
    PreisUpdate ( meineTextBox.Text,  meineDatensatzID );

    Der Vorteil von Parametern ist u,.a. der, dass die Datenbank bzw der DBServer den übergebenen Parameterwert automatisch in das Datenbank-conforme Format umwandelt; in Eurem Fall z.B. das deutsche Gleitkomma-Format in das allgemein übliche US-Gleitkomma-Format -> will sagen: das dt. Dezimaltrennzeichen wird entsprechend in das US-Dezimaltrennzeichen umgewandelt.

    Weitergehende Informationen zu Parametern siehe u.a. hier: http://dev.mysql.com/doc/refman/5.1/de/index.html (MySqlCommand.Parameters)

    Das Bsp. oben ist in C# dürfte aber ohne grosse Probs auf VB umzusetzen sein...

    Rainer
    Ahh, vielen Dank so ist es natürlich noch viel besser und eleganter . Das mit den Parametern wollt ich sowieso schon mal genauer wissen, jetzt weis ichs, Danke

    Kankomi
     

  6. #6
    timee timee ist offline Mitglied Bronze
    Registriert seit
    Jan 2009
    Beiträge
    36
    Danke für die Info, werd mich da mal schlau machen!
     

Ähnliche Themen

  1. [c++] dezimal --> binär
    Von DarkSean im Forum C/C++
    Antworten: 17
    Letzter Beitrag: 14.11.10, 21:33
  2. Dezimal -> Hex Problem
    Von NoGFX im Forum Flash Plattform
    Antworten: 5
    Letzter Beitrag: 10.05.07, 16:27
  3. Hexa --> Dezimal
    Von yidaki im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 15.01.05, 20:14
  4. Von dezimal in Bin, Okt, Hex
    Von Ganja03 im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 06.12.04, 15:26
  5. Dezimal -> Hex
    Von Strater im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 24.08.04, 22:42