Yo soy Ubik. Antes de que el universo existiera yo existía. Yo hice los soles y los mundos. Yo creé las vidas y los espacios en que habitan. Yo las cambio de lugar a mi antojo. Van donde yo dispongo y hacen lo que yo les ordeno. Yo soy el verbo, y mi nombre no puede ser pronunciado. Es el nombre que nadie conoce. Me llaman Ubik, pero Ubik no es mi nombre. Yo soy. Yo seré siempre.

jueves, 21 de junio de 2007

Compactar y Reparar una BD de Access desde la MFC

Utilizando ODBC es posible acceder a una base de datos de access y compactar y repararla facilmente.
En muchos desarrollos de empresas pequeñas ocurre que hay la tipica aplicacion de base de datos con sus formulario y demas, que se aloja todo en un fichero MDB de access. Con el transcurso del uso diario la BD crece y crece y de forma regular hay que abrir el Access, decir a todo el mundo que salga de la aplicacion y darle a la opcion de compactar/reparar.
Esto se puede llegar a automatizar gran parte del proceso, e incluso se puede programar desde VBA y hacerlo desde la propia aplicacion de access.
Pero yo voy a poner como se hace desde un programa ajeno en Visual C++, de forma que se podria crear un programa que hiciera una tarea tipo backup junto con la compactacion y la reparacion.


typedef BOOL (__stdcall *pSQLConfigDataSource)(HWND, WORD, LPCSTR, LPCSTR);
pSQLConfigDataSource SQLConfigDataSource;
HINSTANCE hLib;
bool bRet = false;
hLib = LoadLibrary("odbccp32.dll");
if (hLib)
{
SQLConfigDataSource = (pSQLConfigDataSource) GetProcAddress(hLib, "SQLConfigDataSource");
if (SQLConfigDataSource)
{
char szParam[1024];
sprintf(szParam,"COMPACT_DB=c:\\BD.mdb c:\\BD.mdb General");

bRet = SQLConfigDataSource(NULL, 1 /*ODBC_ADD_DSN*/,
"Microsoft Access Driver (*.mdb)", szParam);
}
FreeLibrary(hLib);
}



La clave es la linea "COMPACT_DB=c:\\BD.mdb c:\\BD.mdb General" que si por el contrario queremos compactarlo en otra BD distinta se tendria que poner:
"COMPACT_DB=c:\\BD.mdb c:\\BD2.mdb"

De la misma forma, si lo que queremos es reparar la BD entonces usaremo el comando REPAIR_DB

Slds.

2 comentarios:

ravdiaz7 dijo...

FAVOR ES JUSTO LO QUE NECESITO... ME GUSTARIA SABER MAS ... COMO HAGO PARA VINCULAR ESTE PROGRAMA SE EJECUTE EN FORMA TRANSPARENTE EN MI BASE DE DATOS QUE HE CREADO EN ACCESS 2007... GRACIAS POR TU AYUDA MI CORREO ES ravdiaz7@gmail.com Rodrigo Valenzuela Díaz - Chile - Rancagua

ravdiaz7 dijo...

FAVOR ES JUSTO LO QUE NECESITO... ME GUSTARIA SABER MAS ... COMO HAGO PARA VINCULAR ESTE PROGRAMA SE EJECUTE EN FORMA TRANSPARENTE EN MI BASE DE DATOS QUE HE CREADO EN ACCESS 2007... GRACIAS POR TU AYUDA MI CORREO ES ravdiaz7@gmail.com Rodrigo Valenzuela Díaz - Chile - Rancagua