FileExist

Hallo,

(AutoCAD VB 6.0 - Oracle 8i)

  1. Frage
    ich habe in einem Variable „Filename“ der Name einer Datei (absolute Pfad) gespeichert. In der Datei ist einfach ein Grafik in AutoCAD.
    Ich möchte es erstmal abfragen, ob die Datei schon existiert. Mit FileExit kann man normaleweise es tun. Ich kriege es aber leider nicht hin. Was ist der Fehler:



FileName=„C:\temp\xxx.dwg“
DateiVerz.value = FileName
Set ActDoc = Documents.Open(FileName)
Documents(FileName.activate

Hier will ich fargen, ob FileName schon existiert. Falls Nein, soll ein Message ausgegeben werden

  1. Frage: geht dabei um Fehlerroutine
    Ich öffne die Datenbank und ganz am Amfang meines Modules schreibe ich:

ON ERROR GoTo errfehler



errfehler:
msgbox…

Obwohl das Programm die richtige Ergebnisse liefert, springt das Mdul in Errorroutine und gibt dei Meldung aus? Hat Jemand eine Idee dazu, warum das so ist?

Gruß

R.

Hallo,

On Error ist ohnehin keine gute Idee. Warum prüfst Du nicht ohne Fehler, ob das File existiert?

Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
Private Sub Form\_Load()
 If PathFileExists("c:\windows\win.com") = True Then
 'Dein Code, wenn das File existiert
 Else
 'Dein Code, wenn das File nicht existiert
 End If 
End Sub

Gruß, Rainer

Hi Rainer,
On ERROR - Geschichte hat ja mir FileExist nicht zu tun. Da geht es daum, ob zum Beispiel die Datenbank geöffnet werden kann oder nicht.

Danke für den Code für PathFileExists. Aber wie kann ich es aufrufen. Das heißt, ich muß die Funktion in mein Projekt eingeben und aufrufen. Aber in Form-Load() ist es nicht allgemein formuliert. Wie kann ich für verschieden Datennamen nach Existenz prüfen?

Gruß

R.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

On ERROR - Geschichte hat ja mir FileExist nicht zu tun. Da
geht es daum, ob zum Beispiel die Datenbank geöffnet werden
kann oder nicht.

Nicht alle Fehler sind auffangbar. Sieh Dir die Liste der auffangbaren Fehler mal in der VB-Hilfe an. Bei den anderen Fehlern hast Du schlechte Karten, das mußt Du dann anders lösen.

Danke für den Code für PathFileExists. Aber wie kann ich es
aufrufen. Das heißt, ich muß die Funktion in mein Projekt
eingeben und aufrufen. Aber in Form-Load() ist es nicht
allgemein formuliert. Wie kann ich für verschieden Datennamen
nach Existenz prüfen?

statt ‚If PathFileExists(„c:\windows\win.com“) = True Then‘
kannst Du doch ‚If PathFileExists(Filename) = True Then‘ schreiben.
In welche Prozedur Du das schreibst, ist ja egal, ich hatte es nur in Form Load, weil das so ein komplett lauffähiges Programm war. Ich hab’s getestet und das getestete Programm kopiert. Das vermeidet Fehler. :wink:
Oder möchtest Du wissen, ob das File existiert, ohne den Pfad zu kennen? Das weiß ich nicht aus dem Kopf, da kann ich den Code erst später posten.

Gruß, Rainer

Hallo,
also, ich habe einen Button und wenn ich darauf kliecke, wird ein Modul gestartet. Dort ist mein Filename bekannt.
Ich habe es versucht, wie Du es gemeint hast, aber das klappte nicht. Muß ich doch die erste Zeile mit …Lib "hlwapi.dll…
in das Modul einfügen?
So sieht es bei mir aus:

*******************
Private Declare Function PathFileExists Lib „shlwapi.dll“ Alias „PathFileExistsA“ (ByVal pszPath As String) As Long

Private Sub CommandButton2_Click()
Dim cnn1 As ADODB.Connection
Dim rstaktiv As ADODB.Recordset
Dim FileName As String

On Error GoTo errPart

Set cnn1 = New ADODB.Connection

'Datenbank öffnen
With cnn1
.Provider = „MSDAORA.1“
.Open „Data Source=vvv;User ID=xxx;password=xxxx“
End With
blnConnect = True
'Tabelle öffnen

Set rstaktiv = New ADODB.Recordset
rstaktiv.CursorType = adOpenKeyset
rstaktiv.LockType = adLockPessimistic
TextBox1.Value = Null
'Cursor auf Tabelle setzen und selektieren
rstaktiv.CursorLocation = adUseClient

rstaktiv.Open „select bearbeiter from h_hallen where bearbeiter is not null and mes-se_id = '“ & ComboBox1.Value & „’ and hallen_id = '“ & ListBox1.Value & "’ ", ObjDa-tenbank.cnnDb, adOpenDynamic, adLockOptimistic

'In der While-Schleife Inhalt der Tabelle in ein Textfeld hinzufügen
While Not rstaktiv.EOF
TextBox1.Value = rstaktiv!bearbeiter
rstaktiv.MoveNext
Wend

If Optausfuehren.Value = True Then
If TextBox1.Value „“ Then
strMeldung = „gesperrt“
MsgBox strMeldung, vbOKOnly + vbExclamation, „HHH“
Else
FileName = „Z:\Temp“ & ComboBox1.Value & „“ & List-Box1.Value & „.dwg“

Set ActDoc = Documents.Open(FileName)
Documents(FileName).Activate
On Error GoTo 0
End If
Else

FileName = „C:\Temp“ & ComboBox1.Value & „“ & List-Box1.Value & „.dwg“
DateiVerz.Value = FileName

Set ActDoc = Documents.Open(FileName)
Documents(FileName).Activate

’ Hier ist Dein Code…klappt aber nicht
If PathFileExists(FileName) = False Then
strMeldung = „kann nicht geöffnet werden!“
MsgBox strMeldung, vbOKOnly + vbExclamation, „FEHLER“
End If
On Error GoTo 0

End If

rstaktiv.Close
ObjDatenbank.DisconnectDB

errPart:
blnConnect = False
rstaktiv.Close
ObjDatenbank.DisconnectDB
strMeldung = „kann nicht geöffnet werden!“
MsgBox strMeldung, vbOKOnly + vbExclamation, „FEHLER“
End Sub

*********************

Gruß

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,
also, ich habe einen Button und wenn ich darauf kliecke, wird ein Modul gestartet. Dort ist mein Filename bekannt.
Ich habe es versucht, wie Du es gemeint hast, aber das klappte nicht. Muß ich doch die erste Zeile mit …Lib "hlwapi.dll…
in das Modul einfügen?
So sieht es bei mir aus:

*******************
Private Declare Function PathFileExists Lib „shlwapi.dll“ Alias „PathFileExistsA“ (ByVal pszPath As String) As Long

Private Sub CommandButton2_Click()
Dim cnn1 As ADODB.Connection
Dim rstaktiv As ADODB.Recordset
Dim FileName As String

On Error GoTo errPart

Set cnn1 = New ADODB.Connection

'Datenbank öffnen
With cnn1
.Provider = „MSDAORA.1“
.Open „Data Source=vvv;User ID=xxx;password=xxxx“
End With
blnConnect = True
'Tabelle öffnen

Set rstaktiv = New ADODB.Recordset
rstaktiv.CursorType = adOpenKeyset
rstaktiv.LockType = adLockPessimistic
TextBox1.Value = Null
'Cursor auf Tabelle setzen und selektieren
rstaktiv.CursorLocation = adUseClient

rstaktiv.Open „select bearbeiter from h_hallen where bearbeiter is not null and mes-se_id = '“ & ComboBox1.Value & „’ and hallen_id = '“ & ListBox1.Value & "’ ", ObjDa-tenbank.cnnDb, adOpenDynamic, adLockOptimistic

'In der While-Schleife Inhalt der Tabelle in ein Textfeld hinzufügen
While Not rstaktiv.EOF
TextBox1.Value = rstaktiv!bearbeiter
rstaktiv.MoveNext
Wend

If Optausfuehren.Value = True Then
If TextBox1.Value „“ Then
strMeldung = „gesperrt“
MsgBox strMeldung, vbOKOnly + vbExclamation, „HHH“
Else
FileName = „Z:\Temp“ & ComboBox1.Value & „“ & List-Box1.Value & „.dwg“

Set ActDoc = Documents.Open(FileName)
Documents(FileName).Activate
On Error GoTo 0
End If
Else

FileName = „C:\Temp“ & ComboBox1.Value & „“ & List-Box1.Value & „.dwg“
DateiVerz.Value = FileName

Set ActDoc = Documents.Open(FileName)
Documents(FileName).Activate

’ Hier ist Dein Code…klappt aber nicht
If PathFileExists(FileName) = False Then
strMeldung = „kann nicht geöffnet werden!“
MsgBox strMeldung, vbOKOnly + vbExclamation, „FEHLER“
End If
On Error GoTo 0

End If

rstaktiv.Close
ObjDatenbank.DisconnectDB

errPart:
blnConnect = False
rstaktiv.Close
ObjDatenbank.DisconnectDB
strMeldung = „kann nicht geöffnet werden!“
MsgBox strMeldung, vbOKOnly + vbExclamation, „FEHLER“
End Sub

*********************

Gruß

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Rainer,
das hat jetzt geklappt. Hatte Die Zeile von Dir an der falschen Stelle gehabt. Die mußte ich bevor ich die Zeichnung aufrufe, einfügen, ansonstens erreiche ich ja die Prüfzeile nicht, weil das Modul schon vorher zu Ende spring.

Danke Dir.
Gruß

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Hatte Die Zeile von Dir an der
falschen Stelle gehabt. Die mußte ich bevor ich die Zeichnung
aufrufe, einfügen, ansonstens erreiche ich ja die Prüfzeile
nicht, weil das Modul schon vorher zu Ende spring.

Genau das wollte ich gerade schreiben. :wink:

Gruß, Rainer