- - PR -
VC++でMSDEからのデータ取得
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-09-02 14:13
はじめまして、よろしくご指導ご鞭撻ください。
Visual Stidio6.0のVC++を使用しデータを取得するプログラミングを作成しています。 DB(MSDEを使用)からあるカラムのデータを取得する時のみ 「メモリ不足が不足しています」 というポップが現れ、そこで終了してしまいます。 Accessを使用しMSDEを「.adp」形式でテーブルのデータ定義を参照したところ 「ntext型」となっておりました。(初めて聞きました・・・。) 問題点を切り分ける為、Access(モジュールを作成しただSQLを発行し該当データを取得する。)でVCで作成したSQLを発行したところ取得できました。OSQLでも取得は可能でした。 何か回避方法などお知りでしたら、ご教授ください。 |
|
投稿日時: 2005-09-04 11:40
そこで真っ先に疑うべきなのは、メモリが不足しているか否かです。実際に取得しているデータのサイズはどの程度なのですか?十分小さなデータ量でも同じ現象が起こるのですか?
VC++で作成したアプリケーションが利用できるヒープメモリの容量は、リンクオプションで/HEAP:を使って指定する事が出来ます。デフォルトでは1MBです。これを適当に増やしても改善されませんか? #ちなみにMSDEへの接続には何を用いているのでしょうか? #ADOですか?ODBC?それとも・・・ _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ [ メッセージ編集済み 編集者: 甕星 編集日時 2005-09-04 11:41 ] |
|
投稿日時: 2005-09-05 14:46
甕星様
ご教授ありがとうございます。 接続はODBCでおこなっております。 データサイズはntext型(16)になります。 該当テーブルのテンポラリを作成し、ntext型をtext型に変更しデータを テンポラリにInsertし下記ソースで実行したところ、該当データを取得する事 ができました・・・・。 私としてはテンポラリしそこへInsertをしてテーブルをDropするという事をしたく ないので、なるべく下記のソースでシンプルに行いたいのです。 またもう一つ質問させてください。 「ヒープメモリの容量は、リンクオプションで/HEAP:を使って指定する事が出来ます」 これはどのように使用するのでしょうか? お手数おかけしますが宜しくお願い致します。 ------------------ ソースになります -------------------- void CDBtestDlg::WUP_DB() { CString strCon; CString strSql; strCon = "DSN=whatsup;UID=administrator;PWD="; //実行SQL生成 strSql = "select * from SystemActivityLog"; strSql = "select sDetails from ActionActivityLog_Temp"; CDatabase db; //接続 db.OpenEx( _T( strCon ), CDatabase:penReadOnly | CDatabase::noOdbcDialog ); //実行 CRecordset rs( &db ); rs.Open( CRecordset::forwardOnly, _T( strSql ) ); CString strResult; CODBCFieldInfo fi; short nFields = rs.GetODBCFieldCount(); short index; if (!rs.IsEOF()) { strResult = ""; for(index = 0; index < nFields; index++ ) { rs.GetODBCFieldInfo(index, fi); strResult = strResult + fi.m_strName + ","; } } CString strValue; int i = 0 ; CDBVariant varValue; while( !rs.IsEOF() ) { strResult = ""; for(index = 0; index < nFields; index++ ) { //////// ここでntext型のデータ取得時に落ちます /////// //////// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ////// rs.GetFieldValue( index, _T( strValue ) ); //////// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ////// strResult = strResult + strValue + ","; } AfxMessageBox(strResult); rs.MoveNext(); i++; } rs.Close(); db.Close(); } ------------------------------------------------------------------------ |
1