BOOL CFileConfigure::LoadSQLiteConfig( const CString& szField, CFieldEx* pField) { USES_CONVERSION; CString szPath, szSql; szPath.Format(_T("%s\\stat\\normal_conf.data"), CApplication::ConfigDir()); sqlite3 *pDb = NULL; sqlite3_stmt* pStmt = NULL; auto MbcsToUtf8 = [](const char *file) -> char* { WCHAR *pwchar=0; CHAR *pchar = 0; int len=0; int codepage = AreFileApisANSI() ? CP_ACP : CP_OEMCP; len=MultiByteToWideChar(codepage, 0, file, -1, NULL,0); pwchar=new WCHAR[len]; ASSERT(pwchar); if(pwchar!=0) { len = MultiByteToWideChar(codepage, 0, file, -1, pwchar, len); if( len!=0 ) { len = WideCharToMultiByte(CP_UTF8, 0, pwchar, -1, 0, 0, 0, 0); pchar=new CHAR[len]; ASSERT(pchar); if(pchar!=0) { len = WideCharToMultiByte(CP_UTF8, 0, pwchar, -1, pchar, len,0, 0); if(len!=0) { delete pwchar; return pchar; } } delete pwchar; } } return pchar; }; // 中文路径支持 char* pPath = MbcsToUtf8(CT2CA(szPath)); if( sqlite3_open( pPath, &pDb) != SQLITE_OK) { delete [] pPath; return FALSE; } delete [] pPath; szSql.Format( _T("select name, caption, \"type\", formula, formulaname, formulaparam, drill, lua from indexconfig where upper(name) = upper('%s')"), szField); int rc = sqlite3_prepare( pDb, CT2CA(szSql), -1, &pStmt, NULL); rc = sqlite3_step( pStmt); if( rc == SQLITE_ROW ) { stFormula* pFormula = new stFormula(); pFormula->szCaption = (TCHAR*)sqlite3_column_text16( pStmt, 1); pFormula->uType = sqlite3_column_int( pStmt, 2); pFormula->uLength = sqlite3_column_int( pStmt, 2) == 3 ? 64 : 8; pFormula->uFormulaType = sqlite3_column_int( pStmt, 3); pFormula->szFormulaName = (TCHAR*)sqlite3_column_text16( pStmt, 4); pFormula->szFormulaParam = (TCHAR*)sqlite3_column_text16( pStmt, 5); pFormula->szFormulaLua = (TCHAR*)sqlite3_column_text16( pStmt, 7); pFormula->bEnableDrill = pField->iColFlag & cfDelay ? TRUE : sqlite3_column_int( pStmt, 6); pFormula->bIsDim = pField->iColFlag & cfDimension; m_vecIndexTrans[ string(CT2CA(szField))] = pFormula; } sqlite3_finalize( pStmt); sqlite3_close( pDb); return rc == SQLITE_ROW; }