|
AppBuilder中进行直接ODBC API数据库调用访问的基本方法!(3) //断开连接 if (m_bConnected) { SQLDisconnect(m_hdbc); SQLFreeHandle(SQL_HANDLE_DBC,m_hdbc); m_hdbc = NULL; } //删除DSN if (FoundDSNName(IDS_HOME_DSNNAME)) DeleteDSN(IDS_HOME_DSNNAME); //删除环境句柄 if (m_henv) { SQLFreeHandle(SQL_HANDLE_ENV,m_henv); m_henv = NULL; }
二、 针对数据库的操作 以下的方法只对Access数据库有效, 1、 生成数据库 CString strFileName="c:\1.mdb"; CString strDriver; char szFileName[100+_MAX_PATH]; strDriver = "Microsoft Access Driver (*.mdb)\0"; sprintf(szFileName,"CREATE_DB=%s General\0\0",strFileName); SQLConfigDataSource(NULL,ODBC_ADD_DSN,strDriver,szFileName); 2、 压缩数据库 BOOL SuperDatabase::Compaction(CString strSourName, CString strDestName) { if (strSourName.IsEmpty()) return FALSE; if (strDestName.IsEmpty()) strDestName = strSourName; char szCommand[100+_MAX_PATH]; int j; CString strDriver; strDriver = "Microsoft Access Driver (*.mdb)\0"; j = sprintf(szCommand,"COMPACT_DB=%s %s General\0\0",strSourName,strDestName); return SQLConfigDataSource(NULL,ODBC_ADD_DSN,strDriver,szCommand); } 3、 取得数据库的名称: 如果已经打开了一个数据源,可以通过数据源来取得当前的数据库的名称; CString SuperDatabase::GetDatabaseName() { ASSERT(m_hdbc != SQL_NULL_HDBC); char szName[MAX_TNAME_LEN]; SWord nResult; SQLGetInfo(m_hdbc, SQL_DATABASE_NAME, szName, MAX_TNAME_LEN, &nResult); return szName; }
三、 针对数据源的操作: 1、 增加数据源 BOOL SuperDatabase::CreateDSN(CString strDriver, CString strFileName,CString strDSN, CString strUserID, CString strPWD) { char szAttr[100+_MAX_PATH]; int j; if (strDriver.IsEmpty()) strDriver = "Microsoft Access Driver (*.mdb)\0"; j = sprintf(szAttr,"DSN=%s\0",strDSN); j++; j = sprintf(szAttr+j,"DBQ=%s\0\0 ",strFileName);
|