CRecordsetのGetFieldValueで同じフィールドの値を取得するには?

解決


あき  2006-01-20 20:10:09  No: 60398

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回読み込むにはどのようにしたら良いのでしょうか?
よろしくお願いします。


dairygoods  2006-01-21 00:08:14  No: 60399

2回読み込まないように修正した方がよいと思いますが、
どうしてもというなら、同じ行を再取得すればできます。

m_Recordset.Move(0); // 0行移動する=再取得

本題とは関係ないですが、
 _T( SQL_CS ));
変数を _T() で囲むのは誤りです。


あき  2006-01-21 03:55:21  No: 60400

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);

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加