Double mit Komma oder Punkt ?

nerddestroyer

Grünschnabel
Servus Leute,

hab ein Problem mit dem Datentyp double. Manche Datenbanken verlangen zur trennung der Dezimalstellen ein Punkt, manche ein Komma.

Wie kann ich das am geschicktesten VB6 sagen, was er wählen soll?

Danke!
 
Das Zahlenformat in VB hat doch immer den Punkt als Dezimaltrennzeichen. Nun ist es abhängig davon, welcher Art die Datenbankzugriffe sind, die Du machst. Wenn Du Zahlenfelder über SQL-Befehle, ADO, ODBC oder was auch immer direkt im VB durchführst, wird dies durch die ADO, ODBC usw. Treiber automatisch gehandled. Das sollte wirklich keine Probleme geben.

Probleme entstehen nur, wenn Du Textdateien erzeugst, die Du dann z.B. mit Excel öffnest. Im Excel kann man beim Import von Textdateien das verwendete Dezimaltrennzeichen einstellen, wenn sich die von den Ländereinstellungen im Windows unterscheidet.

Auf welche Weise greifst Du denn auf Datenbanken zu, welche Datenbank nutzt Du?

Gruss
ronaldh
 
Per ADODB. Und dann entweder auf einen MySQL oder MSSQL Server.

Muss ich bei ADODB was spezielles einstellen, damit das automatisch geregelt wird?
 
Wenn Du als Feldtyp Zahlenfelder hast, kann es da meiner Kenntnis nach keine Probleme geben.

Wenn im nachstehenden Beispiel ein Feld "Umsatz" als Double in der Datenbank vorhanden ist, sollte das Beispiel auch funktionieren.

Code:
   Dim Rc as new adodb.recordset
   Dim x as Double
   rc.Addnew
   rc.Fields("Umsatz").Value = x
   rc.Update

Etwas anderes ist es, wenn Du die Zahlenwerte z.B. über Textboxen im VB eingeben lässt, und jemand dort das Komma als Dezimalzeichen benutzt. Das musst Du dann in einen Punkt konvertieren, da VB intern den Punkt als Dezimalzeichen benutzt. Und vorher natürlich alle eventuell vorhandenen anderen Punkte entfernen (falls der Anwender Tausender-Trennpunkte eingegeben hat).
 
Wenn Du als Feldtyp Zahlenfelder hast, kann es da meiner Kenntnis nach keine nach keine Probleme geben.

Leider doch, nämlich wenn du die Daten über ein SQL aktualisierst. Dies ist in der Regel schneller.
Das Problem ist nämlich, das bei der Umwandlung in einen String die Länderkonventionen angewandt werden und so wird aus der double 0.5 der string 0,5 was in einem Sql zu dem Fehler führt, dass die Anzahl der Felder nicht stimmt also musst du im Falle eines Sql-Befehls
deine Double am besten von Hand konvertieren
Visual Basic:
Replace ( Replace(deinedouble,",","."),",","")

Das 1. Replace mache ich wegen evtl. Tausenderpunkte

Grüsse bb
 
Leider doch, nämlich wenn du die Daten über ein SQL aktualisierst.

Sorry, aber dieses Problem hatte ich noch nie. Ich arbeite nahezu ausschließlich über SQL, mit schnellen Rechnern und Servern und komplexen Datenbanken, aber dass die Zahlenkonvertierung in einen String nicht funktioniert, und da ein Komma statt Punkt kommt, habe ich wirklich noch nie erlebt.

Die Erstellung des SQL-Strings entsteht ja ohnehin zunächst im VB. Dass dabei gerade bei Zahlen aus Textboxen ggf. eine Zeichenkonvertierung erforderlich ist, ist logo. Aber dass dieser String hinterher falsch beim SQL Server ankommt, halte ich für sehr unwahrscheinlich.
 
Dann erklär mir das

Visual Basic:
Private Sub test()
    Dim x As Double
    Dim sql As String
    
    x = 0.5
    
    sql = "update Tabelle1 set Wert = " & x
    
    Call MsgBox(sql)

End Sub
ergibt bei mir
SQL:
update Tabelle1 set Wert = 0,5

was auf den mir bekannten sql systemen einen Fehler hervor ruft.


Grüsse bb
 
Zuletzt bearbeitet:
Ok, ich nutze niemals die Verkettung mit "&" bei unterschiedlichen Datentypen. Das führt in VB unter vielen Umständen zu unerwarteten Ergebnissen, weil VB hier eine interne Typ-Konvertierung durchführen muss, und dies nicht immer so abläuft, wie man will.

Soviel ich mich erinnern kann, arbeitet der &-Operator mit dem Datentyp Variant, falls die übergebenen Ausdrücke nicht Strings sind. Mit der str() Funktion wird ein echter String hergestellt.

Sauberer ist dann wohl doch folgender Weg:

Code:
Option Explicit

Private Sub Command1_Click()
   Dim x As Double
   Dim sql As String
   x = 0.5
   sql = "update Tabelle1 set Wert = " & Str(x)
   Call MsgBox(sql)
End Sub

Da kommt als Ergebnis raus:

update Tabelle1 set Wert = .5

Und dann klappt es auch mit der Datenbank.
 
Zurück