 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
shackletta Lt JG

Registrado: 01 Dic 2004Mensajes: 68
|
Publicado: Lun 04 Jul, 2005 4:19 pm Asunto: Compactar base de datos Access |
|
|
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!! |
|
| Volver arriba |
|
 |
shackletta Lt JG

Registrado: 01 Dic 2004Mensajes: 68
|
Publicado: Lun 04 Jul, 2005 4:45 pm Asunto: |
|
|
Os lo pongo como código para que quede un poco más claro:
| 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");
|
|
|
| Volver arriba |
|
 |
Cerúleo Master


Registrado: 04 Ago 2003Mensajes: 332Ubicación: Santander, España
|
Publicado: Mar 05 Jul, 2005 1:31 pm Asunto: |
|
|
Hola shackletta, y perdona que te escriba aquí. No es para responder si no para preguntar. ¿Cómo te conectas a una base de datos Access? Tengo C++Builder 4 y cuando uso los componentes TTable y esos no hace más que pedirme el usuario y el password y no sé qué hacer para quitarlos. ¡Sólo quiero conectarme a la base de datos local!
Un saludo y perdona. _________________ Nunca digas "Es imposible" sin intentarlo antes. |
|
| Volver arriba |
|
 |
shackletta Lt JG

Registrado: 01 Dic 2004Mensajes: 68
|
Publicado: Mar 05 Jul, 2005 2:21 pm Asunto: |
|
|
Bueno, estás perdonado, lo que pasa es que yo me conecto con componentes ADO que creo que en Builder 4 no están disponibles.
Así que creo que no te puedo ayudar, de todas maneras al principio de mi proyecto intenté conectarme con ODBC a la base de datos, y también me pedía el pwd, pero creo conseguí quitarlo... no sé, no recuerdo lo que hice, hace ya varios meses... es que lo recuerdo todo muy vagamente...
En fin, lo siento, y por cierto en el foro aparece varias veces, pero ¿has leído la cara oculta de C++ builder de Ian Marteens?, ahí viene algo que te podrá ayudar
Un saludo y suerte. |
|
| Volver arriba |
|
 |
Julian Andres Ens


Registrado: 27 Abr 2003Mensajes: 27Ubicación: Bogotá (COLOMBIA)
|
Publicado: Mie 06 Sep, 2006 3:21 pm Asunto: Compactar BD Access... Funciona |
|
|
Con este código compactas la BD 1.mdb en una copia 2.mdb
| Código: |
AnsiString paths, pathd;
paths= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\1.mdb";
pathd= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\2.mdb";
Variant AccessApp;
AccessApp = CreateOleObject("JRO.JetEngine");
AccessApp.OleFunction("CompactDatabase", paths.c_str(), pathd.c_str()) ;
|
Completa el código a tu acomodo.
Slds
Andrés |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|