border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

Cuenta Bancaria en EEUU

Retroceder   VB-MUNDO - Programacion Visual > Programacion - Lenguajes > Visual Basic 6.00
Registrarse FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
LinkBack Herramientas Desplegado
  #1 (permalink)  
Antiguo 10-11-2006, 17:32:38
Gran Participación en el Foro
 
Registrado: ago 2004
Ubicación: Buenos Aires - Argentina
Posts: 359
dares_ Valoración +2
Contactar con dares_ a través de MSN
Predeterminado Como Reparar una Base de Datos Defectuosa desde el Código ¿?

Hola!
El porblema es este, tengo una base de datos de access q esta defectuosa (dejemos de lado de como llego a suceder esto)
lo q quisiera saber es como puedo hacer para q mi sistema cuando encuentre este error repare la base de datos desde la programacion, solucionando el problema y pudiendo conectarse y entrar a la aplicacion...
Es decir lo mismo q pasa cuando al abrirla con el access se repara automaticamente
Yo ya tenia una rutina q compacta y hace un backup, pero no me sirve para repararla
Hay manera de reparar un base de datos defectuosa desde el codigo, se puede solucionar esto progrmando una rutina en Visual Basic 6¿?
Para mas detalles el error es = -2147467259
[Microsoft][Controlador ODBC Microsoft Access] No se puede abrir la base de datos '(desconocido)'. Es posible que su aplicación no reconozca este tipo de base de datos o que el archivo esté dañado.
Espero q alguien me pase el codigo y lo publique como respuesta asi puede servir a todos en el foro GRACIAS
Diego Ares
Responder Con Cita
  #2 (permalink)  
Antiguo 10-11-2006, 17:56:43
Moderador
 
Registrado: dic 2002
Ubicación: Oviedo - Asturias
Posts: 1.251
angelescj Valoración +2
Predeterminado

Prueba con el método RepairDataBase nombreBase
:smt004
__________________
Angeles
-------------------------------------
Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #3 (permalink)  
Antiguo 10-11-2006, 22:57:01
Avatar de J.M.Movilla
Administrator
 
Registrado: dic 2002
Ubicación: BURGOS - ESPAÑA
Posts: 5.431
J.M.Movilla Valoración +2
Predeterminado

Sólo para devolverle mi saludo a Ángeles... Bueno, y con la esperanza de que te sirva de ayuda a ti, amigo Diego...

Antes de ejecutar la instrucción RepairDatabase tienes que haberla cerrado, porque si no te daría error.
__________________
José María Movilla Cuadrado
______________________

Visual Basic Videos Programacion Foro Programacion
Tutoriales Programacion Trucos Programacion Codigos Programacion
Responder Con Cita
  #4 (permalink)  
Antiguo 10-11-2006, 23:28:58
Moderador
 
Registrado: dic 2002
Ubicación: Oviedo - Asturias
Posts: 1.251
angelescj Valoración +2
Predeterminado

Holaaaaaaaaaaa Abuelo. Oye, menudo cambio de look. ¿Cómo vas? Espero que genial, desde luego en la foto estás hecho un chaval, ja,ja,ja
Un beso muy fuerte
:smt004
__________________
Angeles
-------------------------------------
Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #5 (permalink)  
Antiguo 11-11-2006, 10:35:48
Avatar de J.M.Movilla
Administrator
 
Registrado: dic 2002
Ubicación: BURGOS - ESPAÑA
Posts: 5.431
J.M.Movilla Valoración +2
Predeterminado

Pues... ya ves... Por aquí me dicen: "Tú... como la Preysle... Venga a pasar por el quirófano... así que cada día mejor..."

Un abrazote.
__________________
José María Movilla Cuadrado
______________________

Visual Basic Videos Programacion Foro Programacion
Tutoriales Programacion Trucos Programacion Codigos Programacion
Responder Con Cita
  #6 (permalink)  
Antiguo 11-11-2006, 20:42:55
Gran Participación en el Foro
 
Registrado: ago 2004
Ubicación: Buenos Aires - Argentina
Posts: 359
dares_ Valoración +2
Contactar con dares_ a través de MSN
Predeterminado

Hola!
Estuve probando el metodo RepairDataBase y por lo q lei en la ayuda del Visual Basic 6 esta discontinuado y lo q hay q usar es el metodo CompactDataBase q yo ya lo tenia en una rutina para jstamente compactar la base de datos, se ve q no solo hace esto sino tambien q la repara, el tema es q ahora cuando quiero usar mi rutina me sale este error al intentar compactar y reparar: "No se reconoce el formato de base de datos 'C:\Base\Base.mdb'."
Lo q hago es lo siguiente, en forma general...
'Compactar la base de datos
'myJRO.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\mymdb\\sample.mdb;Jet OLEDBatabase Password=YourPassword;", _
'"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\mymdb\\compactedSample.mdb;Jet OLEDB:Engine Type=5; Jet OLEDBatabase Password=YourPassword;"
Alguien q me tire un salvavidas! GRACIAS
Diego Ares
Responder Con Cita
  #7 (permalink)  
Antiguo 11-11-2006, 21:55:45
Avatar de J.M.Movilla
Administrator
 
Registrado: dic 2002
Ubicación: BURGOS - ESPAÑA
Posts: 5.431
J.M.Movilla Valoración +2
Predeterminado

1º.- CompactDatabase es una instrucción de tipo DAO; por tanto tienes que tener referenciado Microsoft DAO x.x Object Library.

2º.- Lo mismo que para reparar, antes de ejecutar la orden de compactar tienes que haber cerrado la base de datos.

3ª.- La instrucción es así:
Código:
    If FIle("TEMP.mdb") Then Kill("TEMP.mdb")
    DBEngine.CompactDatabase "c:\\mymdb\\sample.mdb",_
           "TEMP.MDB", _
           dbLangGeneral, _
           dbVersion40, _
           ";pwd=PassWord"
    Kill("c:\\mymdb\\sample.mdb")
    FileCopy "TEMP.mdb", "c:\\mymdb\\sample.mdb"
    Kill("TEMP.mdb")
Espero haberte dato todo lo necesario. En todo caso, suerte.

Habida cuenta de lo peligroso que es el código propuesto, será indispensable que antes te asegures una copia de la base de datos...
__________________
José María Movilla Cuadrado
______________________

Visual Basic Videos Programacion Foro Programacion
Tutoriales Programacion Trucos Programacion Codigos Programacion
Responder Con Cita
  #8 (permalink)  
Antiguo 13-11-2006, 14:23:26
Gran Participación en el Foro
 
Registrado: ago 2004
Ubicación: Buenos Aires - Argentina
Posts: 359
dares_ Valoración +2
Contactar con dares_ a través de MSN
Predeterminado

Hola!
No entiendo bien el codigo q me pasastes...y es como q siempre me confunde eso de ADO o DAO, si mal no recuerdo lo mejor es ADO, y en todo caso si esto es asi y quizas el problema de mi rutina radica en q tendria q "actualizar" el codigo, alguien podria pasarme una rutina de como Compactar y Reparar una Base de datos de Access desde la Programacion, tambien quiero hacer un BackUp al mismo tiempo...eso es lo q hacia mi rutina...GRACIAS
Diego Ares
Responder Con Cita
  #9 (permalink)  
Antiguo 13-11-2006, 14:34:03
Gran Participación en el Foro
 
Registrado: ago 2004
Ubicación: Buenos Aires - Argentina
Posts: 359
dares_ Valoración +2
Contactar con dares_ a través de MSN
Predeterminado

Hola!
Esta es mi rutina original, a ver si alguien me dice q es lo mas conveniente, si cambiar la rutina o me como puedo solucionar el error, lo q hago es q cuando se conecta y descubre q la base esta defectuosa, tomo el error y lo mando a esta rutina con la orden de q compacte. GRACIAS. Diego Ares

CODIGO:

Public Sub Mantenimiento() 'Compactar y BackUp 1 vez por día en forma automatica !!!
Dim Origen As String, Destino As String, Copia As String
Dim Dia As String, Extencion As String
'
Extencion = ".mdb"
'
If BasedeDatos = "Access" Then If cnBase.State = 1 Then Call Cerrar_Conexion(cnBase)

'
BaseDefecto = cnBase.DefaultDatabase 'Path donde esta la Base de Datos
PathDNS = Mid(BaseDefecto, 1, Len(BaseDefecto) - Len(App.Title) - 1)
'
If Mid(PathDNS, Len(PathDNS), 1) = "\" Then PathDNS = Mid(PathDNS, 1, Len(PathDNS) - 1)
'
Dia = Format(Date, "dddd")
Copia = PathDNS & "\Backups\" & BaseNombre & Dia & Extencion '(Día escrito seguido de Base)
'
If Dir(Copia) <> "" Then Kill Copia
'
Dia = UCase(Mid(Dia, 1, 1)) & LCase(Mid(Dia, 2, Len(Dia)))
Copia = PathDNS & "\Backups\" & BaseNombre & " " & Dia & Extencion '(Día escrito separdo y con mayusculas de Base)
'
If Dir(Copia) <> "" Then Kill Copia
'
'Poner el nombre de la base Origen
Origen = PathDNS & "\" & BaseNombre & Extencion
'
'Poner el nombre de la base Destino
Destino = PathDNS & "\Backups\" & "Copia de " & BaseNombre & Extencion
'
'Copia Compactando
On Error GoTo errorApertura
'
'Si existe la base Destino la borra
If Dir(Destino) <> "" Then Kill Destino
'
'Compactar la base de datos
'myJRO.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\mymdb\\sample.mdb;Jet OLEDBatabase Password=YourPassword;", _
'"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\mymdb\\compactedSample.mdb;Jet OLEDB:Engine Type=5; Jet OLEDBatabase Password=YourPassword;"
'
'Compactar Destino
JE.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Origen & ";" & "Jet OLEDBatabase Password=" & pClave & ";", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Destino & ";" & "Jet OLEDB:Engine Type=5;Jet OLEDBatabase Password=" & pClave & ";"
'
'Compactar Copia
JE.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Origen & ";" & "Jet OLEDBatabase Password=" & pClave & ";", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Copia & ";" & "Jet OLEDB:Engine Type=5;Jet OLEDBatabase Password=" & pClave & ";"
'
'Borrar la base Original
Kill Origen
'
'Renombrar la base compactada
Name Destino As Origen
'
'Borrar la copia
If pAyuda = "Compactar" Or pAyuda = "Salir" Then Kill Copia
'
'Cerrar 1ro y despues Conectar la base de datos
Call Cerrar_Conexion(cnBase)
Call Conectar(cnBase, "Base")
'
If pAyuda = "Compactar" Then MsgBox "Base de Datos Compactada", vbInformation + vbOKOnly, "Administrador"
If pAyuda = "BackUp" Then MsgBox "Copia de Seguridad Realizada", vbInformation + vbOKOnly, "Administrador"
'
If pAyuda = "Mantenimiento" Then
'
Dim rsInicio As ADODB.Recordset
Set rsInicio = New ADODB.Recordset
'
If rsInicio.State = adStateOpen Then rsInicio.Close
With rsInicio
.ActiveConnection = cnBase
.CursorLocation = adUseClient
.LockType = adLockOptimistic
.Source = "SELECT * FROM Inicio"
.Open
End With
'
Do While Not rsInicio.EOF
rsInicio!Mantenimiento = Format(Date, "dd/mm/yyyy")
rsInicio.Update
rsInicio.MoveNext
Loop
'
rsInicio.Close
Set rsInicio = Nothing
'
End If
'
Exit Sub
'
errorApertura:
If Err.Number Then
'MsgBox Err.Description, vbOKCancel + vbCritical, "Error"
Call Cerrar_Conexion(cnBase)
Call Conectar(cnBase, "Base")
On Error GoTo 0 '???
Exit Sub
End If
'
End Sub

Public Sub Conectar(mConn As ADODB.Connection, mDSN As String)
mConn.Open mDSN
End Sub

Public Sub Cerrar_Conexion(mConn As ADODB.Connection)
If mConn.State <> adStateClosed Then mConn.Close
End Sub
Responder Con Cita
  #10 (permalink)  
Antiguo 13-11-2006, 16:51:04
Avatar de J.M.Movilla
Administrator
 
Registrado: dic 2002
Ubicación: BURGOS - ESPAÑA
Posts: 5.431
J.M.Movilla Valoración +2
Predeterminado

Me pierdo con tu código... Lo único que detecto (y eso ya me "deslumbra") es una instrucción en la que mezclas la orden de compactar con la de conectar la base de datos... Imposible.

Respecto a tu extrañeza por que te aconseje usar DAO cuando todo el mundo invitamos a cambiar a ADO, sólo quiero decirte que no te estoy aconsejando conectarte y manejar la base de datos con DAO, sino que sigas con ADO...; pero si quieres utilizar la instrucción CompactDatabase deberás añadir esa referencia que te indico, porque esa instrucción pertenece a la metodología de DAO. Sólo eso. Algo así como si tú quieres utilizar billetes de 50 Euros; en el caso de que vayas a comprar una cosa que sólo cuesta 12 céntimos, yo te aconsejaría que llevases también alguna moneda, ¿sabes?, sin que por ello interpretes que vas a ir agobiado con un montón de monedas en lugar de llevar billetes...
__________________
José María Movilla Cuadrado
______________________

Visual Basic Videos Programacion Foro Programacion
Tutoriales Programacion Trucos Programacion Codigos Programacion
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último Mensaje
Reparar Base Datos Access Insomnia17 Visual Basic 6.00 8 09-05-2006 07:41:01
reparar y compactar la base de datos crisjavi Visual Basic 6.00 5 22-12-2005 18:04:12
como guardar en la base de datos desde un comboBox karl Visual Basic 6.00 4 06-10-2005 17:25:39
Acceder a base de datos de acces 2000 o 2003 desde codigo ss_jesus Visual Basic 6.00 5 15-02-2005 13:23:55
Como lleno un ListView desde una base de datos ricardosjz Visual Basic.NET 2003 & 2005 1 03-12-2004 17:28:26


La franja horaria es GMT. Ahora son las 02:53:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right