Accessのデータ \1,000 を VC++でそのまま表示したいのですが。 – プログラミング – Home

通知
すべてクリア

[解決済] Accessのデータ \1,000 を VC++でそのまま表示したいのですが。


takeshi
 takeshi
(@takeshi)
ゲスト
結合: 23年前
投稿: 83
Topic starter  

■動 作 環 境 :WindowsNT4.0
■開 発 環 境 :Visual C++6.0(SDI形式,MFC使用)
■データベース:Access2000(ODBC接続)
---------------------------------------
お世話になります。質問させて下さい。

▼やりたい事 ¥1,000 → ¥1,000

AccessのフィールドデータをそのままでVC++のフォーム上に文字列として表示したい。

Accessのフィールド設定:通貨型データ( ’¥ ’と ’,’が 自動で付いてくる)

これを ¥ も ,(桁区切り)も付けたままで表示したいのですが・・・。

---------------------------------------

▼現状 ¥1,000 → 1000.000

GetFieldValue で CString にデータを取って来ると ’¥ ’と ’,’が消えており、
おまけに、小数点以下第三位まで表示される。

---------------------------------------

これは自分で ’¥ ’を先頭に付加したりするしかないのですか?
’¥ ’はエスケープ文字だからですかね?・・・。

’¥ ’付加は Format で自分でもできますけど、桁区切りはどうすればよいのでしょうか?
宜しくお願いします。


引用未解決
トピックタグ
いもちぃ
 いもちぃ
(@いもちぃ)
ゲスト
結合: 23年前
投稿: 70
 

もともとアクセスが持ってるデータは、1000.000ですよ。
単価とか、金額でも小数点以下が必要なことがあるのです。
表示するときはACCESS君がかしこく整形して出してくれてるだけです。
ACCESS内だと、設定すれば赤字とかにもなりますよね。同じです。

やれるとすれば、フィールドの設定を解読することでしょうか・・・。
ひっぱってこれるのかな??

どちらにせよ、表示時の整形は自分でやるしかないと思います。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

>桁区切りはどうすればよいのでしょうか?
文字列操作で3桁毎にカンマを挿入すればいいでしょう。


返信引用
takeshi
 takeshi
(@takeshi)
ゲスト
結合: 23年前
投稿: 83
Topic starter  

お世話になっております。

不良PGさん、いもちぃさん ありがとうございます。
そういう事だったんですね。後は自分で整形します。


返信引用
takeshi
 takeshi
(@takeshi)
ゲスト
結合: 23年前
投稿: 83
Topic starter  

お世話になりました、という事で私の作成したコードを例として載せますね。
今回は必要な桁は7桁まででしたので、7桁までしかやってないです。

● Access2000 で入力した値 = 1,000(数値)

▼ VC++ で取ってきた文字列 = 1000.000(文字列)

■ 構築したい文字列 = ¥1,000(文字列)

-------------------------------------

レコードセット.GetFieldValue(フィールド名,文字列型変数);

整数型変数 = atoi(文字列型変数);

文字列型変数.Format(%d,整数型変数);

switch(文字列型変数.GetLength())
{
case 4:
文字列型変数.Insert(1,,);
文字列型変数.Insert(0,¥¥);
break;
case 5:
文字列型変数.Insert(2,,);
文字列型変数.Insert(0,¥¥);
break;
case 6:
文字列型変数.Insert(3,,);
文字列型変数.Insert(0,¥¥);
break;
case 7:
文字列型変数.Insert(1,,);
文字列型変数.Insert(5,,);
文字列型変数.Insert(0,¥¥);
break;
}

※ 画面上で分かり易くする為に ’¥’と ’,’は全角文字にしてます。

※7桁目以降は2、3、・・・ 個目のカンマ位置に注意が必要です。1個挿入したら1桁分ズ
レルから・・・。

以上ですー。


返信引用
駄犬
 駄犬
(@駄犬)
ゲスト
結合: 23年前
投稿: 59
 

> ※7桁目以降は2、3、・・・ 個目のカンマ位置に注意が必要です。1個挿入したら1桁
分ズ
>レルから・・・。

右のほうから挿入していけばズレないのでは?


返信引用
臨時の先生
 臨時の先生
(@臨時の先生)
ゲスト
結合: 23年前
投稿: 3
 

CString szBuff1, szBuff2, szBuff3;
szBuff1 = _T(1234567890.000);
int nIdx = szBuff1.Find('.');
if ( nIdx > -1 )
szBuff1 = szBuff1.Left(nIdx);
while ( szBuff1.GetLength() > 3 ) {
szBuff2 = szBuff1.Right(3);
szBuff1 = szBuff1.Left(szBuff1.GetLength()-3);
if ( szBuff3.IsEmpty() )
szBuff3 = szBuff2;
else
szBuff3 = szBuff2 + _T(,) + szBuff3;
}
if ( szBuff1.IsEmpty() )
szBuff3 = _T(\\) + szBuff3;
else
szBuff3 = _T(\\) + szBuff1 + _T(,) + szBuff3;


返信引用
pie
 pie
(@pie)
ゲスト
結合: 23年前
投稿: 28
 

面白そうなので俺も参加。
#コンパイル確認してません。

CString IntToCurrency(int n)
{
CString result;
LPCTSTR prefix = _T(\\);

if(n < 0)
{
prefix = _T(-\\);
n = -n;
}

result.Format(_T(%d), n);

int figure = 3:
int commas = (result.GetLength() - 1) / figure;
int index = (result.GetLength() - 1) % figure + 1;

while(commas--)
{
result.Insert(index, _T(','));
index += figure + 1;
}

result = prefix + result;

return result;
}


返信引用
べーちゃん
 べーちゃん
(@べーちゃん)
ゲスト
結合: 23年前
投稿: 49
 

値と表示用文字列を返すメソッドを持つクラスを作成したほうが
すっきりしていいかもしれませんね。


返信引用
takeshi
 takeshi
(@takeshi)
ゲスト
結合: 23年前
投稿: 83
Topic starter  

皆様の色々なやり方がありますね。

どれがいいかは私には分かりませんけど、自分と違うコードは参考になります。
また宜しくお願いします。

駄犬さん、
その通りですね。先に右から挿入すればいいですね。
ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました