Frage

Ich pflege eine App für einen Kunden, die an zwei Standorten verwendet wird.Einer in England und einer in Polen.

Die Datenbank wird in England gespeichert und verwendet das Format 1000,00 £ als Währung, die Informationen werden jedoch lokal in Polen gesammelt, wo 1000,00 das Format ist.

Meine Frage ist, ob es in VB6 eine Funktion gibt, die eine Währungszeichenfolge in einem lokalen Format annimmt und in ein anderes konvertiert, oder muss ich einfach die Zeichenfolge analysieren und ersetzen, oder.?

Übrigens habe ich mir CCur angesehen, bin mir aber nicht sicher, ob das das tut, was ich will.

War es hilfreich?

Lösung

Die Daten werden nicht tatsächlich als Zeichenfolge gespeichert "£1000.00";Es wird in einem numerischen Format gespeichert.

Seitenleiste: Gewöhnlich werden Datenbanken so eingerichtet, dass sie Geldbeträge speichern Dezimal Datentyp (auch genannt Geld in manchen DBs) oder als Gleitkommazahl (auch genannt doppelt).

Der Unterschied besteht darin, dass es gespeichert wird als Dezimal Bestimmte Zahlen wie 0,01 werden genau dargestellt, während in doppelt Diese Zahlen können nur ungefähr gespeichert werden, was zu Rundungsfehlern führt.

Die Datenbank erscheint die Nummer speichern als "£1000.00" weil etwas es für die Anzeige formatiert.In VB6 gibt es eine Funktion FormatCurrency das würde eine Zahl wie 1000 annehmen und eine Zeichenfolge wie zurückgeben "£1000.00".

Sie werden feststellen, dass die FormatCurrency Die Funktion akzeptiert kein Argument, das angibt, welche Art von Währung verwendet werden soll.Das liegt daran, dass es zusammen mit allen anderen gebietsschemaspezifischen Funktionen in VB die Währung anhand des aktuellen Gebietsschemas des Systems (über die Windows-Systemsteuerung) ermittelt.

Das bedeutet, dass auf meinem System

Debug.Print FormatCurrency(1000)

wird gedruckt $1,000.00, aber wenn ich dasselbe Programm auf einem Windows-Computer ausführe, der auf das britische Gebietsschema eingestellt ist, wird es wahrscheinlich gedruckt £1,000.00, was natürlich etwas ganz anderes ist.

Ebenso haben Sie irgendwo, ich kann nicht sagen, wo, in Polen, einen Code, der dafür verantwortlich ist, die Zeichenfolge des Benutzers zu analysieren und in eine Zahl umzuwandeln.Und wenn dieser Code wieder in Visual Basic ist, ist er wieder auf das Bedienfeld angewiesen, um zu entscheiden, ob "". oder "," ist der Tausende Separator und ob "" oder "." ist der Dezimalpunkt.

Die Funktion CDbl wandelt sein Argument in eine Zahl um.So zum Beispiel auf meinem System in den USA

Debug.Print CDbl("1.200")

ergibt die Zahl eins und zwei, auf einem System, dessen Systemsteuerung auf europäische Formatierung eingestellt ist, würde es die Zahl eintausendzweihundert ergeben.

Es ist möglich, dass das Problem darin besteht, dass jemand einen Computer mit dem regionalen Bedienfeld "verwendet" sitzt. " als Dezimalenteil, aber sie tippen "," als Dezimalenteiler.

Andere Tipps

Welche Datenbank verwenden Sie?Und in welchem ​​Datentyp ist die Menge gespeichert?

Solange Sie immer von einem Format in ein anderes konvertieren, müssen Sie keine Parsen durchführen, nur "ersetzen". mit "," oder umgekehrt.Möglicherweise müssen Sie auch das „£“-Zeichen entfernen, wenn dieses in Ihrer Zeichenfolge gespeichert ist.

Es gibt wahrscheinlich eine richtige Antwort, wenn es um Kulturobjekte und dergleichen geht, aber der einfachste Weg wäre, die Eingabe von der polnischen Eingabe zu übernehmen, das , durch ein . zu ersetzen und es dann in Ihrer Datenbank als Typ „money“ oder „decimal“ zu speichern ".Wenn Sie wissen, dass sie (möglicherweise pro Benutzer konfigurierbar) immer Zahlen entweder auf Polnisch oder Englisch eingeben, könnten Sie eine Funktion verwenden, mit der Sie alle eingegebenen Zahlen durchlaufen lassen, um die Zeichenfolge in eine ordnungsgemäße Variable vom Typ „Dezimal“ umzuwandeln.Zu Anzeigezwecken könnten Sie außerdem eine andere ähnliche Funktion ausführen, um sicherzustellen, dass der Benutzer immer das Zahlenformat sieht, mit dem er vertraut ist.Der Schlüssel hier besteht darin, es in eine Dezimalzahl umzuwandeln, sobald Sie es vom Benutzer erhalten, und es erst im letzten Schritt wieder in eine Zeichenfolge umzuwandeln, bevor Sie es an den Benutzer senden.

@KiwiBastard ja, das würde ich denken.Speichern Sie Ihren Betrag in einem „(n)varchar“-Feld oder verwenden Sie ein Feld vom Typ „Währung/Dezimalzahl“?Im letzteren Fall werden die Währungssymbole und Trennzeichen von Ihrem Kunden hinzugefügt und es besteht keine Notwendigkeit, etwas in der Datenbank zu ersetzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top