¿Me podrías indicar como puedo compactar y reparar la base de datos desde un botón de comando?
1 respuesta
Respuesta de manuelpacha
1
1
manuelpacha, Trabajo de diseñador de bases de datos en entorno access con un...
Prueba este código. Private Sub cmdCompactar_Click() ' Compactar una base de datos con ADO Dim sDBTmp As String Dim je As JRO.JetEngine ' On Error GoTo ErrCompactar ' Set je = New JRO.JetEngine ' ' Crear un nombre "medio" aleatorio sDBTmp = "DBT_" & Format$(Minute(Now), "00") & Format$(Second(Now), "00") & ".mdb" ' Asegurarnos de que no existe una base con el nombre temporal If Len(Dir$(sDBTmp)) Then Kill sDBTmp End If ' lblInfo.Caption = " Compactando la base de datos..." lblInfo.Refresh ' ' Compactar la base de datos je.CompactDatabase "Data Source=" & txtNombreBase.Text & ";", _ "Data Source=" & sDBTmp & ";" ' ' Eliminar la base de datos original Kill txtNombreBase.Text ' ' Renombrar la base temporal con el original Name sDBTmp As txtNombreBase.Text ' lblInfo.Caption = " Base de datos compactada." LblInfo. Refresh ' Exit Sub ' ErrCompactar: ' Mostrar el mensaje de error MsgBox "Error al compactar la base de datos:" & vbCrLf & _ Err.Number & " " & Err.Description, _ VbExclamation, "Error al compactar la base de datos" Err. Clear lblInfo.Caption = " *** Error al compactar la base de datos ***" lblInfo.Refresh End Sub Una aperta.
Buen día, he probado el código que me enviaste pero se frena en "Dim je As JRO.JetEngine", y me arroja un mensaje que dice: Error de compilación: No se ha definido el tipo definido por el Usuario.
Hola nuevamente, he activo en referencias la casilla de "Microsoft Jet and replication Objects 2.6 Library", y ahora me arroja el siguiente Error: Error al compactar la Base de datos: 424 se requiere un objeto
Parece que te canta el texto del comando ErrCompactar: Anula la línea inicial On Error GoTo ErrCompactar y ejecuta para ver donde te canta el error realmente. Una aperta.
Hola buen día, he anulado la linea On Error GoTo ErrCompactar y se frena en las siguientes lineas: lblInfo.Caption = " Compactando la base de datos..." lblInfo.Refresh He anulado estas lineas y se vuelve a frenar en las siguientes lineas diciendo que requiere un objeto ( he cambiado el "NombreBase" por el Nombre actual de la base ) je.CompactDatabase "Data Source=" & txtNombreBase.Text & ";", _ "Data Source=" & sDBTmp & ";"
He encontrado una línea de comando que es tan simple como útil. En un botón de un formulario sitúa el código siguiente: On Error Resume Next CommandBars. _ FindControl(Id:=2071).accDoDefaultAction Lo he testeado en versión 2003 y me ha funcionado. Perdona por el código coñazo que te puse anteriormente. Una aperta.
Hola, ¿o sea tu me dices que descarte el código anterior y solamente use el ultimo código que me enviaste?
Ok, es un código más simple. El anterior realizaba una serie de acciones como copiar y renombrar la BD y había que personalizarlo. Este otro es simple y efectivo.