Access - problema

 
Vista:

problema

Publicado por Ventura (4 intervenciones) el 11/08/2007 16:25:58
Hola buenas tardes a todos:
he terminado una base de datosen acces y todo me funciona a la perfeccion como yo queria, ningun problema, pero en realidad si tengo uno.
Cuando quiero cambiar la base de datos de un equipo a otro, no me deja, dice que no encuentra el archivo tal y cual.

Yo cree la base de datos en la siguiente direccion.

E\almacen acces\DB\informesycontrol.mdb
siendo "E" mi segundo disco duro que lo uso como almacen general.
cuando intento pasar la base de datos al portatil, me dice que acces no encuentra la ruta y que no tiene acceso a la base de datos.
¿como puedo hacer para que la base de datos puedahacerla portatil a cualquier ordenador?, seguramente sera una pregunta tonta pero ya no se que hacer, pues he probado con grabarla en un cd, he hecho un ejecutable, he usado mi red para compartir archivos, me la he enviado por correo electronico,y no hay forma de poder copiarla y hacer que funcione fuera de su ubicacion de creacion.
Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema

Publicado por 2pl2pl (62 intervenciones) el 11/08/2007 21:40:25
Salvo error u omisión ya que lo he sacado de algo más extenso que tengo en mis aplicaciones, intenta con esto.
Espero lo entiendas y ya me dirás.

En el evento "al abrir" del formulario principal

Private Sub Form_Open(Cancel As Integer)
On Error GoTo VINCULA
Dim CAMPO As String
' --------------------------------------------------------------------------------
' UNIDAD_BD es la ubicación de la BD Access, declarada en Variables
'---------------------------------------------------------------------------------
If Dir("C:\GESPER\ejemplo.jpg") <> "" Then ' Si existe el fichero ejemplo.jpg en esta ubicación establezco UNIDAD_BD
UNIDAD_BD = "C:\GESPER\"
ElseIf Dir("E:\GESPER\ejemplo.jpg") <> "" Then ' igual que anterior
UNIDAD_BD = "E:\GESPER\"
ElseIf Dir("D:\GESPER\ejemplo.jpg") <> "" Then ' igual que anterior
UNIDAD_BD = "D:\GESPER\"
Else
UNIDAD_BD = "C:\"
End If

Me.RecordSource = "Nombre de una de las tablas"

VINCULA:
If Err = 3024 Or Err = 3043 Or Err = 3044 Then
CAMPO = VTACCESS()
End If
Resume Next
End Sub


Luego tengo esta función
Function VTACCESS() As Boolean

Dim dbsTemp As Database
Dim strEntrada As String
Dim strTabla As String
Dim NOMBTAB As String
Dim TABVIN As String
Dim PATH As String

TABVIN = "Mismo nombre de la tabla del Me.RecordSource"
NOMBTAB = "Mismo nombre de la tabla del Me.RecordSource"

Set dbsTemp = OpenDatabase(UNIDAD_BD & BaseDatos)

'Obtiene la elección del usuario.
strEntrada = ";DATABASE=" & UNIDAD_BD & "NOMBRE DE TU BD MDE"
SalidaConexión dbsTemp, (TABVIN), strEntrada, (NOMBTAB)

dbsTemp.Close

End Function

Sub SalidaConexión(dbsTemp As Database, _
strTabla As String, strConectar As String, _
strTablaOrigen As String)

Dim tdfVinculado As TableDef
Dim rstVinculado As Recordset
Dim intTemp As Integer

' Crea un nuevo TableDef, establece las propiedades Connect y SourceTableName basadas en los argumentos transferidos
' y lo anexa a la colección TableDefs.

Set tdfVinculado = dbsTemp.CreateTableDef(strTabla)

tdfVinculado.Connect = strConectar
tdfVinculado.SourceTableName = strTablaOrigen

' Antes de vincular la tabla eliminamos la anterior
dbsTemp.TableDefs.Delete strTabla

dbsTemp.TableDefs.Append tdfVinculado

Set rstVinculado = dbsTemp.OpenRecordset(strTabla)

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema

Publicado por 2pl2pl (62 intervenciones) el 12/08/2007 08:33:05
Más facil que el anterior
Create un un boton de comando y en evento al hacer click pones =VINCULARBD
Te saldrá un cuadro de dialogo y podrás seleccionar el camino donde este la BD
Evidentemente deberás tener cargada en cada PC tu BD.
Function VINCULARBD() As Boolean

Dim ActualDB As Database
Dim ETabla As TableDef
Dim ModuloServidorFile As String
Dim Contador As Integer

ModuloServidorFile = OpenFileAccesos()

If ModuloServidorFile <> "" Then
VTACCESS = True
Set ActualDB = CurrentDb()
For Contador = 0 To ActualDB.TableDefs.Count - 1
Set ETabla = ActualDB.TableDefs(Contador)
If ETabla.Connect <> "" And Right(ETabla.Connect, 12) = "TU BD.MDE" Then
ETabla.Connect = ";DATABASE=" & ModuloServidorFile
Err = 0
ETabla.RefreshLink
If Err <> 0 Then
MsgBox "La conexión con el Módulo Servidor ha sido insatisfactoria." & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "'" & ModuloServidorFile & "' no contiene la tabla '" & ETabla.SourceTableName & "' requerida por la aplicación.", vbCritical + vbOKOnly, "Conexión con el Servidor"
VINCULARBD = False
Exit For
End If
End If
Next Contador
Else
MsgBox "La conexión con el Módulo Servidor ha sido cancelada.", vbCritical + vbOKOnly, "Conexión con el Servidor"
VINCULARBD = False
End If

End Function

Private Function OpenFileAccesos() As String

Dim of As OPENFILENAME

of.hwndOwner = Application.hWndAccessApp
of.hInstance = 0
of.lpstrCustomFilter = 0
of.nMaxCustrFilter = 0
of.lpfnHook = 0
of.lpTemplateName = 0
of.lCustrData = 0
of.lpstrFilter = "NOMBRE DE TU BD SIN MDE" & vbNullChar & "*.mde" & vbNullChar & vbNullChar
of.nFilterIndex = 1
of.lpstrFile = Left$("NOMBRE DE TU BD.MDE" & String$(512, 0), 512)
of.nMaxFile = 511
of.lpstrFileTitle = String$(512, 0)
of.nMaxFileTitle = 511
of.lpstrTitle = "Vincular B.D."
of.lpstrInitialDir = "C:\TRABAJO\"
of.lpstrDefExt = ""
of.flags = OFN_EXPLORER + OFN_FILEMUSTEXIST + OFN_NOCHANGEDIR + OFN_PATHMUSTEXIST + OFN_HIDEREADONLY
of.lStructSize = Len(of)

If GetOpenFileName(of) Then
OpenFileAccesos = Trim(Left$(of.lpstrFile, InStr(of.lpstrFile, vbNullChar) - 1))
Else
OpenFileAccesos = ""
End If

End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar