Visual dBASE 7.x und
Crystal Report 7 via ActiveX
Autor: Michael Kusch

Wer bis jetzt mit VdB 5.x gearbeitet hat, wird unter VdB 7.x den Crystal Report vermissen. Der unter VdB 7.0 mitgelieferte Report Designer ist, gelinde gesagt, nicht jedermann Geschmack. Daher eine gute Nachricht. Das Einbinden von Crystal Report in VdB 7.x ist mit Hilfe des ActiveX - Moduls eine einfache Angelegenheit.

In diesem Artikel wird beschrieben, wie Crystal Report 7 über ActiveX in Visual dBASE 7 eingebunden werden kann. Crystal Report 7 kann auch das neue DBF-Tabellen-Format Level 7 verarbeiten, da über die BDE auf die Tabellen zugegriffen wird. Zu beachten ist, das der Druck von Memofeldern einen PrimaryKey in der Tabelle benötigt.

Mit dem Installieren von Crystal Report wird auch das ActiveX-Modul, Crystal Report Control, mitgeliefert. Zum Einbinden in VdB ist nach dem Öffnen einer Form, unter Datei, das Einrichten von ActiveX-Modulen in VdB möglich. Wir wählen Crystal Report Control aus. Damit steht es im Komponentenfenster unter der Karteikarte ActiveX zur Verfügung. Durch einfaches Ziehen auf die Form ist das Modul in die Form eingebunden. Fertig das war es, oder fast.

Da Drucken meist nach einem EVENT beginnt, ist der Aufruf des Moduls am besten dort einzubinden.

Hier ein Beispiel:

Function Pushbutton1_onclick
  Class::Drucke_Mit_Crystal()
Return

Function Drucke_Mit_Crystal
  Form.activex1.Nativeobject.ReportFileName="Myreport.rpt"
  Form.activex1.Nativeobject.CopiesToPrinter=1
  Form.activex1.Nativeobject.destination=0
  Form.activex1.Nativeobject.windowcontrols=true
  Form.activex1.Nativeobject.windowShowPrinterSetupBtn=true
  Form.activex1.Nativeobject.windowTitel="Testreport"
  Form.activex1.Nativeobject.windowShowGroupTree=true
  Form.activex1.Nativeobject.WindowSearchBtn=true
  Form.activex1.Nativeobject.action=1
Return

Betrachten wir das Ganze einmal:

Form.activex1.Nativeobject  ist die Referenz auf das mit

  This.activex1 = New ACTIVEX(this)

  endwith

eingebundene ActiveX Modul. Netter weise erledigt das VdB 7.x für uns ganz alleine, sobald wir das AktiveX-Modul auf unsere Form gezogen haben. Das Zeichen für das ActiveX-Modul bleibt auch nach der Compilierung sichtbar. Das ist aber durch die Auslagerung auf eine nicht sichtbare Seite zu umgehen.

Der Zugriff auf das ActiveX-Modul erfolgt über

[form.]NativeObject.[Methode]

Einige dieser Methoden seien hier aufgeführt.

ReportFileName
Übergibt den Namen des Reports an das Modul.

CopiesToPrinter
Soll die Kopienanzahl übergeben. (Im Viewer werden sie jedoch nicht angezeigt)

Destination
Ziel des Reports, wobei 0 = Window (Preview-Fenster) 1 = Printer 2 = File 3 = E-Mail 6 = Exchange-Folder ist.

WindowControls
Schaltet die Printer Control-Buttons im Preview-Fenster ein/aus.

WindowShowPrinterSetupBtn
Zeigt den Button für die Druckereinrichtung

WindowTitel
Übergibt eine Fensterüberschrift.

WindowShowGroupTree
Schaltet den Gruppenbaum ein/aus.

WindowSearchBtn
Schaltet die Suchmöglichkeit im Preview-Fenster ein/aus.

Action
Startet das ActiveX-Modul mit den Voreinstellungen.

Die Übersicht über die verfügbaren Methoden sind in der Developer Hilfe von Crystal-Reports enthalten. Die Beispiele sind in VB gehalten. Anzumerken ist, das einige Methoden nicht zu den gewünschten Ergebnissen führen. Zum Beispiel, ist es mir nicht gelungen mit der Methode Datafiles(n), die im Report angegebenen Pfade zu ändern.

Die zur Weitergabe benötigten Dateien werden in der Runtime Hilfe beschrieben. Das ActiveX-Modul muss mit REGSVR32.EXE CRYSTL32.OCX auf jedem Rechner installiert werden. Das wird aber durch den InstallShield erledigt. Die Vorgehensweise ist beschrieben in der Ausgabe Nr. 4 des dBASE Developer Bulletins, Artikel “InstallShield Express für Visual dBASE 7, Kap. 1.3”.

Eines sei noch erwähnt, mit Crystal ist es auch möglich die Reports als EXE zu compilieren. Das geht dann fast ohne Programmierung.


Über den Autor:

Michael Kusch arbeitet seit 1993 mit dBASE, und entwickelt kaufmännische Anwendungen mit Visual dBASE.

Michael Kusch
EDV-Service
81245 München
Tel.: 089-89712763
Fax: 089-89712290
100277.2335@CompuServe.com