Announcement

Collapse
No announcement yet.

Dezimaltrennzeichen in Ergebnissen;

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dezimaltrennzeichen in Ergebnissen;

    Hallo,

    von einem MS SQL Server 2008 R2 werden die Ergebnisse z.B. der Abfrage

    "select * from mw_tab where zeit = 1405118160 and gma_idf=1011"

    so zurückgeliefert (mit störenden Dezimaltrennteichen) :

    Columnname: gma_idf; columntype: numeric; Value: 1'011.00
    Columnname: zeit; columntype: int; Value: 1'405'118'160.00

    Die Abfrage erfolgt aus einem C-Programm über eine ODBC32-Verbindung, ausgegeben werden die Werte ebenfalls mit dem C-Programm in eine Logdatei.
    Die Rückgabe der Abfrageergebnisse mit den störenden Dezimalteilern erfolgt aber offensichtlich durch den Server selbst, im C-Programm werden die Abfrageergebnisse nur als Text übernommen und verarbeitet.

    Welche Einstellungen muss man anpassen, dass die Anführungszeichen als Dezimaltrennzeichen weggelassen werden ?
    Zuletzt editiert von interrupt; 12.07.2014, 15:06. Reason: Konkretisierung

  • #2
    Originally posted by interrupt View Post
    Columnname: gma_idf; columntype: numeric; Value: 1'011.00
    Columnname: zeit; columntype: int; Value: 1'405'118'160.00

    Die Rückgabe der Abfrageergebnisse mit den störenden Dezimalteilern erfolgt aber offensichtlich durch den Server selbst, im C-Programm werden die Abfrageergebnisse nur als Text übernommen und verarbeitet.
    Mmh, ja, wie passt das denn zusammen? Du hast nicht-text-Felder und übernimmst sie als Text in C.
    Da könnte man ins Grübeln kommen. Das kann doch gar nicht gehen oder? Ich mein C ist schließlich nicht VB!
    Ich stell mal eine Gegenfrage, wie fragst Du die Felder als Text in C ab, obwohl es keine Textfelder sind?

    Als Tipp: Wenn sich niemand darum kümmert, definierte Typen zu berücksichtigen, dann knallt es. Knallen ist aber uncool, also gibt es tolle Routinen, die unwissenenden oder bequemen Programmieren die Arbeit abnehmen und implizite Typkonvertierung durchführen.
    Dabei arbeiten diese Routinen nicht total willkürlich, sondern verwenden vordefinierte Defaulteinstellungen.
    Gruß, defo

    Comment


    • #3
      Die betreffende Funktion sieht so aus :

      SQLGetData( hstmt_source, (UWORD)i, (SWORD)SQL_C_CHAR, (PTR)&tempstr, (SDWORD)sizeof(tempstr)-1, (SDWORD FAR*)&cbData );

      Die Daten der SQL-Abfrage werden in der Variable "tempstr" übergeben.
      Das Programm funktioniert seit Jahren, es spiegelt die jeweils neuen Daten einer Tabelle in der Datenbank auf einem Server in die Datenbank auf einem anderen Server.
      Verwendet wird jeweils die Datenbank MS SQL 2008 R2.
      Jetzt wurde ein weiterer Server mit MS SQL 2008 R2 in Betrieb genommen, auf den ebenfalls die Daten aus der Datenbank eines anderen Servers gespiegelt werden sollen, dabei tritt das beschriebene Problem mit dem Einfügen der 1000-er Dezimaltrennzeichen auf.
      Es handelt sich also wohl um eine reine Konfigurationsfrage im Bereich der SQL-Server (bzw. auf Betriebssystemebene ?)

      Comment


      • #4
        Problem gelöst :

        Beim ODBC32-Treiber wurde die Option "Ländereinstellungen bei der Anzeige von Währungs-, Zahlen- Datums- und Zeitangaben verwenden" DEAKTIVIERT.

        Dann lief das Programm auch auf dem neuen Server einwandfrei.

        Comment

        Working...
        X