Pampel: Kann ich Perl aus Access heraus starten?

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

  1. 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

  2. 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

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  3. 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

    --
    Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.
    1. 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

      --
      <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  4. 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

  5. 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

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Computer programming is tremendous fun. Like music, it is a skill that derives from an unknown blend of innate talent and constant practice. Like drawing, it can be shaped to a variety of ends: commercial, artistic, and pure entertainment. Programmers have a well-deserved reputation for working long hours but are rarely credited with being driven by creative fevers. Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination, but because their imagination reveals worlds that others cannot see. -- Larry OBrien and Bruce Eckel in Thinking in C#
  6. 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

  7. Hallo an alle Antworter,

    vielen Dank für Eure guten Hinweise. Damit kann ich schon eine Menge anfangen.

    Viele Grüße,

    Stefan