Ver Mensaje Individual
  #15 (permalink)  
Antiguo 08/08/2003, 01:46
Teri
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años, 1 mes
Puntos: 0
Private Sub OF_to_MSAOF(of As OPENFILENAME, msaof As MSA_OPENFILENAME)
' Este procedimiento convierte de la estructura Win32 a la estructura de MSAccess.

msaof.cadRutaCompletaDevuelta = Left$(of.lpcadArchivo, InStr(of.lpcadArchivo, vbNullChar) - 1)
msaof.cadNombreDeArchivoDevuelto = of.lpcadTítuloArchivo
msaof.entPosiciónArchivo = of.nPosiciónArchivo
msaof.entExtensiónDeArchivo = of.nExtensiónArchivo
End Sub
Private Sub MSAOF_to_OF(msaof As MSA_OPENFILENAME, of As OPENFILENAME)
' Este procedimiento convierte de la estructura de MSAccess a la estructura de Win32.

Dim cadArchivo As String * 512

' Iniciar algunas partes de la estructura.
of.hwndPropietario = Application.hWndAccessApp
of.hInstancia = 0
of.lpcadFiltroPersonalizado = 0
of.nMáxFiltroCustr = 0
of.lpfnConexión = 0
of.lpNombrePlantilla = 0
of.lDatosCustr = 0

If msaof.cadFiltro = "" Then
of.lpcadFiltro = MSA_CreateFilterString(ALLFILES)
Else
of.lpcadFiltro = msaof.cadFiltro
End If
of.nÍndiceFiltro = msaof.lngÍndiceFiltro

of.lpcadArchivo = msaof.cadArchivoInicial & String$(512 - Len(msaof.cadArchivoInicial), 0)
of.nMáxArchivo = 511

of.lpcadTítuloArchivo = String$(512, 0)
of.nMáxTítuloArchivo = 511

of.lpcadTítulo = msaof.cadTítuloDeCuadroDeDiálogo

of.lpcadDirectorioInicial = msaof.cadDirectorioInicial

of.lpcadExtPredeterminada = msaof.cadExtensiónPredeterminada

of.indicadores = msaof.lngIndicadores

of.lTamañoEstructura = Len(of)
End Sub
Private Function ActualizarVínculos(cadNombreArchivo As String) As Boolean
' Actualizar los vínculos a la base de datos suministrada. Devolver True si no se produce ningún error.

Dim bd As Database
Dim entCuenta As Integer
Dim tdf As TableDef

' Pasar por todas las tablas de la base de datos.
Set bd = CurrentDb
For entCuenta = 0 To bd.TableDefs.Count - 1
Set tdf = bd.TableDefs(entCuenta)

' Si la tabla tiene una cadena de conexión, es una tabla vinculada.
If Len(tdf.Connect) > 0 Then
tdf.Connect = ";DATABASE=" & cadNombreArchivo
Err = 0
On Error Resume Next
tdf.RefreshLink ' Volver a vincular la tabla.
If Err <> 0 Then
ActualizarVínculos = False
Exit Function
End If
End If
Next entCuenta

ActualizarVínculos = True ' Vinculación terminada.

End Function

Public Function VolverAVincularTablas() As Boolean
' Intentar actualizar los vínculos a la base de datos Neptuno.
' Devolver True si no se produce ningún error.

Const conMáxTablas = 8
Const conTablaNoExistente = 3011
Const conNoEsNeptuno = 3078
Const conNeptunoNoEncontrada = 3024
Const conAccesoDenegado = 3051
Const conBaseDeDatosDeSóloLectura = 3027
Const conTítuloAplicación = "Pedidos"

Dim cadDirectorioAccess As String
Dim cadRutaBúsqueda As String
Dim cadNombreArchivo As String
Dim entError As Integer
Dim cadError As String

' Obtener el nombre del directorio donde está ubicado Msaccess.exe.
cadDirectorioAccess = SysCmd(acSysCmdAccessDir)

' Obtener la ruta predeterminada de la base de datos de ejemplo.
If Dir(cadDirectorioAccess & "Ejemplos\.") = "" Then
cadRutaBúsqueda = cadDirectorioAccess
Else
cadRutaBúsqueda = cadDirectorioAccess & "Ejemplos\"
End If

' Buscar la base de datos Neptuno.
If (Dir(cadRutaBúsqueda & "Neptuno.mdb") <> "") Then
cadNombreArchivo = cadRutaBúsqueda & "Neptuno.mdb"
Else
' Imposible encontrar Neptuno. Mostrar el cuadro de diálogo Abrir archivo.
MsgBox "Imposible encontrar las tablas vinculadas de la base de datos Neptuno. Debe buscar Neptuno para poder utilizar " _
& conTítuloAplicación & ".", vbExclamation
cadNombreArchivo = BuscarNeptuno(cadRutaBúsqueda)
If cadNombreArchivo = "" Then
cadError = "Lo siento, debe buscar Neptuno para abrir " & conTítuloAplicación & "."
GoTo Salir_Falló
End If
End If

' Reparar los vínculos.
If ActualizarVínculos(cadNombreArchivo) Then ' Funcionó.
VolverAVincularTablas = True
Exit Function
End If

' Si falló, mostrar un error.
Select Case Err
Case conTablaNoExistente, conNoEsNeptuno
cadError = "El archivo '" & cadNombreArchivo & "' no contiene las tablas de Neptuno necesarias."
Case Err = conNeptunoNoEncontrada
cadError = "Imposible ejecutar " & conTítuloAplicación & " hasta que no encuentre la base de datos Neptuno."
Case Err = conAccesoDenegado
cadError = "Imposible abrir " & cadNombreArchivo & " porque es de sólo lectura o porque está ubicada en un recurso compartido de sólo lectura."
Case Err = conBaseDeDatosDeSóloLectura
cadError = "Imposible volver a vincular las tablas porque " & conTítuloAplicación & " es de sólo lectura o porque está ubicada en un recurso compartido de sólo lectura."
Case Else
cadError = Err.Description
End Select

Salir_Falló:
MsgBox cadError, vbCritical
VolverAVincularTablas = False

End Function

Espero que te sirva, sólo tienes que retocar la parte que te interese.

Un saludo