Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Windows-Ordner umbenennen

Begonnen von gromax, Oktober 31, 2015, 14:07:34

⏪ vorheriges - nächstes ⏩

gromax

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

DF6GL

Hallo,


z. B.

Name "C:\Probe, Petra - 12.03.2007" As "c:\Probe, Petra - 12.03.2008"

gromax

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

DF6GL

Hallo,

WIE setzt Du denn im Form_BeforeUpdate- Ereignis den alten Pfad zusammen?

Hast Du den geprüft, ob er auch stimmt?

gromax

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

DF6GL

Hallo,

versuch das mal so:

  strName = Me.SuS_Nachname.OldValue
  strVorname = Me.SuS_Vorname.OldValue
  strGebTag = Me.SuS_GebDat.OldValue



gromax

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