none
Öffnen eines MS Access Reports ohne automatisches Drucken RRS feed

  • Frage

  • Hallo,

    ich möchte in einem PS Skript einen Report aus einer bestehenden Access Datenbank generieren.

    Dafür erstelle ich zwei Abfragen und möchte den Report dann basierend auf diesen beiden Abfragen öffnen. Allerdings soll beim Öffnen nicht gleich eine Druckanfrage gestartet werden, deshalb werden die Parameter "acViewPreView" und "acHidden" bei AcView und AcWindowMode gesetzt. (Siehe nachfolgender Code)

     

    An dieser Stelle bricht das Skript jedoch mit folgender Fehlermeldung ab.

    Ausnahme beim Aufrufen von "OpenReport" mit 6 Argument(en): "Typkonflikt. (Ausnahme von HRESULT:

    0x80020005 (DISP_E_TYPEMISMATCH))"

    Bei C:\open_report_test.ps1:20 Zeichen 28

    + $comObject.doCmd.OpenReport <<<< ($report_name, $view_mode, $attribute3, $attribute4, $attribute5, $attribute6)  + CategoryInfo: Not Specified (:) [], MethodInvocationException + FullyQualifiedErrorId : ComMethodTargetInvocation

    Und hier der Code:

    $comObject = New-Object -ComObject Access.Application 
    $comObject.Visible = $False
    
    
    $comObject.OpenCurrentDatabase("C:\Test.mdb")
    $comObject.currentDb().CreateQueryDef("Abfrage1",$query_condition)
    $comObject.currentDb().CreateQueryDef("Abfrage2",$query_condition2);
    
    $report_name="Test_Report"
    $view_mode="acViewPreView"
    $attribute3=$null
    $attribute4=$null
    $attribute5="acHidden"
    $attribute6=$null
    
    $comObject.doCmd.OpenReport($report_name, $view_mode, $attribute3, 
    $attribute4 ,$attribute5 ,$attribute6)
    


    Ich hoffe es kann mir jemand weiterhelfen, habe bei mehreren Suchen nämlich bis jetzt nur Informationen bezüglich C# und VBS bekommen :)

    Vielen Dank und viele Grüße

    Sebastian

     

     

    Montag, 22. August 2011 13:18

Antworten

  • Moin,

    Dafür erstelle ich zwei Abfragen und möchte den Report dann basierend auf diesen beiden Abfragen öffnen. Allerdings soll beim Öffnen nicht gleich eine Druckanfrage gestartet werden, deshalb werden die Parameter "acViewPreView" und "acHidden" bei AcView und AcWindowMode gesetzt. (Siehe nachfolgender Code)

    acViewPreView und acHidden sind keine Parameter, das sind Constante, die nur einfacher zu lesen sind, als ihre echten Werte (Constante sind wie Variablen, nur dass man sie nicht mehr Änderung kann).

    acViewPreView  steht für 2, acHidden steht für 1.

    Folgendes müsste also funktionieren (ungetestet):

    $report_name="Test_Report"
    $view_mode=2
    $attribute3=$null
    $attribute4=$null
    $attribute5=1
    $attribute6=$null
    
    $comObject.doCmd.OpenReport($report_name, $view_mode, $attribute3, $attribute4 ,$attribute5 ,$attribute6)
    

    Es ist bestimmt irgendwie möglich, auch die Konstanten von Acces in die PowerShell einzubeinden, da habe ich auf die Schneller aber keine Lösung gefunden.

    Den Wert kannst Du einfach heraus bekommen: Starte Access und öffne mit ALT+F11 den VBA-Editor. Im Direktfenster gibst Du ein "? acViewPreView". Ergebnis: 2.


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    • Als Antwort markiert Basti_S Dienstag, 23. August 2011 06:45
    Montag, 22. August 2011 15:11

Alle Antworten

  • Moin,

    Dafür erstelle ich zwei Abfragen und möchte den Report dann basierend auf diesen beiden Abfragen öffnen. Allerdings soll beim Öffnen nicht gleich eine Druckanfrage gestartet werden, deshalb werden die Parameter "acViewPreView" und "acHidden" bei AcView und AcWindowMode gesetzt. (Siehe nachfolgender Code)

    acViewPreView und acHidden sind keine Parameter, das sind Constante, die nur einfacher zu lesen sind, als ihre echten Werte (Constante sind wie Variablen, nur dass man sie nicht mehr Änderung kann).

    acViewPreView  steht für 2, acHidden steht für 1.

    Folgendes müsste also funktionieren (ungetestet):

    $report_name="Test_Report"
    $view_mode=2
    $attribute3=$null
    $attribute4=$null
    $attribute5=1
    $attribute6=$null
    
    $comObject.doCmd.OpenReport($report_name, $view_mode, $attribute3, $attribute4 ,$attribute5 ,$attribute6)
    

    Es ist bestimmt irgendwie möglich, auch die Konstanten von Acces in die PowerShell einzubeinden, da habe ich auf die Schneller aber keine Lösung gefunden.

    Den Wert kannst Du einfach heraus bekommen: Starte Access und öffne mit ALT+F11 den VBA-Editor. Im Direktfenster gibst Du ein "? acViewPreView". Ergebnis: 2.


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    • Als Antwort markiert Basti_S Dienstag, 23. August 2011 06:45
    Montag, 22. August 2011 15:11
  • Hallo Robert,

    vielen Dank für deine Antwort.

    Es hat genau so funktioniert, wie ich es mir vorgestellt habe. :)

    Danke auch für den Tipp, wie man die Konstantenwerte in Access herausfinden kann.

     

    Viele Grüße

    Sebastian

    Dienstag, 23. August 2011 06:45