BOOL Sqlite3DB::TableExists( LPCTSTR tableName ) { if (NULL == m_pDB) return FALSE; BOOL bExists = FALSE; SQLTRY(); CStringA sql; sql.Format("select name from sqlite_master where type='table' and name='%s'", CStringA(tableName)); char** dbresult = NULL; char* errmsg = NULL; int nrow = 0; int ncolumn = 0; int ret = sqlite3_get_table(m_pDB, sql, &dbresult, &nrow, &ncolumn, &errmsg); if(ret == SQLITE_OK && nrow > 0) { bExists = TRUE; } sqlite3_free_table(dbresult); SQLCACHE_RETFALSE(_T("table exists")); return bExists; }
// ------------------------------------------------- // ODBCConnect() // BOOL ODBCConnect(CHAR *lpServerName,CHAR *lpUserName,CHAR *lpPassword) { win_open(EHWP_SCREENCENTER,50,300,59,-1,3,ON,"Connessione a ..."); dispfm(10,27,1,-1,STYLE_BOLD,"#Arial",25,lpServerName); // -------------------------------------------------------------------- // Mi connetto al server // EhOdbc.sqlLastError=SQLConnect(EhOdbc.hConn, // Handle della connessione lpServerName, // Nome del server SQL_NTS, // Nome del file / Driver da usare lpUserName,SQL_NTS, // UserName lpPassword,SQL_NTS); // Password if (EhOdbc.sqlLastError!=SQL_SUCCESS&&EhOdbc.sqlLastError!=SQL_SUCCESS_WITH_INFO) {if (!EhOdbc.fNoErrorView) ODBCError("Connect"); win_close(); return TRUE; } // -------------------------------------------------------------------- // Alloca memoria per comandi (ritorna puntatore in hStmt) // // sqlReturn=SQLAllocStmt(EhOdbc.hConn, &EhOdbc.hStmt); // EhOdbc.sqlLastError=SQLAllocHandle(SQL_HANDLE_STMT, EhOdbc.hConn, &EhOdbc.hStmt); if (EhOdbc.sqlLastError!=SQL_SUCCESS) {ODBCError("SQLAllocHandle/Env"); PRG_end("Ambiente stantment:?");} SQLSetStmtAttr(EhOdbc.hStmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_READ_ONLY, 0); SQLSetStmtAttr(EhOdbc.hStmt, SQL_ATTR_CURSOR_SCROLLABLE, (SQLPOINTER) SQL_SCROLLABLE , 0); SQLSetCursorName(EhOdbc.hStmt, "SQL_CURSOR", SQL_NTS); SQLTRY(SQL_HANDLE_STMT,"SET1",EhOdbc.hStmt,SQLSetStmtAttr(EhOdbc.hStmt, SQL_ATTR_ROW_BIND_TYPE, SQL_BIND_BY_COLUMN, 0)); SQLTRY(SQL_HANDLE_STMT,"SET2",EhOdbc.hStmt,SQLSetStmtAttr(EhOdbc.hStmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER) 1, 0)); SQLTRY(SQL_HANDLE_STMT,"SET3",EhOdbc.hStmt,SQLSetStmtAttr(EhOdbc.hStmt, SQL_ATTR_ROW_STATUS_PTR, NULL, 0)); SQLTRY(SQL_HANDLE_STMT,"SET4",EhOdbc.hStmt,SQLSetStmtAttr(EhOdbc.hStmt, SQL_ATTR_ROWS_FETCHED_PTR, NULL, 0)); win_close(); return FALSE; }
BOOL Sqlite3DB::QuerySQL( LPCSTR sql, Sqlite3QueryResult& result ) { if (NULL == m_pDB) return FALSE; BOOL bRet = FALSE; SQLTRY(); char** dbresult = NULL; char* errmsg = NULL; int nrow = 0; int ncolumn = 0; int ret = sqlite3_get_table(m_pDB, sql, &dbresult, &nrow, &ncolumn, &errmsg); if(ret == SQLITE_OK) { bRet = TRUE; result.Init(dbresult, nrow, ncolumn); } SQLCACHE_RETFALSE(_T("querysql")); return bRet; }
BOOL Sqlite3DB::Open( LPCTSTR filepath ) { Close(); SQLTRY(); std::string utf8Filepath; if (! Unicode2Utf8(filepath, utf8Filepath)) { errorLog(_T("can not transfer [%s] to utf8"), filepath); return FALSE; } int iRet = sqlite3_open(utf8Filepath.c_str(), &m_pDB); if(iRet != SQLITE_OK) { errorLogE(_T("Cannot open db[%s]: %s."), filepath, CString(sqlite3_errmsg(m_pDB))); return FALSE; } SQLCACHE_RETFALSE(_T("open db")); return TRUE; }
BOOL Sqlite3DB::ExecuteSQL( LPCSTR sql, int* pAffectedRows ) { if (NULL == m_pDB) return FALSE; BOOL bRet = FALSE; SQLTRY(); char* errmsg = NULL; int ret = sqlite3_exec(m_pDB, sql, NULL, NULL, &errmsg); if(ret == SQLITE_OK) { if (NULL != pAffectedRows) *pAffectedRows = sqlite3_changes(m_pDB); bRet = TRUE; } else { errorLog(_T("execute sql [%s] failed: %s"), CString(sql), CString(errmsg)); } sqlite3_free(errmsg); SQLCACHE_RETFALSE(_T("ExecuteSQL")); return bRet; }