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の+=オペレータ使用に
留意すべきことを教えてください。
そしてこの場合どのように対処すべきかご教授おねがいします。
「メモリが不足してます。というエラー」は「どこで」起きますか?
ほんとにCString::operator +=で起きてます?
原因は他のところにあるような気がします。
たかが3KBかそこらでメモリ不足はないんじゃないかと。
ユーザの環境でエラーになるため、デバッグできないのです...
例外処理のtryとcatchをしてますが
メッセージでは「メモリが不足してます」のみです。
ListViewのカラム9個にデータを表示して、カスタムドローで
太字にしたり、文字に色をつけたり、背景色を各行に変更してます。
それがまずいのでしょうか?
二通りあるSQL文の片方は大丈夫で、もうひとつのほうでエラーになるということしか
違いがわからないのでCstring+=のせいかと思いました。
>原因は他のところにあるような気がします。
どんなことだと思いますか?教えてください!
>>原因は他のところにあるような気がします。
>どんなことだと思いますか?教えてください!
コード見ないと判断できませんて。
どちらかというと、DBシステム側でSQLを処理しきれずに
メモリが足りなくなっているような気がしますね。
DBが何だか分かりませんが、
コンソールツール等から当該のSQLを直接入力して
正しく動くかどうか調べてみてはどうでしょう。
ログに出すなりコンソールを使ってprintfするなりして、
SQL文を出力してみてはどうでしょうか?
申し訳ないです。メモリ不足のエラーは
CSTRINGの+=ではなく、CRecordset::Openのところでした。
この質問はCStringの+=についてでしたので、
>たかが3KBかそこらでメモリ不足はないんじゃないかと。
ということで解決とさせていただきます。