Lunes 18 de Noviembre de 2024, 03:44
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Eliminar Registros En Access
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Eliminar Registros En Access (Leído 10631 veces)
elmango80
Miembro MUY activo
Mensajes: 149
Nacionalidad:
Eliminar Registros En Access
«
en:
Miércoles 1 de Marzo de 2006, 20:45 »
0
Hola a todos, el problema es el siguiente: Cuando trabajo con bases de datos creadas en Access todo me funciona perfectamente el problema esta en que cada vez el archivo
crece de tamaño
. Eso en comprensible ya que cada dia se vana añadiendo nuevos registros en las diferentes tablas de la base de datos, ahora bien lo logico seria que en el momento que elimino registros de las tablas la base de datos el archivo
(.mdb)
disminuyera de tamaño... Pero extrañamente esto no ocurre asi.
Por ejemplo, tengo un archivo cuyo tamaño es de aproximadamente
15Mb
y posee mas de
5mil
registros en las diferentes tablas, he borrado mas de
2mil
registros y el archivo sigue del mismo tamaño.
He llegado a una conclusion, recuerdo que cuando utilizaba
VFP
y eliminaba registros de una tabla con la sentecia sql el programa marcaba el registro como eliminado, pero el registro segui existiendo dentro de la tabla, es decir eliminaba logicamente el registro mas no fisicamente. Recuerdo tambien que habia que abrir la base de datos de forma exclusiva y realizar una limpieza de la base de datos para que ahora si borrara fisicamente todos los registros marcados como eliminados dentro de la base de dato.
No se si haya que hacer algo parecido dentro de access, en realidad lo he buscado y no lo he encontrado. Preferiria que lo que haya que hacer sea desde
VB
porque asi no tengo que utilizar el Access para nada y mi programa seria
100%
independiente y el mismo se encargaria de realizar la depuracion de la base de datos.
Yo dentro de mis programas utilizo la sentencia sql
DELETE
para borrar los registros de la base de datos, no se si existe otra forma mejor para hacerlo y que en realidad borre fisicamente los registros y asi el tamaño del archivo disminuya.
Agradeceria la ayuda de todos los que puedan ya que tengo un archivo que ha llegado al catastrofico tamaño de
120Mb
y sigue creciendo como una bestia imparable.
-------
------ o ------
-------
Tweet
Citar
No soy bueno, tampoco soy malo sino todo lo contrario...
Del Piero
Miembro activo
Mensajes: 44
Re: Eliminar Registros En Access
«
Respuesta #1 en:
Miércoles 1 de Marzo de 2006, 21:08 »
0
Puedes probar los siguiente:
Ingresa al menu Herramientas de Access, submenu "Utilidades de la Base de
Datos", luego elije "Compactar y reparar base de datos".
Si tu base de datos tiene contraseña tienes que ingresar en modo exclusivo.
ebolo
Miembro MUY activo
Mensajes: 188
Re: Eliminar Registros En Access
«
Respuesta #2 en:
Jueves 2 de Marzo de 2006, 10:33 »
0
Hola a todos, según tengo entendido eso es lo normal en bd de access, cuando eliminas registros, se eliminan pero el tamaño no disminuye en la misma proporción.
A parte de lo dicho por Del Piero, también lo que puedes hacer es crearte otra bd nueva e importar todo, de esta forma mejora mucho el rendimiento de la misma.
Saludos.
cpmario
Miembro HIPER activo
Mensajes: 629
Re: Eliminar Registros En Access
«
Respuesta #3 en:
Jueves 2 de Marzo de 2006, 15:38 »
0
Reparar y compactar, o crear una nueva base de datos e importar, funciona de las 2 maneras, personalmente al trabajar en VB6 prefiero reparar y compactar, me parece que es más rápido y seguro.
elmango80
Miembro MUY activo
Mensajes: 149
Nacionalidad:
Re: Eliminar Registros En Access
«
Respuesta #4 en:
Jueves 2 de Marzo de 2006, 16:10 »
0
Gracias por sus respuestas, en primer lugar probe lo que me dijo del piero y eso disminuyo considerablemente el tamaño de la base de datos, el problema esta en que es el usuario que debe de abrir la db en access y realizar el procedimiento, el problema esta en que como les dije eso hace que el programa no sea 100% independiente, ahora no se si existe una forma de hacer lo mismo pero desde vb, osea que sea mi programa y no el usuario el que realice la compactacion de la db.
Lo de crear una nueva db y pasar todos los registros es muy complicado, bueno en lugar de complicado es muy largo y lento, porque manejo tablas que presentan mas de 100mil registros y la idea es que sea algo rapido y eficaz, imaginate pasar 100mil registros uno a uno de una tabla a otra.
Por los momentos lo que estoy haciendo es compactar la db por access pero si alguien sabe como hacer que sea mi aplicacion y no yo el que lo haga se los agradeceria.
Citar
No soy bueno, tampoco soy malo sino todo lo contrario...
Sagutxo
Miembro MUY activo
Mensajes: 320
Re: Eliminar Registros En Access
«
Respuesta #5 en:
Jueves 2 de Marzo de 2006, 16:55 »
0
Salu2.
Código: Text
DBEngine.CompactDatabase PathDeBaseACompactar, NuevaBaseCompactada, dbLangGeneral, , PassDb
Luego solo tendras que
borrar
la
DB vieja
y
renombrar
la
DB nueva
.
Tambien podrías crear
antes
un
.zip
de la
DB vieja
por si acaso
el proceso no fuera bien.
Espero que te funcione, a mi si
Mi mujer tiene un físico bárbaro!!!. Einstein.
cpmario
Miembro HIPER activo
Mensajes: 629
Re: Eliminar Registros En Access
«
Respuesta #6 en:
Jueves 2 de Marzo de 2006, 20:29 »
0
Te djunto el código que utilizo para compactar y reparar la base de datos en DAO
Código: Text
Sub CompactDbase(sDbase As String, Aviso As Boolean)
Dim sBakDb As String
Dim db As Database
On Error Resume Next
If sDbase <> "" Then
Screen.MousePointer = vbHourglass
'try and open it in exclusive mode
Set db = OpenDatabase(sDbase, True)
If Err = 0 Then
'opened ok so close it
db.Close
'construct the correct .bak filename
sBakDb = Left$(sDbase, InStr(sDbase, ".")) & "BAK"
'give a chance to exit
If Aviso Then
gstrMsg = "Su base de datos " & sDbase & vbCrLf & " se copiará. " & sBakDb
If MsgBox(gstrMsg, vbOKCancel + vbExclamation, "Compactando la Base de Datos") = vbCancel Then
Screen.MousePointer = vbDefault
Exit Sub
End If
End If
'kill any existing .bak
If ExistFilename(sBakDb) Then
Kill (sBakDb)
End If
If Err <> 0 Then Err = 0 'err because no existing .bak
'copy original to sBakdb
FileCopy sDbase, sBakDb
If Err <> 0 Then
'call the generic error handler
GenErrorHandler "copiado de " & sDbase & " a " & sBakDb, Err, Error
Screen.MousePointer = vbDefault
Exit Sub
End If
'kill the existing database because can't compact into an existing one
If ExistFilename(sDbase) Then
Kill (sDbase)
End If
DoEvents
If Err = 0 Then
'deleted ok so compact it
'DBEngine.RepairDatabase sBakDb
DBEngine.CompactDatabase sBakDb, sDbase, dbLangGeneral, dbDecrypt
If Err <> 0 Then
'call the generic error handler
GenErrorHandler "compactado de la base de datos", Err.Number, Err.Description
Err = 0
'copy bakdb to original
FileCopy sBakDb, sDbase
If Err <> 0 Then
'call the generic error handler
GenErrorHandler "Error en copiado de " & sBakDb & " a " & sDbase, Err.Number, Err.Description
Screen.MousePointer = vbDefault
Exit Sub
End If
Else
If Aviso Then
MsgBox "Reparación y compactación completa.", vbOKOnly + vbExclamation, App.Title
End If
End If
Else
End If
Else
'call the generic error handler
GenErrorHandler "intento de abrir la base de datos de manera exclusiva.", Err, Error
End If
End If
Screen.MousePointer = vbDefault
End Sub
Espero te sirva.
elmango80
Miembro MUY activo
Mensajes: 149
Nacionalidad:
Re: Eliminar Registros En Access
«
Respuesta #7 en:
Viernes 3 de Marzo de 2006, 19:54 »
0
Muchas gracias por la informacion
Sagutxo
... ya me iba a poner a probar lo que me dijiste cuando vi que
cpmario
me habia mandado el codigo completo... Bueno gracias por la ayuda y ya sabia yo que por aqui iba a encontrar la solucion de mis problemas como siempre....
Citar
No soy bueno, tampoco soy malo sino todo lo contrario...
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Eliminar Registros En Access