| ODBCを使ったデータベースアクセス |
"ID","RaceName","Distance" 1,"皐月賞","芝2000" 2,"ダービー","芝2400" 3,"菊花賞","芝3000" 4,"有馬記念","芝2500"
ダイアログベースのプロジェクト「UKOdbcTest」を新規に作成する。| 項目名 | コントロールID | DDX変数の型 | 変数名 |
|---|---|---|---|
| ID | IDC_EDIT_ID | int | m_iID |
| レース名 | IDC_EDIT_RACENAME | CString | m_strRaceName |
| 距離 | IDC_EDIT_DISTANCE | CString | m_strDistance |
#include <afxdb.h>
CString CMyRecordset::GetDefaultSQL()
{
// return _T("[MyData].[csv]");
return _T("[MyData.csv]");
}
// インクルード文を追加
#include "MyRecordset.h"
/////////////////////////////////////////////////////////////////////////////
// CUKOdbcTest3Dlg ダイアログ
class CUKOdbcTest3Dlg : public CDialog
{
……
private:
CMyRecordset m_Recordset;
};
BOOL CUKOdbcTest3Dlg::OnInitDialog()
{
……
m_Recordset.Open();
m_Recordset.MoveFirst();
m_iID = m_Recordset.m_ID;
m_strRaceName = m_Recordset.m_RaceName;
m_strDistance = m_Recordset.m_Distance;
UpdateData(FALSE);
return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}
// WM_DESTROYメッセージハンドラ
void CUKOdbcTest3Dlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: この位置にメッセージ ハンドラ用のコードを追加してください
m_Recordset.Close();
}
この時点でプロジェクトをビルドし、実行してみる。正しく作成されていれば、
ダイアログを開くと同時にデータベースの最初のレコードの内容がエディットコントロールに表示されるはずである。
ちなみにCMyRecordsetクラスのメンバ変数m_ID, m_RaceName, m_Distanceはクラス生成時に自動生成されたもので、
データベースのカレントレコード内の各フィールドを示している。
void CUKOdbcTest3Dlg::OnButtonPrev()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
m_Recordset.MovePrev();
if( m_Recordset.IsBOF() )
{
m_Recordset.MoveFirst();
}
else
{
m_iID = m_Recordset.m_ID;
m_strRaceName = m_Recordset.m_RaceName;
m_strDistance = m_Recordset.m_Distance;
UpdateData(FALSE);
}
}
void CUKOdbcTest3Dlg::OnButtonNext()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
m_Recordset.MoveNext();
if( m_Recordset.IsEOF() )
{
m_Recordset.MoveLast();
}
else
{
m_iID = m_Recordset.m_ID;
m_strRaceName = m_Recordset.m_RaceName;
m_strDistance = m_Recordset.m_Distance;
UpdateData(FALSE);
}
}
これで、「<<」ボタンと「>>」ボタンを使ってデータベースの各レコードを順次表示することが可能となる。