今回は前回までのテーブルからSelectを実行してみる。
このテーブルからDISP_IDが「ID123456」なレコードをSelectするソースが下記のようになった。
void CMainFrame::OnSelect() { sqlite3* db; int err; _TCHAR* db_name = _T("c:\\SQLiteDB\\testDB.db"); // データベースを開く err = sqlite3_open16(db_name, &db); if (err != SQLITE_OK) { AfxMessageBox( _T("openErr") ) ; //オープンに失敗してもCloseする必要があるらしい sqlite3_close(db); return ; } sqlite3_stmt* select_stmt; CString strSQL ; int iColCount ; int id ; CString strDispID ; CString strName ; CString strComment ; CString strOutput ; CString strMess ; strMess.Empty() ; strSQL = _T("SELECT ID, DISP_ID, NAME, COMMENT FROM TEST_TABLE WHERE DISP_ID = ?") ; err = sqlite3_prepare16(db, strSQL, -1, &select_stmt, NULL); // select_stmtの内部バッファを一旦クリア sqlite3_reset(select_stmt); CString strWhereID ; //IDの指定は strWhereID = _T("ID123456") ; err = sqlite3_bind_text16(select_stmt, 1, strWhereID, strWhereID.GetLength()*sizeof(_TCHAR), SQLITE_STATIC ); if( err == SQLITE_OK && select_stmt ) { iColCount = sqlite3_column_count(select_stmt) ; while (SQLITE_ROW == ( err = sqlite3_step(select_stmt))) { id = sqlite3_column_int(select_stmt, 0); strDispID = (_TCHAR*)sqlite3_column_text16(select_stmt, 1); strName = (_TCHAR*)sqlite3_column_text16(select_stmt, 2); strComment = (_TCHAR*)sqlite3_column_text16(select_stmt, 3); strOutput.Format( _T(" id=%d \n dispID:%s\n name:%s\n comment:%s\n\n\n"), id, strDispID, strName, strComment ) ; strMess += strOutput ; } } AfxMessageBox( strMess, MB_OK|MB_ICONINFORMATION ) ; sqlite3_finalize(select_stmt); sqlite3_close(db); }
seraphyさんの記事をかなり参照しつつなんとか書いてみたのだが、DBのオープンに失敗してもCloseする必要があるっていうのは知らなかった。
次はどうしよう...同じかもしれないけど、UPDATE、DELETEまでやればひととおり?
(つづく)

ネスぺ22 β版 本物のネットワークスペシャリストになるための最も詳しい過去問解説と合格のコツ
- 作者: 粕淵卓,平田賀一
- 出版社/メーカー: ニシダ印刷製本
- 発売日: 2011/08/24
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 590回
- この商品を含むブログ (13件) を見る