Hallo.
Ich bin auf der Suche nach einer Lösung für mein Problem.
Ich habe in Access 2003 oder Access 2013 (beides vorhanden), eine Tabelle mit zwei Spalten:
Spalte 1 beinhaltet einen Dateinamen.
Splate 2 eine Priorisierung des Bildes.
Sieht wie folgt aus:
10000-10000-2000.jpg;01
10000-20000-7000.jpg;04
usw.
Diese Liste wird aus einer Datenbank generiert und in Access importiert und beinhaltet alle möglichen Kombinationen von Bildnamen (ca. 60.000).
Jetzt werden irgendwann die Bilder nach und nach erstellt.
Die Originalbilder mit dem Dateinamen, im Beispiel 10000-10000-2000.jpg, möchte ich in einem Pfad ablegen.
Ich möchte nun die Bildnamen der Bilder, die die in diesem Pfad gespeichert sind, verändern, bzw. die Dateien in ein neues / anderes Verzeichnis kopieren. Und zwar so, dass die Priorisierung am Anfang angefügt wird.
BSP:
aus 10000-10000-2000.jpg wird -> 01-10000-10000-2000.jpg
aus 10000-20000-7000.jpg wird -> 04-10000-20000-7000.jpg
Hat ein schlauer Kopf eine Idee wie man das umsetzen kann?
Mir geht es nicht darum die Wert nur in der Datenbank zu ändern, sondern das Doing ;)
(falls ich mich nicht richtig ausgedrückt haben sollte)
Von mir aus kann das auch eine Output Datei werden, in der sinngemäß als Ergebnis drin steht:
Copy c:\Temp\org\10000-10000-2000.jpg c:\Temp\bearbeitet\01-10000-10000-2000.jpg usw.
Das könnte man dann ja als Batch speichern. Oder so. Vielleicht. Keine Ahnung was mit Access möglich ist.
Wenn das so gestaltet werden könnte, dass damit ein Azubi klar kommt, wär das suuuuper :))
Muss aber nicht schön sein, Laufzeit ist auch relativ egal, muss nur sauber funktionieren.
Danke und Gruß
Rene
Hallo.
Manchmal muss man nur drüber schreiben.
Ganz stumpf hab ich das in eine Abfrage geknallt:
String: "copy D:\Test\1\" & [ModArtFb] & " " & "D:\Test\2\" & [Prio] & "-" & [ModArtFb]
Die Spalte kopiert, in Notepad eingefügt und als .bat gespeichert.
Wer kriegt es schöner hin? :o ;D ;D ;D
Hallo,
Dateien kannst du auch direkt per VBA aus Access heraus kopieren, dazu brauchst du keine bat-Datei.
Aber woher soll die vorangestellte Nummer kommen?
Guten Morgen.
Danke für die Antwort.
Der Prefix steht in meinem Beispiel in Spalte/Feld 2.
Ich wusste nicht, wie ich das hier darstellen soll, darum habe ich das mit Semikolon getrennt.
BSP: 10000-10000-2000.jpg;01
Die 01 muss mit Bindestrich als Trenner vor den Dateinamen.
BSP Ergebnis: 01-10000-10000-2000.jpg
Das mit der .Bat war nur eine Idee. Damit ich mir selbst helfen kann. Ich weiß, dass das total stumpf ist. Aber ich kann das in Access nicht umsetzen, weil ich keine Ahnung hab :o
Schließlich muss das Programm in der Endausführung:
- ein Dialog bereit stellen, um die Pfade (Quelle und Ziel) als Variable zu hinterlegen (hab ich schon irgendwo gefunden)
- erst die Spalten richtig verketten (also Dateinamen zusammenbauen)
- wenn es gaaaanz super programmiert ist, wird vorher geprüft ob die Datei da ist (die .Bat sagt einfach 0 kopiert), wobei ich wirklich nicht weiß, ob es das nicht langsamer macht und unnötig ist
- dann muss das Script jede Zeile einzeln abarbeiten, und das Kopieren durchführen
Ist für mich zu tricky :-\ ;)
LG
Rene
Moin,
Zitat
Ist für mich zu tricky :-\ ;)
heisst du willst das jetzt ausserhalb Access erledigen? Oder hast du einen aktuellen Stand, auf dem aufbauen willst? Grundlagen in VBA werden aber sicher nötig sein um dein Vorhaben zu verwirklichen.
Ein "bisschen" versteh ich schon.
Nur ich hab jetzt lange nichts mehr gemacht und muss mich reinfuchsen. "Try and Error"
Wenn ich keine Basis hab kann ich auch nicht googlen.
Ich erwarte hier kein fertiges Produkt !
Ich fang jetzt bei null an. Wie ich zum Ergebnis komme ist eigentlich egal. Aber in Access hab ich schon so ein paar Dinge gemacht und finde die Anwendungsmöglichkeiten einfach genial.
Zum Beispiel such ich jetzt gerade die Möglichkeit einen Pfad einzufügen.
Den für eine Datei hab ich schon gefunden (mit entsprechenden Modul natürlich)...
Private Sub DateiPfadQuelle_Click()
On Error GoTo Err_DateiPfadQuelle_Click
'Datei öffnen Box mit variabler Pfadauswahl
Const OFN_FILEMUSTEXIST = &H1000
Const OFN_PATHMUSTEXIST = &H800
Const OFN_HIDEREADONLY = &H4
Const OFN_READONLY = &H1
Const OFN_OVERWRITEPROMPT = &H2
Const OFN_ALLOWMULTISELECT = &H200
Const OFN_EXPLORER = &H80000
Dim fd As New FileDialog
Dim i As Integer
Dim FocusAufAuswahl As Boolean
fd.hwnd = Me.hwnd
fd.ShowOpen
' Pfad für die Importdatei wird hinterlegt
If fd.FileName = "" Then
Me.Importdatei1 = ""
Else
Me.Importdatei1 = fd.FileName
End If
Exit_DateiPfadQuelle_Click:
Exit Sub
Err_DateiPfadQuelle_Click:
MsgBox Error.Description
Resume Exit_DateiPfadQuelle_Click
End Sub
Ich muss mir die Klamotten halt umbauen wie ich es brauch.
Auch wenn es länger dauert.
Hi,
suche mal nach "VerzeichnisÖffnenDialog" oder "FileDialog" in Verbindung mit "msoFileDialogFolderPicker", sowie nach "FileCopy", "CopyFile" oder "Copy".
Hallo.
Ich hatte etwas wenig Zeit, und die Links die ich unter Google gefunden habe, waren mir ein bisschen zu kompliziert.
Ich habe allerdings einen Workaround hinbekommen, und mit einem Klick komme ich zu dem Ergebnis, das ich haben möchte.
Ich hab mir dann doch mit einer Batch geholfen, weil ich nicht wusste, wie ich die Zeilen abfragen kann. Das Problem ist also gelöst. ;D
Allerdings habe ich noch ein paar Fragen:
In einer Tabelle habe ich die Speicherpfade für Quelle und Ziel hinterlegt.
Kann ich diese zwei Werte irgendwie auslesen, damit mir der folgende Script die Dateianzahl in den Verzeichnissen zum Vergleichen anzeigt?
In der Tabelle sind nur zwei Werte, jeweils in der ersten Zeile, der Spalte Quellpfad und Zielpfad.
With Application.FileSearch
.SearchSubFolders = False ' Unterordner mit angeben
.LookIn = "???????" 'Hier muss die Variable aus der Tabelle rein (erste Zeile, Feld1)
.FileName = "*.*"
If .Execute() > 0 Then
Anzahldateien = .FoundFiles.Count
MsgBox Anzahldateien
Else
Anzahldateien = 0
End If
End With
Danke für die Antwort
....
EDIT:
Erledigt
Dim QuellPfad As String
With Application.FileSearch
.SearchSubFolders = False ' Unterordner mit angeben
QuellPfad = DLast("Quellverzeichnis", "Speicherpfade")
.LookIn = QuellPfad
.FileName = "*.*"
If .Execute() > 0 Then
Anzahldateien = .FoundFiles.Count
MsgBox Anzahldateien
Else
Anzahldateien = 0
End If
End With