CString::operator +=のメモリ不足について – プログラミング – Home

通知
すべてクリア

[解決済] CString::operator +=のメモリ不足について


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

MFC, VC 6.0, Win2000Serverの環境です。

2通りのSQL文をCStringで用意していずれかを実行しデータを表示するものです。

ユーザの環境で動かしたところ、1つのSQL文でのデータ表示はできるが
もう1つのSQL文ではメモリが不足してます。というエラーになります。
この2つのSQL文の違いは長さのみであとの処理はすべて同じです。

CString strSQL;
strSQL = select ....;
strSQL += from ....;
.
.
としてかなり多くの文字列を連結してます。
MSDNのヘルプにある
「メモリ不足の例外に注意する必要があります。」というのが気になります。
GetLength()をしてみると、2964バイトとなりました。
みなさんはどのようにSQL文を作成していますか?CStringの+=オペレータ使用に
留意すべきことを教えてください。
そしてこの場合どのように対処すべきかご教授おねがいします。


引用未解決
トピックタグ
EIJI
 EIJI
(@EIJI)
ゲスト
結合: 24年前
投稿: 76
 

「メモリが不足してます。というエラー」は「どこで」起きますか?
ほんとにCString::operator +=で起きてます?
原因は他のところにあるような気がします。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

たかが3KBかそこらでメモリ不足はないんじゃないかと。


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

ユーザの環境でエラーになるため、デバッグできないのです...
例外処理のtryとcatchをしてますが
メッセージでは「メモリが不足してます」のみです。

ListViewのカラム9個にデータを表示して、カスタムドローで
太字にしたり、文字に色をつけたり、背景色を各行に変更してます。
それがまずいのでしょうか?

二通りあるSQL文の片方は大丈夫で、もうひとつのほうでエラーになるということしか
違いがわからないのでCstring+=のせいかと思いました。

>原因は他のところにあるような気がします。

どんなことだと思いますか?教えてください!


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

>>原因は他のところにあるような気がします。
>どんなことだと思いますか?教えてください!

コード見ないと判断できませんて。


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

どちらかというと、DBシステム側でSQLを処理しきれずに
メモリが足りなくなっているような気がしますね。

DBが何だか分かりませんが、
コンソールツール等から当該のSQLを直接入力して
正しく動くかどうか調べてみてはどうでしょう。


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
 

ログに出すなりコンソールを使ってprintfするなりして、
SQL文を出力してみてはどうでしょうか?


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

申し訳ないです。メモリ不足のエラーは
CSTRINGの+=ではなく、CRecordset::Openのところでした。
この質問はCStringの+=についてでしたので、
>たかが3KBかそこらでメモリ不足はないんじゃないかと。
ということで解決とさせていただきます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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