![]() |
PDF-Datein nach Datenbankvorgabe verschieben
Hallo Leute,
ich habe monatlich rund 300 Briefe auf meinem Tisch liegen, die ich auf einen Schlag bearbeiten und versenden muss. Der Spaß soll jetzt digitalisiert werden, also per Mail (PDF) raus gehen. Ich habe alle Briefe eingescannt, und per AutoHotKey schon eindeutig umbenennen lassen. :-D Mein Problem besteht jetzt darin, dass ich eine Datenbank habe (die man ggf. zu einer Exceltabelle herabstufen kann), in der festgehalten ist, welches Dokument in welches Außenhaus muss. Jetzt sollen sozusagen PDF1, PDF17, PDF19,... in einen Ordner gepackt werden, sodass der nur noch gezippt werden muss und per Mail gesammelt ans Sekretariat gehen kann. :-D (In der DB steht zu jedem "PDFn" der Ort dazu). Mit welchem Befehl kann ich die Datenbank mit den Dateinamen abgleichen und entsprechend verschieben(am besten ohne etwas klicken zu müssen)? Und erinnere ich mich richtig, dass MoveFile Datein verschob? Vielen Dank für eure Hilfe! :) |
AW: PDF-Datein nach Datenbankvorgabe verschieben
|
AW: PDF-Datein nach Datenbankvorgabe verschieben
Zitat:
Jetzt mal im Ernst. Eine Datenbank dient dazu, dort Daten abzulegen und abzurufen. Sie kann zwar auch (je nach Datenbank) einiges selbst mit den Daten machen, aber mit Sicherheit keine Mails verschicken. |
AW: PDF-Datein nach Datenbankvorgabe verschieben
Danke schonmal :)
Das Programm soll an sich nur anhand der Dateinamen die PDFs in verschiedene Ordner sortieren. Die Zuordnung steht in der DB. Das verschicken mache ich dann per Hand, das ist nicht das Problem. (Werden ja ORDNERWEISE verschickt) Das per Hand sortieren raubt mir jedoch immer mehrere Stunden. |
AW: PDF-Datein nach Datenbankvorgabe verschieben
[klugscheiß]
Ich verschicke Email aus Oracle DB. Quasi mit Bordmitteln. Den Code dazu findet man im Internet. Es ist auch m.E. gar nicht so unsinnig. Alle Daten die dabei entstehen bzw. benötigt werden, passen prima in eine DB und gehören da auch hin. Und ich wette mal (ohne es zu wissen), das bspw. MS Exchange hauptsächlich aus Datenbank besteht. Aber klar, den Knopf, der es macht wie der TE es haben will, den gibt's nicht. Und das mit Excel ist natürlich praktisch, aber ich würde sagen, das taugt nicht für einen professionellen Einsatz, also am besten schnell wieder vergessen. [/klugscheiß] |
AW: PDF-Datein nach Datenbankvorgabe verschieben
Welche Datenbank? Wie sieht die Struktur der Zuordnungen aus?
|
AW: PDF-Datein nach Datenbankvorgabe verschieben
Also nochmal von vorne:
ist das soweit richtig? Wenn Ja dann
Code:
damit hättest Du schon mal einen Ansatz.
select 'copy '||filename||' '||filialverzeichnis||'\*.*' from Mydatabase where meinebedingung
// select '7Zip '||filialverzeichnis'||'\*.* Zielverzeichnisunddatei' from MyDatabase where meinebedingung (Das das Ergebnis der beiden Abfragen jeweils Zeilen in einer Batchdatei werden, muß wohl nicht erwähnt werden) Zitat:
b) ist zum Glück bei uns abgeschaltet, was meinst Du wieviele Mails ich jede Woche aus der Queue kratze die irrtümlich versendet wurden? Gruß K-H |
AW: PDF-Datein nach Datenbankvorgabe verschieben
Zitat:
Vlt. sollte ich noch ergänzen, dass es nicht um hauseigene Emails geht, sondern eine Seriendruckerweiterung eines Kundensystems. Bei regulierten Worklows kann da eigentlich nichts schief gehen. |
AW: PDF-Datein nach Datenbankvorgabe verschieben
Also, wenn man so eine Frage in einem Delphiforum stellt, gehe ich davon aus, dass auch eine Lösung, oder vielmehr ein Lösungsansatz, in Delphi/Lazarus erwartet wird.
Ansonsten würde man die Frage ja in einem Forum passend zur verwendeten DB z.b. Oracleforum stellen. |
AW: PDF-Datein nach Datenbankvorgabe verschieben
Ja, schon klar. Ich hab ja extra den [Klugsch..] Modus aktiviert. Ist nicht so wichtig und hilft dem TE sicher nicht.
|
AW: PDF-Datein nach Datenbankvorgabe verschieben
Wozu die Dateien verschieben? Ich kann jede Datei in einen beliebigen Ordner eines ZIP-Archivs packen.
Also können die Dateien da bleiben, wo die sind und erzeuge einfach das ZIP-Archiv. Das kommt an die Mail und raus damit. |
AW: PDF-Datein nach Datenbankvorgabe verschieben
Naja wie Jobo schon zart andeutete, ist eine Frage der Organisation und Ausbildung. Wenn man ein Verzeichnis für eine Zieladresse hat, ist für die meisten Menschen einfacher damit umzugehen. Und so wie der TE das Problem beschrieben hat, ist der Arbeitsablauf sehr menschlich.
Gruß k-H |
AW: PDF-Datein nach Datenbankvorgabe verschieben
Hm. Nach dem Dateinamen in der DB suchen. Feld auslesen wohin und verschieben.
Code:
So habe ich es verstanden.
Dateiname | Ziel
a | Verzeichnis A b | Verzeichnis B c | Verzeichnis C |
AW: PDF-Datein nach Datenbankvorgabe verschieben
Okay, habe mich vllt wirklich etwas blöd angestellt bei dem Erstellen des Themas.
Habe mir jetzt folgendes zusammengeschustert:
Code:
Bis jetzt erstellt der Ablauf genau die richtigen Ordner, verfrachtet die Dateien jedoch nicht hinein. Kann mir jetzt jemand weiter helfen?
procedure TForm1.btnstartSortClick(Sender: TObject);
var i:Integer; fname, dirname : string; begin for i:=1 to 248 do begin fname:= StringGrid.Cells[1,i]; dirname:=StringGrid.Cells[2,i]; if not DirectoryExists('C:\pdfbenannt\'+dirname+'\') then CreateDir('C:\pdfbenannt\'+dirname+'\') else if not FileExists('C:\pdfbenannt\'+fname+'.pdf') then break else end; showmessage('Schritt 1 fertig'); for i:=1 to 248 do begin fname:= StringGrid.Cells[1,i]; dirname:=StringGrid.Cells[2,i]; renamefile('C:\pdfbenannt\'+dirname+'.pdf','C:\pdfbenannt\'+dirName+'\'+fname+'.pdf') ; end; showmessage('Schritt 2 fertig'); end; |
AW: PDF-Datein nach Datenbankvorgabe verschieben
Wieso gibst du eigentlich DirectoryExists und CreateDir einen Pfad ("Path" mit abschließendem "\") und kein Verzeichnis ("Dir") ?
Wenn man das mal halbwegs irdentlich formatiert ... Warum wird das Break nur gemacht, wenn das Verzeichnis existierte, aber die Datei nicht? Wenn das Verzeichnis nicht existiert, dann existiert die Datei doch auch nicht.
Delphi-Quellcode:
Warum eigentlich zwei Schleifen und wieso nur in der Ersten das Break?
if not DirectoryExists('C:\pdfbenannt\'+dirname+'\') then
CreateDir('C:\pdfbenannt\'+dirname+'\') else if not FileExists('C:\pdfbenannt\'+fname+'.pdf') then Break else {nix}; Wenn man jetzt eine Fehlerprüfung einfügt, würde einem das schön auf die Füsse fallen, da die Funktion natürlich den Fehler "Datei existiert nicht" wirft. Tipp: ![]() Zitat:
Delphi-Quellcode:
procedure TForm1.btnstartSortClick(Sender: TObject);
var i: Integer; fname, dirname: string; begin for i := 1 to 248 do begin fname := StringGrid.Cells[1, i]; dirname := StringGrid.Cells[2, i]; if not FileExists('C:\pdfbenannt\'+fname+'.pdf') then Break; // oder Continue? ForceDirectories('C:\pdfbenannt\'+dirname); if not RenameFile('C:\pdfbenannt\'+dirname+'.pdf','C:\pdfbenannt\'+dirName+'\'+fname+'.pdf') then RaiseLastOSError; end; ShowMessage(fertig'); end; ![]() ![]() ![]() ![]() oder ![]() ![]() |
AW: PDF-Datein nach Datenbankvorgabe verschieben
Liste der Anhänge anzeigen (Anzahl: 1)
Habe das StrigGrid nochmal überarbeitet. Der Code sieht jetzt so (übernommen) aus:
Code:
Nur kann ich mit der Fehlermeldung nichts anfangen (Das System kann die Datei nicht finden - obwohl sie genau in dem Ordner liegt!):|
procedure TForm1.btnstartSortClick(Sender: TObject);
var i:Integer; fname, dirname : string; begin for i := 1 to 248 do begin fname := StringGrid.Cells[0, i]; dirname := StringGrid.Cells[1, i]; if not FileExists('C:\pdfbenannt\'+fname+'.pdf') then Continue; // oder Continue? ForceDirectories('C:\pdfbenannt\'+dirname); if not RenameFile('C:\pdfbenannt\'+dirname+'.pdf','C:\pdfbenannt\'+dirName+'\'+fname+'.pdf') then RaiseLastOSError; end; ShowMessage('fertig'); |
AW: PDF-Datein nach Datenbankvorgabe verschieben
Bist'e dir da ganz sicher?
Groß-/Kleinschreibung ist zwar egal (außer es ist z.B. kein FAT/NTFS), aber sonst muß das 'C:\pdfbenannt\'+dirname+'.pdf' halt stimmen, was es wohl doch nicht tut. PS: Strg+C im (Fehler)Dialog und als Text irgendwo wieder einfügen (Strg+V) Vor das RenameFile ein
Delphi-Quellcode:
-> Strg+C -> im Editor Strg+V -> den Pfad rauskopieren -> und dann mal probehalber in den Explorer kopieren und [Enter]
ShowMessage('C:\pdfbenannt\'+dirname+'.pdf');
|
AW: PDF-Datein nach Datenbankvorgabe verschieben
Zitat:
if not FileExists('C:\pdfbenannt\'+fname+'.pdf') und danach RenameFile('C:\pdfbenannt\'+dirname+'.pdf' ?? |
AW: PDF-Datein nach Datenbankvorgabe verschieben
Mit folgendem Code hat's wunderbar funktioniert:
Code:
Vielen Dank an alle! :-D
for i := 1 to 248 do begin
fname := StringGrid.Cells[0, i]; dirname := StringGrid.Cells[1, i]; if not FileExists('C:\pdfbenannt\'+fname) then Continue; // oder Continue? ForceDirectories('C:\pdfbenannt\'+dirname); if not RenameFile('C:\pdfbenannt\'+fname,'C:\pdfbenannt\'+dirName+'\'+fname) then RaiseLastOSError; ProgressBar1.Position:=ProgressBar1.position+7; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz