MySQL, Visual Basic 6 und Crystal Reports 9 verwenden
Von Mike Hillyer
Letzte Aktualisierung: 22. Mai 2003
Übersetzt von: Stefan Hinz
Stand: 5. Juni 2003
Anmerkungen des Übersetzers:
- Einige der in der verwendeten Software benutzten Begriffe wurden zweisprachig gehalten, um sowohl englisch- als auch deutschsprachige Programmversionen zu behandeln.
- Die Codebeispiele sind nicht übersetzt, um verschiedene Sprachversionen dieses Artikels konsistent halten zu können. Wo das sinnvoll erschien, wurden im Code verwendete Begriffe in einem davor stehenden Absatz übersetzt.
Zum Forum für diesen Artikel
Beispielcode #1
Beispielcode #2
Sie haben also eine große Menge von Daten in Ihrer MySQL™-Datenbank und Ihre Benutzer können Daten mit der VB-Applikation, die Sie geschrieben haben, hinzufügen und herausholen. Jetzt aber wollen sie die Daten in einer aussagefähigeren Form haben. In der ersten Visual-Basic-Applikation, die ich schrieb, versuchte ich Ihnen Zusammenfassungen und Berichte zu präsentieren, indem ich Formulare schrieb, die dynamisch zugeordnete Arrays von Beschriftungen (Labels) enthielten, und baute das Formular beim Durcharbeiten der Daten auf.
Diese Methode funktionierte auch, und das Formular sah recht ansehnlich aus, aber Änderungen ließen sich nur schwer anbringen. Das Umherschieben von Elementen auf dem Formular erforderte Änderungen an diversen Konstanten, die zur Steuerung von Positionen und Abständen benutzt wurden, und außerdem musste nach Änderungen neu kompiliert werden. (Ich hätte die Konstanten natürlich auch aus einer Textdatei laden können, doch das Gebiet war für mich neu.) Später entdeckte ich dann Crystal Reports®, ein mächtiges Werkzeug zur Erzeugung von Berichten. Mit Crystal Reports war ich in der Lage, meinen Code-basierten Bericht in wenigen Minuten neu aufzubauen und ihn nach Belieben zu ändern. Nach der Durchführung von Änderungen musste ich einfach nur die Berichtsdatei ersetzen, und Visual Basic zeigte beim nächsten Anschauen den neuen Bericht. Das ersparte mir beim Erstellen von Datenberichten viel Zeit, und ich konnte neue Berichte auf Anforderung von Benutzern wie am Fließband herstellen.
Eine der Herausforderungen bei der Arbeit mit Crystal Reports bestand darin, den Bericht in meiner VB-Applikation anzeigen zu lassen, und zwar mit Daten, die mithilfe eines ADO-Recordsets und MySQL erzeugt wurden. Mit der Version von Crystal Reports, die VB 6 beiliegt (Version 4.6 von Crystal Reports), wurde diese Eigenschaft nicht richtig unterstützt. Persönlich bevorzuge ich, Software zu entwickeln, die keine DSN benutzt, aber in diesem Fall musste ich eine Ausnahme machen und auf meinem Zielsystem eine DSN einrichten, so dass Crystal Reports auf Echtdaten zugreifen konnte, wobei die VB-Applikation die Auswahlformel des Berichts veränderte, um es dem Benutzer zu gestatten, die Daten zu steuern, die im Bericht angezeigt werden sollten.
Glücklicherweise war ich damals Entwickler in einem Unternehmen, das Wiederverkäufer von Crystal Reports ist, so dass ich mit Crystal Reports 9 arbeiten konnte. Der Schritt von Crystal Reports 4.6 zu Crystal Reports 9 war eine Verbesserung, die sich mit dem Handcodieren von Berichten und der Benutzung von Crystal Reports vergleichen lässt. In Crystal Reports Version 6 wurde Active Data eingeführt, womit man Berichte erzeugen kann, die auf von ADO bereitgestellte Daten zurückgreifen. In Crystal Reports Version 8 kam die Programmkomponente Report Designer hinzu, die die Art und Weise, wie Berichte in VB eingeladen und betrachtet werden können, erheblich verbessert. In dem vorliegen Artikel beschreibe ich, wie Berichte mit Visual Basic 6, Crystal Reports 9 und MySQL erstellt und angezeigt werden. (In einem zukünftigen Artikel werde ich auch die Anzeige von Daten mit Crystal Reports 6 und 4.6 beschreiben.)
Dieser Artikel geht von der Annahme aus, dass der Leser das relationale Datenbankmanagementsystem (RDBMS) MySQL verwendet, sollte aber auch für Entwickler hilfreich sein, die andere RDBMS verwenden. Warum MySQL für Visual-Basic-Programmierer eine gute Wahl ist, ist im Artikel Warum VB/MySQL dargestellt. Weitere informationen zu MySQL und woher man das RDBMS bezieht (Download) finden Sie auf der MySQL-Website. Die in diesem Artikel gezeigten Beispiele setzen die neuste Version von Connector/ODBC (vormals MyODBC) voraus, das Sie hier herunterladen können (bei Redaktionsschluss Version 3.51.06). Dieser Artikel basiert wie gesagt auf Crystal Reports 9 (eine Evaluierungsversion können Sie hier herunter laden). Ich empfehle die Installation von Servicepack 1 und von allen monatlichen Hotfixes, die Sie von support.crystaldecisions.com erhalten.
Auf der Visual-Basic-Seite empfehle ich die Installation von Servicepack 5 für VB, das Sie hier herunterladen können. Zusätzlich sollte die neuste Version von MDAC installiert sein (Microsoft Data Access Components), die Sie hier finden (zum Redaktionsschluss 2.7 SP1). Zum Schluss sei gesagt, dass sich dieser Artikel auf ADO 2.7 und VB6 bezieht und nicht auf ADO.NET unter VB.NET zutrifft, es sei denn, Sie verweisen in Ihrem Projekt auf ADODB und benutzen es für den Datenbankzugriff.
Erstellen eines Berichts
Aufbau eines Berichts
Ein Crystal-Bericht besteht aus mehreren Abschnitten:
- Berichtskopf (Report Header)
- Seitenkopf (Page Header)
- Gruppenkopf (Group Header)
- Detailzeile (Detail Line)
- Gruppenfuß (Group Footer)
- Seitenfuß (Page Footer)
- Berichtsfuß (Report Footer)
Alles, was in den Berichtskopf und -fuß platziert wird, wird im Bericht einmal angezeigt. Elemente im Seitenkopf und -fuß werden auf jeder Seite angezeigt. Gruppenköpfe und -füße werden einmal pro Gruppe von Detailzeilen angezeigt; es gibt eine Detailzeile für jede Zeile von Daten. Alle Abschnitte können entweder versteckt oder unterdrückt werden, so dass sie im Bericht nicht erscheinen. Versteckte Abschnitte können durch “drilling-down” angezeigt werden, indem auf einen zugeordneten Abschnitt doppelt geklickt wird, der angezeigt wird. Unterdrückte Abschnitte dagegen werden überhaupt nicht angezeigt.
In jedem Berichtsabschnitt können verschiedene Informationen platziert werden, unter anderem:
- Beschriftungen (Text Labels)
- Datenbankfelder (Database Fields)
- Bilder (Images)
- Diagramme (Graphs)
- Zusammenfassungen (Summaries)
- Formeln (Formulas)
Die meisten davon sind selbsterklärend. Zu den Zusammenfassungen gehören Summen, Zählergebnisse, Durchschnitte und andere Aggregatwerte auf der Grundlage unterschiedlicher Felder. Formeln erlauben es dem Ersteller eines Berichts, verschiedenen Feldern komplexe logische Ausdrücke und Formatierungen hinzuzufügen.
Erzeugen der Felddefinitionen
Das Erzeugen eines typischen Berichts ist sehr einfach. Zuerst definieren wir die Felder, mit denen der Bericht erzeugt werden soll, ordnen diese dann auf dem Formular an und gruppieren und summieren sie dann wie benötigt. Eine Felddefinitionsdatei erlaubt uns die Definition der Daten, auf die wir in unserem Bericht zugreifen werden. Fangen wir mit der Tabelle an, aus der wir den Bericht erstellen werden:
Übersetzung der Begriffe im Code:
- transactionid = Transaktionskennung
- salesman = Verkäufer
- region = Region
- amount = Betrag
CREATE TABLE report( transactionid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, salesman CHAR(20) NOT NULL, region CHAR(20) NOT NULL, amount FLOAT );
Zum Erzeugen einer Felddefinition öffnen wir den Datenbankassistenten (database expert) von Crystal Reports. Der Zugriff auf den Datenbankassistenten kann durch Öffnen eines leeren Berichts oder durch Auswahl des Menüpunkts Datenbank-Assistent (Database Expert) im Menü Datenbank (Database) erfolgen. Die daraufhin erscheinende Baumansicht enthält den Zweig Neue Verbindung erzeugen (Create New Connection), die beim Ausklappen die Option Nur Felddefinitionen (Field Definitions Only) beinhaltet. (Anmerkung des Übersetzers: Diese Option verbirgt sich in der von mir verwendeten Version im Zweig Weitere Datenquellen.) Durch Anklicken der Schaltfläche Datei erzeugen… (Create File… ) im Dialogfenster erscheint das Definitionswerkzeug (Database Definition Tool) zum Erzeugen von Felddefinitionsdateien.
Felddefinitionsdateien enthalten durch Tabulatoren getrennte Daten. Ihre Extension ist .ttx, und sie enthalten vier Werte:
- Feldname
- Feldtyp
- Feldlänge (falls vom Typ Zeichenfolge)
- Beispieldaten
Der Feldname wird direkt vom Namen des Feldes in Ihrer Datenmenge genommen (das könnte der Feldname der zugrundeliegenden Tabelle oder der Alias, den Sie ihm mit dem Schlüsselwort AS in der Abfrage zugewiesen haben). Der Feldtyp ist der Datentyp des Feldes, die Feldlänge legt die Breite einer Zeichenfolge fest und die Beispieldaten sind ein statischer Wert, der zur Hilfestellung beim Festlegen des Feldlayouts verwendet wird.
Eine Felddefinitionsdatei for die obige Tabelle könnte wie folgt aussehen:
transactionid uLong 1salesman String 20 Georgeregion String 20 Calgaryamount Currency 30.00
Sobald wir die Felddefinitionsdatei erzeugt haben, können wir sie zum Erstellen unseres Berichts verwenden, indem wir sie aus dem Kasten ‘Verfügbare Datenquellen’ (’Available Data Sources’) in den Kasten ‘Ausgewählte Tabellen’ (’Selected Tables’) im Datenbank-Assistenten ziehen und auf OK klicken. Bevor wir weitermachen, soll festgehalten werden, dass eine .ttx-Datei auch automatisch aus einer Datenmenge erzeugt werden kann. Das ist nützlich, um festzustellen, welche Berichtsdatentypen man verwenden soll. Dennoch besteht die Notwendigkeit, nachzuarbeiten und sinnvolle Beispielwerte anzugeben. Das folgende Beispiel zeigt auf die Schnelle, wie eine .ttx-Datei automatisch erzeugt wird. Erstellen Sie hierfür ein neues Projekt mit einem Verweis zu ADO 2.7 und platzieren Sie folgenden Code in den Code-Abschnitt von form1.:
Option Explicit
'ps2mon.dll MUSS IN SYSTEMVERZEICHNIS VORHANDEN SEIN
'ES BEFINDET SICH IM UNTERORDNER \TOOLS\DEVELOPERS
'IHRES CR9-VERZEICHNISSES
Private Declare Function CreateFieldDefFile Lib "p2smon.dll" (lpUnk As Object, _
ByVal fieldDefFile As String, ByVal bOverWriteFile As Long) As Long
Private Sub Form_Load()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim result As Long
Set conn = New ADODB.Connection
conn.CursorLocation = adUseClient
conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" _
& "SERVER=123.456.789.101;" _
& "DATABASE=test;" _
& "UID=myuser;" _
& "PWD=mypass;" _
& "OPTION=" & 1 + 2 + 8 + 32 + 2048 + 163841
conn.Open Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM report", conn, adOpenStatic, adLockReadOnly
'RECORDSET UND PFAD ZU ERZEUGTER DATEI UEBERGEBEN, TRUE/FALSE ZUM UEBERSCHREIBEN
result = CreateFieldDefFile(rs, App.Path & "\report.ttx", True)
If result Then
MsgBox "Datei " & App.Path & "\data.ttx erfolgreich angelegt", vbInformation, "Fertig!"
Else
MsgBox "Erzeugen der ttx-Datei fehlgeschlagen!", vbCritical
End If
End Sub
Felder, Gruppierungen und Zusammenfassungen anordnen
Mit dem Feld-Explorer (Field Explorer), den Sie im Menü Feld-Explorer (field explorer) unter Ansicht (View) finden, wählen Sie Felder aus und platzieren sie auf dem Formular. Nachdem alle Felder auf das Formular gezogen wurden, können wir Daten gruppieren, um sie aussagekräftiger darzustellen.
Im Menü Bericht (Report) finden Sie den Gruppen-Assistenten (Grouping Expert). Mit diesem können Sie auswählen, nach welchen Feldern Sie gruppieren wollen (in unserem Fall nach dem Feld region und anschließend nach salesman).
Nachdem die Gruppierungen festgelegt sind, sehen wir, dass unserem Bericht zwei Gruppen hinzugefügt wurden, wobei die Gruppennamen als Teil des Hauptberichts in den Gruppenköpfen dargestellt sind. Durch Rechtsklick auf diese zwei Abschnittsköpfe können wir die Option Unterdrücken auswählen, was bewirkt, dass die Gruppenköpfe nicht angezeigt werden.
Um Daten zusammenzufassen, klicken Sie auf das Feld, das zusammengefasst werden soll, und wählen aus dem Menü Einfügen (Insert) Gruppenergebnis (Summary). Das daraufhin erscheinende Dialogfeld stellt Optionen zur Verfügung, mit denen festgelegt werden kann, nach welchem Feld zusammengefasst werden soll (in unserem Fall nach dem Feld amount), welche Art von Zusammenfassung durchgeführt werden soll (wir wollen die Summe berechnen) und wo der Ergebniswert platziert werden soll (wir werden einen im Fuß jeder Gruppe und einen weiteren im Berichtsfuß platzieren). Anschließend stehen uns die Zusammenfassungen auf dem Bericht zur Formatierung und Positionierung zur Verfügung..
Formeln hinzufügen
Nachdem unsere Daten im Bericht platziert wurden, können wir berechnete Felder erzeugen, indem wir Formeln eingeben. Formeln können entweder in der Syntax von Crystal Reports oder (in CR 9) der von Visual Basic geschrieben werden. Wir wollen eine einfache Formel hinzufügen, die Provisionen für unsere Verkäufe anzeigt. Hierzu klicken wir im Feld-Explorer mit der rechten Maustaste auf die Formelfelder-Überschrift und wählen Neu. Hierdurch wird der Formeleditor angezeigt, nachdem ein Name für die Formel abgefragt wurde (als Name reicht hier Provision aus). In der rechten oberen Ecke befindet sich ein Klappmenü für die Crystal-Syntax. Dieses sollten Sie auf die Basic-Syntax einstellen, so dass wir mit der Syntax im Stil von Visual Basic arbeiten können. Als Nächstes geben Sie im Formelfenster Folgendes ein:
formula = {article.amount} * 0.05
Anschließend klicken Sie auf Speichern und schließen das Formelfenster. Die neue Formel ist jetzt im Feld-Browser verfügbar und kann im Detailbereich des Berichts eingefügt werden. Wir können auch Zusammenfassungen der Formel hinzufügen, wenn wir das wollen.
Hierdurch erhalten wir nun einen grundlegenden Bericht. Mit F5 sehen Sie eine Vorschau des Berichts, die dieselben Beispieldaten verwendet, die Sie in Ihrer .ttx-Datei eingegeben haben. Der nächste Schritt besteht darin, den Bericht für Benutzer in der VB-Applikation anzuzeigen, die aus MySQL abgerufene Daten verwendet.
Anzeige der Daten
Bei Crystal Reports 8 und höher wurde der OCX Crystal Viewer durch den Berichtsdesigner (Report Designer) ersetzt. Hierdurch wird ein stärker objektorientierter Ansatz zum Anzeigen von Berichten erzielt. Ein Vorteil davon ist, dass der Berichtsanzeiger nicht direkt auf dem Formular platziert wird, wodurch man den Bericht an einer bestimmten Stelle des Formulars unterbringen kann, ohne ein neues Formular zu eröffnen.
Die Prozedur zur Darstellung des Berichts in VB ist recht einfach:
- ADODB-Verbindung und Datengruppenobjekte (recordset objects) einrichten
- Datengruppenobjekt mit Anfrage füllen
- Crystal-Reports-Applikation und Berichtsobjekte einrichten
- Bericht öffnen
- Bericht an Datengruppe anbinden
- Bericht an Anzeiger (Viewer) anbinden
- Bericht anzeigen
Zur Anzeige eines Berichts in Ihrer VB-Applikation benötigen Sie Folgendes:
Verweise (Referenzen):
- Microsoft ActiveX Data Objects 2.7 Bibliothek
- Crystal Reports 9 ActiveX Designer Laufzeitbibliothek
Komponenten:
- Crystal Reports Viewer Control 9
Außerdem benötigen Sie auf Ihrem Formular eine Crystal-Reports-Anzeigesteuerung namens CRViewer.
Vorbereitung der Daten
Zuerst benötigen wir Daten, aus denen wir den Bericht erstellen. Hierfür verwenden wir ADO:
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
conn.CursorLocation = adUseClient 'SERVER-SEITIG NICHT EMPFOHLEN
conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" _
& "SERVER=123.456.789.101;" _
& "DATABASE=test;" _
& "UID=myusername;" _
& "PWD=mypass;" _
& "OPTION=" & 1 + 2 + 8 + 32 + 2048 + 163841 'ALLE PARAMETER SETZEN
conn.Open 'FOLGENDE OPTIONSWERTE SIND FUER VB AM BESTEN GEEIGNET
conn.Execute "DROP TABLE IF EXISTS report", , adExecuteNoRecords
'ADEXECUTENORECORDS WIRD FUER ANFRAGEN BENUTZT,
'DIE KEINE DATEN ZURUECKGEBEN
'(CREATE, INSERT, DELETE USW.)
conn.Execute "CREATE TABLE report(" _
& "transactionid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY," _
& "salesman CHAR(20) NOT NULL," _
& "region CHAR(20) NOT NULL," _
& "amount Float)", , adExecuteNoRecords 'DIE TABELLE, AUS DER DER BERICHT KOMMT
'EINIGE DATEN IN DIE TABELLE EINFUEGEN
conn.Execute "INSERT INTO report(salesman, region, amount) VALUES('George','Calgary',30.00)", , adExecuteNoRecords
conn.Execute "INSERT INTO report(salesman, region, amount) VALUES('George','Calgary',15.00)", , adExecuteNoRecords
conn.Execute "INSERT INTO report(salesman, region, amount) VALUES('George','San Jose',10.00)", , adExecuteNoRecords
conn.Execute "INSERT INTO report(salesman, region, amount) VALUES('Jerry','Calgary',30.00)", , adExecuteNoRecords
conn.Execute "INSERT INTO report(salesman, region, amount) VALUES('Jerry','San Jose',100.00)", , adExecuteNoRecords
Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM report", conn, adOpenStatic, adLockReadOnly
Vorbereiten und Anzeigen des Berichts
Jetzt haben wir einen Satz von Daten (recordset). Wir müssen den Bericht jetzt nur noch laden, ihn mit dem Satz von Daten und dem Betrachter (viewer) verknüpfen und ihn anzeigen:
Dim crystal As CRAXDRT.Application 'BERICHT AUS DATEI LADEN Dim report As CRAXDRT.report 'ENTHAELT BERICHT CRViewer.DisplayBorder = False 'SORGT DAFUER, DASS DER BERICHT DAS GESAMTE FORMULAR AUSFUELLT CRViewer.DisplayTabs = False 'BERICHT OHNE DRILL-DOWN, DAHER NICHT BENOETIGT CRViewer.EnableDrillDown = False 'BERICHT UNTERSTUETZT KEIN DRILL-DOWN CRViewer.EnableRefreshButton = False 'ADO-RECORDSET AENDERT SICH NICHT, DAHER NICHT BENOETIGTSet crystal = New CRAXDRT.Application 'VERWALTET BERICHTE Set report = crystal.OpenReport(App.Path & "\report1.rpt") 'BERICHT OEFFNEN report.DiscardSavedData 'BERICHT LEEREN, UM MIT DEN RECORDSET-DATEN ZU ARBEITEN report.Database.SetDataSource rs 'BERICHT MIT RECORDSET VERKNUEPFEN CRViewer.ReportSource = report 'BETRACHTER (VIEWER) MIT BERICHT VERKNUEPFEN CRViewer.ViewReport 'BERICHT ANZEIGEN Do While CRViewer.IsBusy 'ZOOM-METHODE FUNKTIONIERT NICHT, DoEvents 'WAEHREND BERICHT GELADEN WIRD, DAHER WARTEN Loop 'BIS BERICHT GELADEN IST. CRViewer.Zoom 94
Sobald der Bericht angezeigt wird, können wir unsere Objekte aufräumen:
rs.Close 'AB HIER IST ALLES AUFRAEUMARBEIT Set rs = Nothing conn.Close Set conn = Nothing Set crystal = Nothing Set report = Nothing
Schließlich können wir dem Ereignis Form_Resize etwas Code hinzufügen, um sicherzustellen, dass unser Bericht das gesamte Formular bedeckt:
Private Sub Form_Resize() 'SICHERSTELLEN, DASS BERICHT FORMULAR FUELLT CRViewer.Top = 0 'WENN DAS FORMULAR VERGROESSERT ODER VERKLEINERT WIRD CRViewer.Left = 0 CRViewer.Height = ScaleHeight CRViewer.Width = ScaleWidth End Sub
Fazit
Das war’s! Wenn alles geklappt hat, haben Sie jetzt einen Bericht, der auf Ihrem VB-Formular angezeigt wird, der aus MySQL-Daten erzeugt wird. Diesen können Sie als Grundlage nehmen und komplexere Formeln erzeugen, Daten aus mehreren Sätzen von Daten (recordsets) abrufen und Berichte aus Anfragen erzeugen, die komplexer sind als die typische SELECT * -Anfrage.
Crystal Reports ist eine eingetragenes Warenzeichen von Crystal Decisions:
www.crystaldecisions.com
Anzeige eines Crystal Reports 9-Berichts mit MySQL und VB6 (kann von http://www.vbmysql.com/download/cr9vbmysql.zip) heruntergeladen werden)
Private Sub Form_Load()
‘DIESER CODE IS FUER DIE ANZEIGE EINES CRYSTAL REPORTS 9-BERICHTS GEDACHT,
‘DER DATEN AUS EINER MYSQL-DATENBANK ABRUFT UND DAFUER ADO UND VISUAL BASIC 6 VERWENDET
‘SIE BENOETIGEN VERWEISE AUF: Microsoft ActiveX Data Objects 2.7 Library
‘ Crystal Reports 9 ActiveX Designer Laufzeitbibiothek
‘SIE BENOETIGEN DIE KOMPONENTE: Crystal Reports Viewer Control 9
‘FUEGEN SIE DIE CRVIEWER91-KOMPONENTE IHREM FORMULAR HINZU UND NENNEN SIE SIE CRViewer.
Dim conn As ADODB.Connection ‘VERBINDUNG ZUM ABSETZEN VON ANFRAGEN
Dim rs As ADODB.Recordset ‘ENTHÄLT ALLE DATEN, DIE DIE ANFRAGE ZURUECKGIBT
Dim crystal As CRAXDRT.Application ‘LAEDT BERICHT AUS DATEI
Dim report As CRAXDRT.report ‘ENTHAELT BERICHT
CRViewer.DisplayBorder = False ‘SORGT DAFUER, DASS BERICHT DAS GESAMTE FORMULAR BEDECKT
CRViewer.DisplayTabs = False ‘BERICHT OHNE DRILL-DOWN, DAHER NICHT BENOETIGT
CRViewer.EnableDrillDown = False ‘BERICHT UNTERSTUETZT KEIN DRILL-DOWN
CRViewer.EnableRefreshButton = False ‘ADO-RECORDSET AENDERT SICH NICHT, DAHER NICHT BENOETIGT
Set conn = New ADODB.Connection
conn.CursorLocation = adUseClient ‘SERVER-SEITIG NICHT EMPFOHLEN
conn.ConnectionString = “DRIVER={MySQL ODBC 3.51 Driver};” _
& “SERVER=polibase.dynamergy.com;” _
& “DATABASE=test;” _
& “UID=mike;” _
& “PWD=irn2ktss!;” _
& “OPTION=” & 1 + 2 + 8 + 32 + 2048 + 163841 ‘SET ALL PARAMETERS
conn.Open ‘THESE OPTION VALUES ARE BEST FOR VB
conn.Execute “DROP TABLE IF EXISTS report”, , adExecuteNoRecords
‘ADEXECUTENORECORDS WIRD BENUTZT FUER ANFRAGEN,
‘DIE KEINE DATEN ZURUECKGEBEN
‘(CREATE, INSERT, DELETE, ETC.)
conn.Execute “CREATE TABLE report(” _
& “transactionid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,” _
& “salesman CHAR(20) NOT NULL,” _
& “region CHAR(20) NOT NULL,” _
& “amount Float)”, , adExecuteNoRecords ‘DIE TABELLE, AUS DER WIR DEN BERICHT ERZEUGEN
‘TABELLE MIT EIN PAAR DATEN FUELLEN
conn.Execute “INSERT INTO report(salesman, region, amount) VALUES(‘George’,'Calgary’,30.00) ” , , adExecuteNoRecords
conn.Execute “INSERT INTO report(salesman, region, amount) VALUES(‘George’,'Calgary’,15.00) ” , , adExecuteNoRecords
conn.Execute “INSERT INTO report(salesman, region, amount) VALUES(‘George’,'San Jose’,10.00) ” , , adExecuteNoRecords
conn.Execute “INSERT INTO report(salesman, region, amount) VALUES(‘Jerry’,'Calgary’,30.00) ” , , adExecuteNoRecords
conn.Execute “INSERT INTO report(salesman, region, amount) VALUES(‘Jerry’,'San Jose’,100.00) ” , , adExecuteNoRecords
Set rs = New ADODB.Recordset
rs.Open “SELECT * FROM report”, conn, adOpenStatic, adLockReadOnly
Set crystal = New CRAXDRT.Application ‘VERWALTET BERICHTE
Set report = crystal.OpenReport(App.Path & “\report1.rpt”) ‘BERICHT OEFFNEN
report.DiscardSavedData ‘BERICHT LEEREN, UM MIT DEN RECORDSET-DATEN ZU ARBEITEN
report.Database.SetDataSource rs ‘BERICHT MIT RECORDSET VERKNUEPFEN
CRViewer.ReportSource = report ‘BETRACHTER (VIEWER) MIT BERICHT VERKNUEPFEN
CRViewer.ViewReport ‘BERICHT ANZEIGEN
Do While CRViewer.IsBusy ‘ZOOM-METHODE FUNKTIONIERT NICHT,
DoEvents ‘REPORT IS LOADING, SO WE MUST PAUSE
Loop ‘WAEHREND BERICHT GELADEN WIRD, DAHER WARTEN:
CRViewer.Zoom 94
rs.Close ‘AB HIER IST ALLES AUFRAEUMARBEIT
Set rs = Nothing
conn.Close
Set conn = Nothing
Set crystal = Nothing
Set report = Nothing
End Sub
Private Sub Form_Resize() ‘SICHERSTELLEN, DASS BERICHT FORMULAR FUELLT
CRViewer.Top = 0 ‘WENN DAS FORMULAR VERGROESSERT ODER VERKLEINERT WIRD
CRViewer.Left = 0
CRViewer.Height = ScaleHeight
CRViewer.Width = ScaleWidth
End Sub
Erzeugen einer .ttx-Felddefinitionsdatei aus einem ADO-Recordset
Option Explicit
‘ps2mon.dll MUSS IN SYSTEMVERZEICHNIS VORHANDEN SEIN
‘ES BEFINDET SICH IM UNTERORDNER \TOOLS\DEVELOPERS
‘IHRES CR9-VERZEICHNISSES
Private Declare Function CreateFieldDefFile Lib “p2smon.dll” (lpUnk As Object, _
ByVal fieldDefFile As String, ByVal bOverWriteFile As Long) As Long
Private Sub Form_Load()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim result As Long
Set conn = New ADODB.Connection
conn.CursorLocation = adUseClient
conn.ConnectionString = “DRIVER={MySQL ODBC 3.51 Driver};” _
& “SERVER=123.456.789.101;” _
& “DATABASE=test;” _
& “UID=myuser;” _
& “PWD=mypass;” _
& “OPTION=” & 1 + 2 + 8 + 32 + 2048 + 163841
conn.Open Set rs = New ADODB.Recordset
rs.Open “SELECT * FROM report”, conn, adOpenStatic, adLockReadOnly
‘RECORDSET UND PFAD ZU ERZEUGTER DATEI UEBERGEBEN, TRUE/FALSE ZUM UEBERSCHREIBEN
result = CreateFieldDefFile(rs, App.Path & “\report.ttx”, True)
If result Then
MsgBox “Datei ” & App.Path & “\data.ttx erfolgreich angelegt”, vbInformation, “Fertig!”
Else
MsgBox “Erzeugen der ttx-Datei fehlgeschlagen!”, vbCritical
End If
End Sub
June 21st, 2007 at 10:33 am
Die Links auf der Seite
http://www.vbmysql.com/articles/deutsch/mysql-visual-basic-6-und-crystal-reports-9-verwenden/
zeigen leider ins Leere.
Schade eigentlich.
Gruß,
Andreas
January 21st, 2008 at 7:23 am
Die Beschreibung ist gut, habe sie in einem VB-Projekt mit dem MS SQL-Server 2000 nutzen können. Als Gelegenheitsprogrammierer habe ich mal eine Bitte. Das Steuerelement von Crystal 6 hatte die Möglichkeit Destination. Da war 0 copy to Window, 1 to Printer. Gibt es so etwas auch für Crystal 9.0 z.B. für den Report Viewer.
I try, say it in my bad English. Is it possible with “CRViewer 9″ use Destination: copy to windows, so it is posible with crystalReport (CR 6). I use for programming Vasial Basic 6 Sp.5
Best wishes Lutz
February 22nd, 2008 at 8:48 am
I like your website… I am a visual basic developers and want to work with mysql and vb. please convert your site into ENGLISH…
February 22nd, 2008 at 8:49 am
I like your website… I am a visual basic developers and want to work with mysql and vb. please convert your site into ENGLISH…so that developers like me can understand.
Thanks
Saleem