![]() |
¿Como Compacto Una Base de ACCESS?
Hola amigos, estoy buscando ayuda de como compactar y reparar una base de Datos en Access, utilizo Delphi, y la verdad es que no tengo idea de como se hace, GRacias!!!!
|
Hola Enan0:
Te pongo aqui este código que es el que yo utilizo para compactar mis bases de datos. Espero que te sirva. Para llamar a la función se utiliza esta linea: Espero que te sirva. Saludos!. |
Un añadido (que sino no funciona...):
1- debes añadir la unit JRO_TLB a la clausula USES. 2- La Base de Datos de ser de uso exclusivo cuando realices esta operación. 3- Si hay problemas con la unit JRO_TLB: a) Desde el IDE ir a Project - Import Type Library. b) Buscar en la lista "Microsoft Jet and Replication Objects 2.1 Library". c) Install. d) Recompilar. |
Siguientes Errores en Delphi 6
Cuando quiero complilar el JRO_TLB.pas me tira los siguientes errores, por lo que lei es que es un error del compilador del Delphi 6, segun las opciones que encontre es que lo haga en delphi 5 (cosa que no tengo y de la pag de borland no se puede bajar mas) o sino que modifique esos campos a mano (cosa que no se hacer :().
Si alguien los tiene compilados y andando.. no me los manda a enanosoft@gmail.com [Error] JRO_TLB.pas(594): Undeclared identifier: 'ActiveConnection' [Error] JRO_TLB.pas(628): Cannot assign to a read-only property [Error] JRO_TLB.pas(656): Cannot assign to a read-only property Gracias |
Yo estoy igual que tu.
No hay solución para delphi 6? |
Yo tengo w2k y Delphi 6 con Update pack 2.
He seguido los pasos (a) y (b), sólo que en micaso he encontrado "Microsoft Jet and Replication Objects 2.6 Library" en lugar de la 2.1 y luego "Create Unit" y me la ha importado y compilado sin nigun problema. |
A la primera
Yo tambien andaba detras de lo de compactar una BD en Access y con el código que puso taita me fue a la primera, ahora lo que seria ya bordarla es saber si existe algun otro usuario o aplicación accediendo a la BD (lo digo por lo de tener que ser de uso exclusivo cuando se realiza la compactación).
Existe alguna manera de hacer esta comprobación? |
Hola a tod@s:
Pues me sumo a la consulta de zerelho. Resulta que estoy realizando una aplicación par experimentar un poco y me encuentro con el problema de que la base de datos ya se encuentra en uso por otro(s) usuario(s). Cómo podemos resolver esto? Trabajo con una bbdd de Access. |
Se supone que el mismo programa que compacta la base de datos, hace uso de las tablas, así que podemos intentar abrir la tabla primero:
¿Es viable? |
Una posible solucion
Bueno yo al final lo medio soluccioné, me desconecto de la BD e intento acceder al fichero access abriendolo en modo exclusivo y si me da error (dando por supuesto que el fichero existe) es que ya existe otro usuario o aplicación utilizando el fichero (la BD).
No se si existe otra forma mejor de hacerlo. |
Espero k esto os sirva de ayuda, a mi me funciona perfectamente.
procedure TForm1.CompactaMDB(Sender: TObject); var db: OleVariant; PathDb: string; begin PathDb := 'C:\Prueba Compactar BBDD\Datos.mdb'; db := GetADOObject('JRO.JetEngine'); db.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;' + 'Data Source=' + PathDb + ';Jet OLEDB:Database Password="";', 'Provider=Microsoft.Jet.OLEDB.4.0;' + 'Data Source=' + ExtractFilePath(PathDb) + 'Datos_new.mdb' + ';Jet OLEDB:Database Password=""' + ';Jet OLEDB:Engine Type=5'); // 4 se for Access 97 if not DeleteFile(PathDb) then // file://Borrar bd antigua begin ShowMessage('Ocurrienron errores renombrando los archivos temporales!' + #13 + 'La operacion fue cancelada.'); DeleteFile(ExtractFilePath(PathDb) + 'nuevabd.mdb'); // file://Borrar archivos temporales exit; end; RenameFile(ExtractFilePath(PathDb) + 'nuevaBD.mdb', PathDb); //file://Renombra la bd compactada DeleteFile(ExtractFilePath(PathDb) + 'nuevabd.mdb'); //file://Borrar archivos temporales //*** Renombrar de nuevo la BD y ponerle el nombre original ***\\ RenameFile(ExtractFilePath(PathDb) + 'Datos_new.mdb', ExtractFilePath(PathDb) + 'Datos.mdb'); ShowMessage('Proceso Concluído con exito!'); {except on e: Exception do ShowMessage(E.Message); end finally db := unassigned; // file://Limpia variables de objetos end;} end; function TForm1.GetADOObject(ADOClass: string): OLEVariant; var o: OLEVariant; begin try o := CreateOLEObject(ADOClass); except on EOleException do o := unassigned end; Result := o; end; procedure TForm1.Button1Click(Sender: TObject); begin Mi_conexion.Connected := false; //AdoConection Mi_Conexion.Close; AdoTable1.Close; CompactaMDB(sender); //llamamos al procedimiento Mi_Conexion.Connected := true; Mi_Conexion.Open; AdoTable1.Open; end; Yo utilizo ADO, una conexion Ado y en las propiedades Connected esta a false, y en el OnCreate del Form abro la conexion y todas las tablas k necesiteis. |
Microsoft Jet and Replication Objects 2.1 Library"
hola siento retrotraerlos al pasado, dada las fechas que figuran en los post
pero tengo delphi 7 y trabajo ado en un .mdb, en mi pc tengo instalado MsOffice 2003 y cuando hago ... Cita:
sera el office 2003? alguna idea? gracias por su tiempo |
Cita:
|
instale MSJRO.dll
gracias por contestar Neftali.
te cuento no me aparecia ningun "Microsoft Jet and Replication Objects" en la lista, asi que lo agregue del archivo MSJRO.dll; ahora si me aparece la version es la 2.6 creo. el problema es que cuando utilizo ya sea los componentes que se me agregaron el la paleta activex . me da un error de clase no registrada. alguna idea? gracias por tu tiepo |
Cita:
Utiliza Regsvr32 (C:\WINNT\system32\Regsvr32.exe) y vuelve a probar. |
Lo he resuelto en Delphi 6
Bueno despues de ver lo errores y analizar que el error da en la clase TReplica la cual no es usada al momento de compactar la base de datos he puesto en comentario las lineas que me daban error que era la de activeconnection y posteriormente dos properties mas de la clase treplica.
Me agregó los componentes a la paleta activex, copie el codigo de ejemplo, y ta taaaaaaannn funcionó con una tabla que tenia casi 500MB. Probadlo, cualquier cosilla me podéis escribir. Saludos, |
La franja horaria es GMT +2. Ahora son las 22:45:38. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi