【C言語】SQLite3 で OPEN,SELECT,CLOSE(VisualStudio2017)
MFC & SQLite3 の勉強がてら VS2017でツールを作成中
とりあえず SELECT 関連のコードをメモ
typedef struct tag_ListDb { // TABLE-GAME int iGame_Id; CString strGameTitleString; CString strPublisherName; int iReleaseYear; int iPlayers; CString strRatingImage; CString strGameManualQrImage; int iLinkGameId; // TABLE-DISC int iDiscNumber; CString strBaseName; } stListDb; stListDb m_pstListDb[MAX_LIST_DB]; int m_iListDbCnt; char m_ExecPath[MAX_PATH]; // 実行パス sqlite3 *m_pDB; char *m_DBFileName = "regional_custom.db"; sqlite3_stmt *m_pStmt = NULL; int iRet; char szPath[MAX_PATH]; char szDrive[MAX_PATH]; char szDir[MAX_PATH]; char szFname[MAX_PATH]; char szExt[MAX_PATH]; m_iListDbCnt = 0; // 変換用 CStringA strWork; std::string s; std::string sjis; // 実行ファイルのフルパスを取得 GetModuleFileNameA(NULL, szPath, sizeof(szPath)); //パス名を構成要素に分解 _splitpath(szPath, szDrive, szDir, szFname, szExt); // 実行パスを取得 strcpy(m_ExecPath, szDir); // DBファイル名を作成(フルパス) sprintf(szPath, "%s%s", szDir, m_DBFileName); // DB(GAME)のオープン iRet = sqlite3_open(szPath, &m_pDB); if (iRet != SQLITE_OK) { MessageBox(_T("OPEN ERROR!"), _T("SqlLite "), MB_ICONSTOP | MB_OK); return FALSE; } // SQL 編集 iRet = sqlite3_prepare_v2(m_pDB, "SELECT * FROM game ORDER BY game_id", -1, &m_pStmt, NULL); if (iRet != SQLITE_OK) { MessageBox(_T("PREPARE ERROR!"), _T("SqlLite "), MB_ICONSTOP | MB_OK); iRet = sqlite3_close(m_pDB); return FALSE; } // SQL 実行 int i; for (i = 0; ; i++) { iRet = (iRet = sqlite3_step(m_pStmt)); if (SQLITE_ROW != iRet) { break; } // GAME_ID m_pstListDb[i].iGame_Id = sqlite3_column_int(m_pStmt, 0); // GAME_TITLE_STRING(SELECT結果から項目取得、UTF8->SJIS変換) strWork = sqlite3_column_text(m_pStmt, 1); s = strWork; sjis = UTF8toSjis(s); m_pstListDb[i].strGameTitleString = sjis.c_str(); // PUBLISHER_NAME(SELECT結果から項目取得、UTF8->SJIS変換) strWork = sqlite3_column_text(m_pStmt, 2); s = strWork; sjis = UTF8toSjis(s); m_pstListDb[i].strPublisherName = sjis.c_str(); // RELEASE_YEAR m_pstListDb[i].iReleaseYear = sqlite3_column_int(m_pStmt, 3); // PLAYERS m_pstListDb[i].iPlayers = sqlite3_column_int(m_pStmt, 4); // RATING_IMAGE(SELECT結果から項目取得、UTF8->SJIS変換) strWork = sqlite3_column_text(m_pStmt, 5); s = strWork; sjis = UTF8toSjis(s); m_pstListDb[i].strRatingImage = sjis.c_str(); // GAME_MANUAL_QR_IMAGE(SELECT結果から項目取得、UTF8->SJIS変換) strWork = sqlite3_column_text(m_pStmt, 6); s = strWork; sjis = UTF8toSjis(s); m_pstListDb[i].strGameManualQrImage = sjis.c_str(); // LINK_GAME_ID m_pstListDb[i].iLinkGameId = sqlite3_column_int(m_pStmt, 7); m_iListDbCnt++; } m_pstListDb[i].iGame_Id = 0; // SQL 解放 iRet = sqlite3_finalize(m_pStmt); m_pStmt = NULL; // DBのクローズ iRet = sqlite3_close(m_pDB); if (iRet != SQLITE_OK) { MessageBox(_T("CLOSE ERROR!"), _T("SqlLite"), MB_ICONSTOP | MB_OK); return FALSE; }