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); }
- 作者: はっとりみつる
- 出版社/メーカー: 講談社
- 発売日: 2010/07/16
- メディア: コミック
- 購入: 13人 クリック: 461回
- この商品を含むブログ (70件) を見る