- PR -

VC++でMSDEからのデータ取得

1
投稿者投稿内容
TH
会議室デビュー日: 2004/08/19
投稿数: 9
投稿日時: 2005-09-02 14:13
はじめまして、よろしくご指導ご鞭撻ください。
Visual Stidio6.0のVC++を使用しデータを取得するプログラミングを作成しています。
DB(MSDEを使用)からあるカラムのデータを取得する時のみ
「メモリ不足が不足しています」
というポップが現れ、そこで終了してしまいます。
Accessを使用しMSDEを「.adp」形式でテーブルのデータ定義を参照したところ
「ntext型」となっておりました。(初めて聞きました・・・。)
問題点を切り分ける為、Access(モジュールを作成しただSQLを発行し該当データを取得する。)でVCで作成したSQLを発行したところ取得できました。OSQLでも取得は可能でした。
何か回避方法などお知りでしたら、ご教授ください。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 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 ]
TH
会議室デビュー日: 2004/08/19
投稿数: 9
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)