VC++ からのデータ取得 – プログラミング – Home

通知
すべてクリア

VC++ からのデータ取得


CA
 CA
(@CA)
ゲスト
結合: 19年前
投稿: 2
Topic starter  

はじめまして、よろしくご指導ご鞭撻ください。
Visual Stidio6.0のVC++を使用しデータを取得するプログラミングを作成しています。
DB(MSDEを使用)からあるカラムのデータを取得する時のみ
「メモリ不足が不足しています」
というポップが現れ、そこで終了してしまいます。
Accessを使用しMSDEを「.adp」形式でテーブルのデータ定義を参照したところ
「ntext型」となっておりました。(初めて聞きました・・・。)
問題点を切り分ける為、Access(モジュールを作成しただSQLを発行し該当データを取得する。)
でVCで作成したSQLを発行したところ取得できました。OSQLでも取得は可能でした。
何か回避方法などお知りでしたら、ご教授ください。


引用解決済
トピックタグ
wood
 wood
(@wood)
ゲスト
結合: 22年前
投稿: 895
 

趣旨は「Access」のデータ取得では無いようなので

1レコードサイズ、取得したいデータのデータタイプ、データレングス

DB接続方法(ODBC、DAO、RDO、ADO OLEDB等)
などのデータベースの詳細を明記し

データアクセス部分のソースを提示してみてはいかがでしょうか

質問者のとなりで見ている回答者はいないと思いますので
環境を詳細に説明なさったほうが、解決を早める方法です


返信引用
CA
 CA
(@CA)
ゲスト
結合: 19年前
投稿: 2
Topic starter  

すいません。下記がソースになります。
------------------------------------------------------------------
void CDBtestDlg::WUP_DB()
{
 CString strCon;
 CString strSql;

 strCon = DSN=whatsup;UID=administrator;PWD=;

 //実行SQL生成
 strSql = select * from SystemActivityLog;

 CDatabase db;
 //接続
 db.OpenEx( _T( strCon ), CDatabase::openReadOnly | 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();

}


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 19年前
投稿: 59
 

本題と関係ないけれど

_T( CString変数 )

という使い方はないかと。

普通は
_T( ABC )
というふうに文字(列)定数に対して使います。

# UNICODEプロジェクトだと現コードでコンパイルできるかどうか。。。


返信引用
wood
 wood
(@wood)
ゲスト
結合: 22年前
投稿: 895
 

MSDNにも「CRecordset::GetFieldValue」のサンプル乗ってます
------------------
while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue );
// do something with varValue
}
rs.MoveNext( );
}
------------------
こんな感じ、「Blue さん」のご指摘が正解なのだと思われます


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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