SQLiteをC++から呼び出す(4:Update)

念のためUpdateしてみた。
Insertとなにも変わらんな....。
Deleteはやってみなくてもいいか...

void CMainFrame::OnUpdate()
{

	CUpdateDlg dlg ;

	CString strDispID ;
	CString strComment ;

	strDispID = _T("ID123456") ;
	strComment.Empty() ;
	
	dlg.m_strDispID = strDispID ;
	dlg.m_strComment = strComment ;	
	
	if( dlg.DoModal() == IDOK )
	{
		strDispID = dlg.m_strDispID ;
		strComment = dlg.m_strComment ;	
	}
	else
		return ;

	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") ) ;
		sqlite3_close(db);
		return ;
	}

	CString strSQL ;
	const int bind_COMMENT = 1;
	const int bind_DISP_ID = 2;

	// prepared ステートメントを用意する
	sqlite3_stmt* update_sql;
	strSQL = _T("UPDATE TEST_TABLE SET COMMENT = ? WHERE DISP_ID = ? ;") ;

	err = sqlite3_prepare16(db, strSQL, strSQL.GetLength()*2, &update_sql, NULL);
	//↑ここでエラーの場合、SQL文がおかしい

	//トランザクション開始
	sqlite3_exec(db, "BEGIN;", NULL, NULL, NULL);

	//アップデート実行
	err = sqlite3_reset(update_sql);
	err = sqlite3_bind_text16(update_sql, bind_COMMENT, strComment, strComment.GetLength()*sizeof(_TCHAR), SQLITE_STATIC );
	err = sqlite3_bind_text16(update_sql, bind_DISP_ID, strDispID, strDispID.GetLength()*sizeof(_TCHAR), SQLITE_STATIC );


	err = sqlite3_step(update_sql);

	if( err != SQLITE_DONE )		//stepを実行した場合、SQLITE_DONEなら正解!
		AfxMessageBox(_T("stepでエラー")) ;

	// コミット
	sqlite3_exec(db, "COMMIT;", NULL, NULL, NULL);

	// プリペアしたものを破棄する
	sqlite3_finalize(update_sql);

	sqlite3_close(db);
}

さんかれあ(1) (講談社コミックス)

さんかれあ(1) (講談社コミックス)

↑アニメ割とおもしろいです。れあがかわいい。