Kann ich Perl aus Access heraus starten?
Pampel
- perl
Hallo zusammen,
aus einer firmeninternen MS-Access-Anwendung heraus sollen E-Mails verschickt werden. Das klappt auch soweit schon.
Das Problem: mit einem speziellen PDF-Tool werden (außerhalb von Access) aus PDF-Dokumenten (Kataloge mit Artikeldaten) mit x Seiten jeweils x einzelne PDF-Dokumente erstellt. Diese haben nun einen Dateinamen, den ich so für das Versenden nicht verwenden möchte.
Daher habe ich ein Perl-Programm geschrieben, welches mir das Umbenennen abnimmt. Da ich für das Erstellen schon aus MS-Access herausgehen muss würde ich gerne wissen, ob es möglich ist, das Perl-Programm mit einem Marco oder VBA-Code aus *MS-Access* heraus zu starten? So kann ich mir es ersparen, noch in eine weitere Anwendung zu wechseln.
Danke für Hinweise.
Gruß,
Stefan
hi,
Du kannst _alles_ mit Perl machen:
PDF Dateien erstellen, Mails versenden.
Falls Du eine Anbindung an access brauchst, richte einen ODBC-Treiber ein und:
use DBI;
Hotte
Yerf!
Da ich für das Erstellen schon aus MS-Access herausgehen muss würde ich gerne wissen, ob es möglich ist, das Perl-Programm mit einem Marco oder VBA-Code aus *MS-Access* heraus zu starten?
Ja.
(Die Antwort muss leider so kurz ausfallen, da ich diesen Konstrukt hier nur benutze und nicht selbst entwickelt hab. Aber vielleicht ermutigt sie dich ja dazu tiefer im Web zu kramen um herauszufinden, wie das geht.)
Gruß,
Harlequin
Daher habe ich ein Perl-Programm geschrieben, welches mir das Umbenennen abnimmt. Da ich für das Erstellen schon aus MS-Access herausgehen muss würde ich gerne wissen, ob es möglich ist, das Perl-Programm mit einem Marco oder VBA-Code aus *MS-Access* heraus zu starten? So kann ich mir es ersparen, noch in eine weitere Anwendung zu wechseln.
Hm, warum lässt Du Perl nicht einfach alles erledigen, siehe hierzu perlmonks.org (Anbindung MS Access). Dann kannst Du auf Access zugreifen und Perl bearbeitet die PDFs und verschickt die Mails.
Siechfred
Yerf!
Hm, warum lässt Du Perl nicht einfach alles erledigen, siehe hierzu perlmonks.org (Anbindung MS Access).
Vielleicht weil Access mehr ist als nur die Jet-Engin? Ich glaube nicht, das man mit Perl genauso einfach eine Oberfläche für eine datenbankbasierte Anwendung realisieren kann.
Dann kannst Du auf Access zugreifen und Perl bearbeitet die PDFs und verschickt die Mails.
Oder man ruft aus Access mittels
Call Shell("perl -I D:\Pfad d:\pfad\skript.pl", vbMinimizedNoFocus)
seine Perlscripte auf. (Hab grad mal in den Quelltext der mdb hier geschaut)
Gruß,
Harlequin
Hallo,
würde ich gerne wissen, ob es möglich ist, das Perl-Programm mit einem Marco oder VBA-Code aus *MS-Access* heraus zu starten? So kann ich mir es ersparen, noch in eine weitere Anwendung zu wechseln.
Ja, zum Beispiel mit der Funktion
Shell
<zitat quelle="Access VBA-Hilfe">
Anmerkung: Die Shell-Funktion führt standardmäßig andere Programme asynchron
aus. Daher muß ein mit Shell ausgeführtes Programm noch nicht abgeschlossen
sein, wenn die nächsten Anweisungen, die auf die Shell-Funktion folgen,
ausgeführt werden.
</zitat>
Es wäre durchaus überlegenswert, den Hinweisen von Hotti und Siechfred zu folgen und die Steuerung umzudrehen.
Freundliche Grüße
Vinzenz
Hello,
für einen synchronen Start einer Shell-Anwendung kannst du dich der Windows-API bedienen. Nachfolgende Teile musst du in einem VBA-Modul unterbringen:
'------------------------------------------------------
Private Declare Function CloseHandle Lib "kernel32" ( _
ByVal hObject As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" ( _
ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
' ShellX stellt eine Erweiterung der Shell-Funktion von VBA dar, die es erlaubt,
' das Ende des ausgeführten Prozesses abzuwarten
Public Function ShellX( _
ByVal PathName As String, _
Optional ByVal WindowStyle As VbAppWinStyle = vbMinimizedFocus, _
Optional ByVal Events As Boolean = True _
) As Long
'Deklarationen:
Const STILL_ACTIVE = &H103&
Const PROCESS_QUERY_INFORMATION = &H400&
Dim ProcId As Long
Dim ProcHnd As Long
'Prozess-Handle holen:
ProcId = Shell(PathName, WindowStyle)
ProcHnd = OpenProcess(PROCESS_QUERY_INFORMATION, True, ProcId)
'Auf Prozess-Ende warten:
Do
If Events Then DoEvents
GetExitCodeProcess ProcHnd, ShellX
Loop While ShellX = STILL_ACTIVE
'Aufräumen:
CloseHandle ProcHnd
End Function
'------------------------------------------------------
Anschließend verwendest du die ShellX-Funktion als wäre es die normale Shell-Funktion.
MfG
Rouven
Kurtz gegrüßt
Daher habe ich ein Perl-Programm geschrieben, welches mir das Umbenennen abnimmt. Da ich für das Erstellen schon aus MS-Access herausgehen muss würde ich gerne wissen, ob es möglich ist, das Perl-Programm mit einem Marco oder VBA-Code aus *MS-Access* heraus zu starten? So kann ich mir es ersparen, noch in eine weitere Anwendung zu wechseln.
wärs denn nicht am einfachsten/saubersten in VBA zu bleiben, wenn du nur "Umbenennst" ?
zugegebn mit nem zusätzlichen Perllayer machst du dich unkündbar! ;-)
Grüße
Kurt
Hallo an alle Antworter,
vielen Dank für Eure guten Hinweise. Damit kann ich schon eine Menge anfangen.
Viele Grüße,
Stefan