Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Seiteneffekte - OpenFileDialog?

6 views
Skip to first unread message

Josef Morlo

unread,
Apr 15, 2012, 8:50:55 AM4/15/12
to
Hallo,

Ausgangssituation:

.mdb („MyDatabase“) mit Master- und Detailtabelle. Dataset, Relations,
Hauptformular mit zwei DataGridViews (Master und Detail), zwei
BindingSources, ein Dialogformular (mit Bindung) zur Eingabe der
Detaildatensätze (zwei Textfelder).

Alle gängigen Datenmanipulationen funktionieren wie gewünscht.

Wenn ich nun im Eingabeformular einen Öffnen-Datei-Dialog aufrufe, mir den
Dateipfad zurückgeben lasse und diesen in eines der gebundenen Textfelder
einlese, meldet mir meine Datenklasse beim Speichern eine OleDbException
bei Conn.Open:

„Datei [Der-gerade-ausgewählte-Dateipfad]\MyDatabase.mdb' nicht gefunden.“

Die .mdb liegt im Ausgabeverzeichnis. Trage ich im Eingabeformular den Pfad
manuell ein, funktioniert alles wie erwartet.

Ich stehe mal wieder wie das Kind am Wege, übersehe ich denn vielleicht
etwas Grundlegendes?

Danke für Hilfe und Gruß
Josef Morlo

PS: Falls erforderlich, kann ich auch Modell-Code posten

Heiko Nocon

unread,
Apr 15, 2012, 2:41:58 PM4/15/12
to
Josef Morlo wrote:

>PS: Falls erforderlich, kann ich auch Modell-Code posten

Das wird wohl nicht nötig werden. Versuch' testweise mal, zwischen Ende
des Dialogs und Öffnen der Datenverbindung eine kleine Wartezeit von ca.
0,5..1 Sekunde einzubauen. Dann klappt es höchstwahrscheinlich auf
einmal völlig problemlos.

Wenn es so kommt, wie ich vermute, dann ist es eine Folge der Seuche
"Shell-Handler"...

Josef Morlo

unread,
Apr 16, 2012, 3:12:49 AM4/16/12
to
Hallo Heiko,

danke zunächst mal für die Rückmeldung,

Heiko Nocon schrieb:

> Versuch' testweise mal, zwischen Ende
> des Dialogs und Öffnen der Datenverbindung eine kleine Wartezeit von ca.
> 0,5..1 Sekunde einzubauen. Dann klappt es höchstwahrscheinlich auf
> einmal völlig problemlos.
>
> Wenn es so kommt, wie ich vermute, dann ist es eine Folge der Seuche
> "Shell-Handler"...

Ich kann den Speicheraufruf auf ‚natürlichem Wege’ verzögern, indem ich das
Schließen des Eingabeformulars mit Rückgabe und das Speichern in der
Datenbank in zwei separate Prozeduren aufteile. Fehlermeldung allerdings
wie gehabt.

Der Fehler scheint auch gänzlich unabhängig vom Speichern in der Datenbank.
Es reicht offensichtlich schon, den ausgewählten Pfad auszulesen, ihn in
einer beliebigen String-Variablen zwischenzuspeichern (auch wenn diese
wieder zurückgesetzt wird). Bereits der Aufruf (sofern kein Cancel) und das
Auslesen führen also dazu, dass die Verbindung zur Datenbank nicht mehr zu
öffnen ist, gleich ob mit oder ohne Wartezeit.

Bin nach wie vor ratlos

Merci und Gruß
Josef Morlo

Josef Morlo

unread,
Apr 16, 2012, 5:42:24 AM4/16/12
to
Nachtrag:

beliebige .mdb ins Ausgabeverzeichnis

Imports System.Data.OleDb

Public Class Form1
Private Conn As New OleDbConnection( _
"Provider=Microsoft.Jet.OleDb.4.0;Data Source=MyDb.mdb")
Private mPath As String = String.Empty

Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
Conn.Open()
MsgBox(Conn.State.ToString)
Conn.Close()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

Dim dlg As New OpenFileDialog
If dlg.ShowDialog = Windows.Forms.DialogResult.OK Then
mPath = dlg.FileName
End If
MsgBox(mPath)
dlg.Dispose()
Conn.Open()
End Sub

End Class

!?

Gruß

Josef Morlo
0 new messages