Newsgroup: it.comp.lang.visual-basic
Titolo: OpenFileDialog e connessione a mdb

ciao
 
sto sviluppando un' applicazione in vb express 2013. L'applicazione è connessa a un mdb e tutto funziona. Ho deciso di non importare nel progetto l'mdb ma creare una connessione esterna. Vorrei fare in modo che attraverso una OpenFileDialog l'utente possa selezionare il file mdb e da lì stabilire la connessione per i campi presenti nella form. Questa l'istruzione:
 
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            Dim open As New OpenFileDialog
        open.Filter = "miofile (*.mdb)|*.mdb"
            open.InitialDirectory =   Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
            If open.ShowDialog = Windows.Forms.DialogResult.OK Then
                MessageBox.Show(open.FileName, "Apri file", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
    End Sub
 
La sorgente dati nella form è CompleanniBindingSource
come faccio a fare in modo che la selezione del file mdb da OpenFileDialog vada a popolare i campi della form?
 
grazie mille  

Ciao
Posto la soluzione che ho trovato in rete e adattato alle mie esigenze:
 
Imports System.Data
Imports System.Data.OleDb
 
 
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
 
        Dim PercorsoDB As String = String.Empty
        'Richiede all'utente l'apertura di un file.
        Dim o As New OpenFileDialog
        With o
            .ShowDialog()
            PercorsoDB = .FileName
        End With
        If PercorsoDB = String.Empty Then Exit Sub
        Try
            'Definisce una connessione aperta a un' origine dati.
            Dim StringaConnessione As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PercorsoDB & ";User Id=admin;Password=;"
            Dim connessione As New OleDbConnection(StringaConnessione)
            connessione.Open()
            'Comando
            Dim ComandoSQL As String = "SELECT * FROM Compleanni"
            'Rappresenta un istruzione SQL da seguire in relazione a un' origine dati.
            Dim comando As New OleDbCommand(ComandoSQL, connessione)
            'Fornisce un modo per leggere un flusso di righe di dati.
            Dim Lettore As OleDbDataReader = comando.ExecuteReader()
            'Lettore DBMS.
            Dim Record(Lettore.FieldCount - 1) As Object
            Do While Lettore.Read
                Lettore.GetValues(Record)
                Me.TextBox1.AppendText(vbCrLf & Record(0))
                Me.TextBox2.AppendText(vbCrLf & Record(1))
                Me.TextBox3.AppendText(vbCrLf & Record(2))
                Me.TextBox4.AppendText(vbCrLf & Record(3))
            Loop
 
            MsgBox("Connessione effettuata")
 
        Catch ex As Exception 'Rappresenta gli errori che si verificano durante l'esecuzione dell'applicazione.
            MsgBox(ex.Message)
        End Try
 
    End Sub

            PercorsoDB = .FileName
 
 
e se l'utente clicca annulla anzichè Ok nella finestra di dialogo?
Devi gestire il valore di ritorno opportunamente....con la proprietà 
Window.DialogResult. 
 
 

 Window.DialogResult.
 
Vedi "If PercorsoDB = String.Empty Then Exit Sub"

 ha scritto nel messaggio 
news:f7ca8677-55d8-4928...@googlegroups.com...

il problema con le finestre di dialogo è che se tu scegli un file e poi 
clicchi annulla anzichè OK, la proprietà FileName viene comunque 
assegnata,ecco perchè io inserisco un  test così:
 
If openFileDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
 etc... 
 
 

 If openFileDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
 
Il tuo test è corretto, ma il problema che descrivi comunque non l'ho mai riscontrato; questa alternativa funziona regolarmente, anche se prima di annullare evidenzio un file qualunque.
 
OpenFileDialog1.ShowDialog()
If OpenFileDialog1.FileName.Length > 0 Then
    Debug.WriteLine(OpenFileDialog1.FileName)
End If
 
chiaro che se poi riutilizzi la stessa istanza di dialog per una seconda selezione *senza* svuotare prima la property, allora resta piena, ma quello è un altro problema.