古いシステムを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 件のコメント:
コメントを投稿