Mensaje    Asunto: Compactar Base de Datos Access Responder citando

Bueeeenas, hola a todos, vereis estoy terminando mi proyecto (tengo que entregarlo el viernes), y resulta que en la última revisión con el tutor se le ha ocurrido que podría compactar la base de datos desde mi programa (algo en lo que yo no había caído, para eso están los tutores, no?), en fin, al grano, resulta que he intentado compactar utilizando automatización OLE:
Código:

     AnsiString BDdest = "Borrador"+BDlocal;
        if (FileExists(BDdest))
        {
            if (DeleteFile(BDdest.c_str()))
                ShowMessage("Destino Borrada");
        }
        if(CopyFile(BDlocal.c_str(), BDdest.c_str(),1))
             ShowMessage("Copia");
        else
             ShowMessage("NO Copia");
        if( DeleteFile(BDlocal.c_str()))
             ShowMessage("origen  borrada");

        Variant AccessApp = CreateOleObject("Access.Application");
        AccessApp.GetActiveObject("Access.Application");

        // Abrimos la base de datos
        WideString nombreBD = WideString(BDlocal);   // DESTINO
        WideString nombredest = WideString(BDdest);  // ORIGEN

        try{
        // Una base de datos Access no se puede compactar si está abierta
           AccessApp.OleFunction("CompactRepair", nombredest, nombreBD, false);  //también he probado con true
        }
        catch(EOleSysError&)
        {
           MessageDlgX("No se pudo compactar la base de datos.", mtWarning,
                TMsgDlgButtons() << mbOK, 0);
        }
        AccessApp.OleProcedure("Quit");


Lo de hacer una copia de la base de datos y borrar la original es porque no me dejaba compactar si origen y destino del método CompactRepair son el mismo archivo. El caso, es que en algún momento he logrado que compacte, pero a fuerza de seguir haciendo cambios para mejorarlo ha dejado de funcionar, y no consigo que vuelva a hacerlo.
Me sale un EOleSysError (que es el que capturo con el catch), pero creo que el número de parámetros es correcto, y por lo menos sé que ese método existe.

Alguien puede revisarme el código?? o decirme como puedo hacerlo, porque también he encontrado que en Visual Basic se puede hacer con la conexión ADO y con Microsoft Jet and Replication
Object, utilizando CompactDatabase.... podeis iluminar mi camino???

Muchas gracias por todo!!