OS:WinXP 開発環境:VC++6 にて開発を行っております。
CDatabase db;
db.OpenEx( _T(m_Connect), CDatabase::openReadOnly );
CString SQL_CS;
SQL_CS.Format("SELECT * FROM TEST WHERE ID LIKE '%s%%' ,(LPCTSTR)szID);
CRecordset m_Recordset( &db );
m_Recordset.Open(CRecordset::dynaset, _T( SQL_CS ));
m_Recordset.MoveFirst();
do
{
CString strName11, strName12, strName21, strName22;
m_Recordset.GetFieldValue(m_fName11, strName11);
m_Recordset.GetFieldValue(m_fName12, strName12);
m_Recordset.GetFieldValue(m_fName21, strName21);
m_Recordset.GetFieldValue(m_fName22, strName22);
}while(!m_Recordset.IsEOF());
m_fName11,m_fName12,m_fName21,m_fName22には任意でファイルから読み込んだ
フィールド名が入ります。
ここで、m_fName11とm_fName21が同じフィールド名だったときに
m_Recordset.GetFieldValue(m_fName21, strName21);
で、”ハンドルされていない例外は・・・”というメッセージが出てきてしまいます。
同じフィールドを2回読み込むにはどのようにしたら良いのでしょうか?
よろしくお願いします。
2回読み込まないように修正した方がよいと思いますが、
どうしてもというなら、同じ行を再取得すればできます。
m_Recordset.Move(0); // 0行移動する=再取得
本題とは関係ないですが、
_T( SQL_CS ));
変数を _T() で囲むのは誤りです。
dairygoodsさんのおっしゃるように、2回読み込まないように修正しました。
CMapStringToString map;
for (int i = 0; i < m_Recordset.GetODBCFieldCount(); i++)
{
CODBCFieldInfo info;
m_Recordset.GetODBCFieldInfo(i, info);
if(info.m_strName == m_fName11 || info.m_strName == m_fName21)
{
CString str;
m_Recordset.GetFieldValue(info.m_strName, str);
map.SetAt(info.m_strName, str);
}
}
map.Lookup(m_fName11, strName11);
map.Lookup(m_fName21, strName21);
ありがとうございました。
ツイート | ![]() |