2014年6月2日月曜日

SQLExpress money型が通貨記号とカンマを編集して返す。

古いシステムをWin7に移行した。

 一部のデータベースの値が0表示されると言われた。そう、money型である。

ODBCを使っていて、MFCのCRecordSetを使っている。SQLEXPRESS2005である。VisualStudio2010で再コンパイル済み。

クレームが入って、金額入力したのに表示されないと。

自分のPCで確認したら、money型の読取りにてCStringに \5,800と入っていた。

通貨記号とカンマが編集されている。それを旧来のソースではatolで数値に戻していた。もちろん、0になる。

いろいろ触ってみたが、治らないので、仕方なく、通貨記号とカンマを外すロジックを入れて動かした。

誰が互換性を無くしたのか。Microsoftを信じてはいけない。これからは
SQLServerを使わないか、money型を使わないことにしよう。MySQLにした方が良いかも。Microsoftはそろそろヤバイかもね。

long atol_v(const char *pStr)
{
    //// 2014/06/02 本当にこんなことってあるの?
    //// money型は文字列で貰うと¥と,が編修済みなの。
    char szWk[256];
    char *pszWk = szWk;
    while(*pStr)
    {
        if ((*pStr == '-') ||
            ((*pStr >= '0') && (*pStr <= '9')))
            *pszWk ++ = *pStr;
        pStr++;
    }
    *pszWk = 0;
    return atol(szWk);
   
}

0 件のコメント:

コメントを投稿