Bien el mismo problema tuve en un proyecto que tenia que entregar asi que lo solucione de la siguiente manera:
En tu formulario principal el primero que llama tu EXE en el metodo LOAD hago lo siguiente:
' ExiteArchivo es una funcion que tengo en mi modulo publico
'rtdb.fch es el archivo de texto que utilizo para guardar la ruta de la base de datos
' el pongo .fch porque asi el usuario al intentar abrir le va a sacar que seleccione un programa para abrirlo si es + ó - pilas seleccionara el block de notas u otro que pueda leer archivos de texto de lo contrario le dara cancelar
'AppPath es una funcion que me devuelve la ubicacion donde esta el EXE de mi proyecto que es donde guardo el archivo de texto que contiene la cadena de conexion rtdb.fch
1---------------------------------------------------------------
If ExisteArchivo(AppPath() & "rtdb.fch") Then ' si existe el archivo devuelve true y pues no hace absolutamente nada y continua con ejecutando la aplicacion
Else
' si no existe el archivo de texto rtdb.fch entoncs llamo un formulario para que el usuario indique la ubicacion de la base de datos que puede estar en cualquier lugar de la pc
'frmconfig es el formulario donde le indica al usuario que busque en la pc la carpeta donde esta ubicada la base de datos
Dim xfrmInstalacionData As New frmConfig
xfrmInstalacionData.ShowDialog()
End If
'conexionalabasededatos es una funcion donde se lee el archivo de texto
' que contiene la cadena de conexion
conexionadb.connectionstring = conexionalabasededatos()
conexionadb.open()
' contiuar con las instrucciones en el sistema
2--------------------------- en el formulario frmConfig
si el archivo de texto ya existe entoncs muestro la ruta que esta guardada en el
load del formulario
Dim sPath As String
If ExisteArchivo(AppPath() & "rtdb.fch") Then ' verifico que exista el archivo de texto donde tengo guardada la cadena de conexion.
FileOpen(1, AppPath() & "rtdb.fch", OpenMode.Input)
Input(1, sPath)
FileClose(1)
fbd_config.SelectedPath = sPath
txtRuta.Text = Trim(sPath)
Else
Me.fbd_config.SelectedPath = "C:\"
End If
End Sub
utilizo el control FolderBrowserDialog para mostrarle al usuario las carpetas que hay en la pc e indique en cual esta la base de datos
y le paso la ubicacion seleccionada a un control textbox
tengo un control button que le llamo busqueda que al seleccionar el evento Click
fbd_config.ShowDialog() 'fdb_config se llama el control FolderBrowserDialog
txtRuta.Text = fbd_config.SelectedPath 'el txtruta.text el textbox
tengo otro control Button que le llamo grabar en el evento click
' es aqui donde creo el archivo de texto rtdb.fch y guardo la ruta
Dim sPath As String
Try
If Trim(txtRuta.Text) <> "" Then
sPath = Me.txtRuta.Text
FileOpen(1, AppPath() & "rtdb.fch", OpenMode.Output)
Print(1, sPath)
FileClose(1)
Mensaje("RUTA ACTUALIZADA CON EXITO")
Else
MensajeError("Debe de Seleccionar Ruta de Base de Datos")
txtRuta.Focus()
End If
Catch ex As Exception
MensajeError(Err.Description)
End Try
' eso es todo con respecto a los dos formularios el principal que llama el sistema y el que configura la ruta
3-------------- ahora en mi modulo global tengo las siguientes funciones
Public Function ExisteArchivo(ByVal sNombreArchivo As String) As Boolean
Try
If Trim(sNombreArchivo) = "" Then
MensajeError("Nombre de archivo no válido")
Else
ExisteArchivo = Dir(sNombreArchivo) <> ""
End If
Catch ex As Exception
MensajeError(Err.Description)
End Try
End Function
Public Function AppPath() As String
'Devuelve el path del archivo .exe
Dim sPath As String, sExe As String
sPath = System.Reflection.Assembly.GetExecutingAssembly.Location
sExe = Dir(sPath)
AppPath = Left(sPath, Len(sPath) - Len(sExe))
End Function
Public Function DBPath() As String
'Devuelve el path de la base de datos
Dim sPath As String
If ExisteArchivo(AppPath() & "rtdb.fch") Then
FileOpen(1, AppPath() & "rtdb.fch", OpenMode.Input)
Input(1, sPath)
FileClose(1)
DBPath = sPath
Else
DBPath = ""
End If
End Function
Public Function conexionalabasededatos() As String
'Base de datos a Utilizar
Dim cnnStr As String
cnnStr = "Data Source= '" & DBPath() & "\mibasededatos.mdb'; " & _
"Provider = Microsoft.jet.OleDB.4.0;"
conexionalabasededatos = cnnStr
End Function
-----------------------------------------------------------
'bueno espero que esto te sirva ..... si es asi indicalo aqui