![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
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? |
|
#2
|
||||
|
||||
|
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.
__________________
No sabiendo que era imposible... él fue... y lo hizo!!! En fase de construcción: LoBusco.com más .com que nunca! |
|
#3
|
||||
|
||||
|
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? |
|
#4
|
|||
|
|||
|
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. Última edición por zerelho fecha: 15-02-2005 a las 20:19:54. |
|
#5
|
|||
|
|||
|
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 atabase Password="";','Provider=Microsoft.Jet.OLEDB.4.0;' + 'Data Source=' + ExtractFilePath(PathDb) + 'Datos_new.mdb' + ';Jet OLEDB atabase 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. |
|
#6
|
|||
|
|||
|
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 |
|
#7
|
||||
|
||||
|
Cita:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|