Liebe Access-Profis,
in meiner DB habe ich eine Prozedur, die in einem Windows-Verzeichnis für jeden Schüler einen Ordner nach der Syntax "Nachname, Vorname - Geburtsdatum" (Bsp. Probe, Petra - 12.03.2007 od. Test, Thomas - 07.09.2005) anlegt. Sollte jetzt aufgrund eines Tippfehlers ein Geburtsdatum von 2007 zu 2008 verändert werden müssen, habe ich jetzt 2 Ordner für den gleichen Schüler.
Wie gehe ich vor, wenn ich einen WINDOWS-Ordner umbenennen möchte.
Ich bin nach mehreren Versuchen ratlos, was die Ereignis-Folge (Before_Update/After_Update od. BeforeInsert) bzw. die Befehlsaufrufe (FSO?) anbelangt.
Für Hilfe vorab vielen Dank
gromax
Hallo,
z. B.
Name "C:\Probe, Petra - 12.03.2007" As "c:\Probe, Petra - 12.03.2008"
Hallo Franz,
vielen Dank für Deine Antwort; mein Problem ist nun spezieller.
In einem Formular pflege ich bei der Erstaufnahme eines Schülers dessen Daten ein und beim Klick auf einen Button wird der Ordner korrekt angelegt.
Private Sub cmdAktualisierenSCH_Click()
Dim strSoSPfad As String
Dim strName As String
Dim strVorname As String
Dim strGebTag As Date
Dim DB As DAO.Database
Dim rs As DAO.Recordset
Dim lngConnect As Long
Set DB = CurrentDb
Set rs = DB.OpenRecordset("SELECT DISTINCT database" _
& " FROM msysObjects" _
& " WHERE Type = 6", dbOpenDynaset)
lngConnect = rs.RecordCount
If lngConnect > 0 Then
strSoSPfad = CurrentDb.TableDefs("tbl_SCHUELER").Connect
strSoSPfad = Mid(strSoSPfad, 11)
strSoSPfad = Left(strSoSPfad, InStrRev(strSoSPfad, "\")) & "Bestand\"
Else
strSoSPfad = CurrentProject.Path & "\Bestand\"
End If
strName = Me.SuS_Nachname
strVorname = Me.SuS_Vorname
strGebTag = Me.SuS_GebDat
With CodeContextObject
On Error Resume Next
DoCmd.RunCommand acCmdSaveRecord
If (.MacroError <> 0) Then
Beep
MsgBox .MacroError.Description, vbOKOnly, ""
End If
End With
End If
If Dir(strSoSPfad & strName & ", " & strVorname & " _ " & strGebTag, vbDirectory) = "" Then
MkDir strSoSPfad & strName & ", " & strVorname & " _ " & strGebTag
Else
Exit Sub
End If
Set DB = Nothing
Set rs = Nothing
End Sub
Mittels einer Variablen (strSoSPfad & strName & ", " & strVorname & " _ " & strGebTag) kann ich nun den aktuellen Pfad inklusive des Ordnernamens erstellen bzw. erfassen; was ich nicht schaffe, ist das Einlesen des vormaligen Pfades - also des Pades vor der Aktualisierung.
Meine Idee war:
Ich erfasse mit dem Ereignis 'Before_Update' den bisherigen Pfad in einer modulöffentlichen Variablen (strSoSPadAlt) und mit dem Ereignis 'After_Update' den aktualisierten Pfad in der bereits bekannten Variablen (strSoSPfad).
Nachfolgend wollte ich dann mit 'Name strSoSPfadAlt As strSoSPfad' aufrufen. Das klappt nicht?!
Was ist falsch?
Viele Grüße
gromax
Hallo,
WIE setzt Du denn im Form_BeforeUpdate- Ereignis den alten Pfad zusammen?
Hast Du den geprüft, ob er auch stimmt?
Hallo Franz,
das habe ich mit folgendem Code versucht:
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim strSoSPfad As String
Dim strName As String
Dim strVorname As String
Dim strGebTag As Date
Dim DB As DAO.Database
Dim rs As DAO.Recordset
Dim lngConnect As Long
Set DB = CurrentDb
Set rs = DB.OpenRecordset("SELECT DISTINCT database" _
& " FROM msysObjects" _
& " WHERE Type = 6", dbOpenDynaset)
lngConnect = rs.RecordCount
If lngConnect > 0 Then
strSoSPfad = CurrentDb.TableDefs("tbl_SCHUELER").Connect
strSoSPfad = Mid(strSoSPfad, 11)
strSoSPfad = Left(strSoSPfad, InStrRev(strSoSPfad, "\")) & "Bestand\"
Else
strSoSPfad = CurrentProject.Path & "\Bestand\"
End If
strName = Me.SuS_Nachname
strVorname = Me.SuS_Vorname
strGebTag = Me.SuS_GebDat
strSoSPfadAlt = strSoSPfad & strName & ", " & strVorname & " _ " & strGebTag
End Sub
Bei der Prüfung erhalte ich dann die Rückmeldung 'Laufzeitfehler "53" - Datei nicht gefunden'. In der dann gelb hinterlegten Zeile "Name strSoSPfadAlt as strSoSPfad" werden in beiden Variablen die neuen Pfade angezeigt. VBA kann mit der obigen Prozedur den vormaligen Pfad in der Variablen nicht ablegen!
Viele Grüße
gromax
Hallo,
versuch das mal so:
strName = Me.SuS_Nachname.OldValue
strVorname = Me.SuS_Vorname.OldValue
strGebTag = Me.SuS_GebDat.OldValue
Hallo Franz,
prima Tipp; allerdings musste ich für jedes Textfeld ([SuS_Nachname], [SuS_Vorname], [SuS_GebDat]), welches zur Erzeugung des Schülerordners beiträgt, eine BeforeUpdate- und ein AfterUpdate-Ereignis einpflegen.
Es galt der Gewohnheit/Möglichkeit der Anwender, gleich nach Eingabe einer Änderung auf den 'Speicher-Button' zu klicken, vorzubeugen; sonst wäre jeweils ein neuer Ordner generiert worden und es galt doch nur, den bisher bestehenden der Änderung anzupassen.
BeforeUpdate-Code zum Feld [SuS_GebDat]:
Private Sub SuS_GebDat_BeforeUpdate(Cancel As Integer)
Dim strSoSPfad As String
Dim strName As String
Dim strVorname As String
Dim strGebTag As Date
Dim DB As DAO.Database
Dim rs As DAO.Recordset
Dim lngConnect As Long
Set DB = CurrentDb
Set rs = DB.OpenRecordset("SELECT DISTINCT database" _
& " FROM msysObjects" _
& " WHERE Type = 6", dbOpenDynaset)
lngConnect = rs.RecordCount
If lngConnect > 0 Then
strSoSPfad = CurrentDb.TableDefs("tbl_SCHUELER").Connect
strSoSPfad = Mid(strSoSPfad, 11)
strSoSPfad = Left(strSoSPfad, InStrRev(strSoSPfad, "\")) & "Bestand\"
Else
strSoSPfad = CurrentProject.Path & "\Bestand\"
End If
strName = Me.SuS_Nachname.OldValue
strVorname = Me.SuS_Vorname.OldValue
strGebTag = Me.SuS_GebDat.OldValue
m_strSoSPfadAlt = strSoSPfad & strName & ", " & strVorname & " _ " & strGebTag
Set DB = Nothing
Set rs = Nothing
End Sub
AfterUpdate-Code zum Feld [SuS_GebDat]:
Private Sub SuS_GebDat_AfterUpdate()
Dim strSoSPfad As String
Dim strName As String
Dim strVorname As String
Dim strGebTag As Date
Dim DB As DAO.Database
Dim rs As DAO.Recordset
Dim lngConnect As Long
Set DB = CurrentDb
Set rs = DB.OpenRecordset("SELECT DISTINCT database" _
& " FROM msysObjects" _
& " WHERE Type = 6", dbOpenDynaset)
lngConnect = rs.RecordCount
If lngConnect > 0 Then
strSoSPfad = CurrentDb.TableDefs("tbl_SCHUELER").Connect
strSoSPfad = Mid(strSoSPfad, 11)
strSoSPfad = Left(strSoSPfad, InStrRev(strSoSPfad, "\")) & "Bestand\"
Else
strSoSPfad = CurrentProject.Path & "\Bestand\"
End If
strName = Me.SuS_Nachname
strVorname = Me.SuS_Vorname
strGebTag = Me.SuS_GebDat
strSoSPfad = strSoSPfad & strName & ", " & strVorname & " _ " & strGebTag
Name m_strSoSPfadAlt As strSoSPfad
Me.Refresh
Set DB = Nothing
Set rs = Nothing
End Sub
Vielen Dank für Deine Hilfe! Super!
Alles Gute!
gromax