1,178
社区成员
发帖
与我相关
我的任务
分享
BOOL __stdcall CrnCompactMDB(LPCSTR lpMdbFile, LPCSTR lpOldPwd, LPCSTR lpNewPwd)
{
char szPath[MAX_PATH] = { 0 };
::GetTempPathA(MAX_PATH, szPath);
char szTmpFile[MAX_PATH] = { 0 };
::GetTempFileNameA(szPath, "ccm", 0, szTmpFile);
char szOldProvide[512] = { 0 }, szNewProvide[512] = { 0 };
sprintf(szOldProvide,
"Provider=Microsoft.Jet.OLEDB.4.0;"
"Data Source=%s;"
"Jet OLEDB:Database Password=%s",
lpMdbFile, lpOldPwd);
sprintf(szNewProvide,
"Provider=Microsoft.Jet.OLEDB.4.0;"
"Data Source=%s;"
"Jet OLEDB:Database Password=%s",
szTmpFile, lpNewPwd);
BOOL bResult = FALSE;
Variant vAdoObj;
try
{
if (::PathFileExistsA(szTmpFile))
::DeleteFileA(szTmpFile);
vAdoObj = Variant::CreateObject("JRO.JetEngine");
vAdoObj.OleProcedure("CompactDatabase", WideString(szOldProvide), WideString(szNewProvide));
if (::PathFileExistsA(lpMdbFile))
::DeleteFileA(lpMdbFile);
::MoveFileA(szTmpFile, lpMdbFile);
bResult = TRUE;
}
__finally
{
vAdoObj.Clear();
vAdoObj = Unassigned;
}
return bResult;
}