Benutzer mit den meisten Antworten
Datenbank-Tabelle (SQLServer) an Word-Serienbrief (Mailmerge) weitergeben

Frage
-
Moin,
ich stehe zur Zeit vor einem Problem, dass irgendwie nicht so einfach zu lösen scheint.
In meinem Programm möchte ich eine bestimmte Tabelle aus der Datenbank (SQLServer 2012) an Word Serienbrief-Dokumente weitergeben.
Über VB.net erzeuge und starte ich ein Word-Dokument und gebe eine Datenbank-Tabelle mit.
Im geöffneten Dokument soll also die Tabelle als Empfängerliste (Serienbrief-Funktion) hinterlegt sein.
Wie weiter unten zu sehen ist benutze ich dafür ein Word-Objekt (Office.Interop) und die MailMerge Funktion.
Probleme
- Ich weiß nicht wie ich die Datenbank meines SQLServers über Mailmerge ansprechen kann. In Beispielen wird als Datenbank immer nur ein fester Pfad wie "C:\Datenbank.mdb" angegeben.
- Allgemein finde ich die Dokumentation nur eingeschränkt hilfreich. Ich weiß auch nicht ob ich zB. MailMerge.openDataSource oder MailMerge.createDataSource benutzen sollte.
Public Sub test() oApp = CreateObject("Word.Application") Dim oMainDoc As New Word.Document Dim sDBPath As String oMainDoc = oApp.Documents.Add With oMainDoc.MailMerge .MainDocumentType = Word.WdMailMergeMainDocType.wdFormLetters 'wie auf SQLServer zugreifen? kein fester Pfad sDBPath = "C:\Datenbank.mdf" '.CreateDataSource(Name:=sDBPath, _ ' Connection:="Table Mitarbeiter", _ ' SQLStatement:="SELECT * FROM Mitarbeiter") .OpenDataSource(Name:=sDBPath, _ SQLStatement:="SELECT * FROM Mitarbeiter") With oMainDoc .MailMerge.Destination = Word.WdMailMergeDestination.wdSendToNewDocument .MailMerge.Execute(Pause:=False) End With End With oMainDoc.Close(False) oApp.Visible = (True) MsgBox("Mail Merge Complete: " & oApp.ActiveDocument.Name) End Sub
Das ist nur einer grober Schnipsel, um zu sehen was ich benutze.
Ich bin momentan viel am ausprobieren und teste verschiedene Varianten, nur kam noch nichts zählbares bei raus.
Über einen Rat oder eine Hilfestellung würde ich mich sehr freuen.
Viele Grüße
Julian
Antworten
-
Hallo Julian,
du kannst natürlich gerne meinen Ansatz verfolgen und wenn du fragen hast zum Ersetzen der Textmarken in Word melde dich.
Aber eine Frage zu der ODBC Connection... hast du den ODBC Driver 11 for SQl Server installiert und konntest du mit dem Verbindungsassistenten die Connection erfolgreich testen ?
Gruß
Jens Gerber
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 21. Oktober 2014 11:25
Alle Antworten
-
Hallo Julian,
du solltest dich als allererstes damit auseinander setzen wie du mit VB.NET eine Verbindung zu einem SQL Server aufbauen kannst. Es gibt unzählige Links dazu die du mit google findest. Wenn das nicht funktioniert poste dein konkretes Problem. Das Beispiel bezieht sich wohl eher auf eine Access Datenbank.
Zitat:
- Ich weiß nicht wie ich die Datenbank meines SQLServers über Mailmerge ansprechen kann. In Beispielen wird als Datenbank immer nur ein fester Pfad wie "C:\Datenbank.mdb" angegeben.
Möglicherweise geht das mit MailMerge und SQL Server ebenso... aber das geht anscheinend über ODBC, das kann ich leider jetzt nicht sagen.
Siehe dazu hier: http://support2.microsoft.com/kb/285332/de
Es gibt aber auch andere Wege. Grundsätzlich ist das alles machbar was du möchtest. Voraussetzung dafür (mein Vorschlag, es gibt sicher mehrere):
Mein Vorschlag via VB.NET
Du weißt wie du eine Connection zu SQL Server aufbaust und die Daten abrufen kannst (in eine DataTable bspw.). Diese Table oder Tables in einem DataSet durchläufst du in einer Schleife. Du öffnest via InterOp ein Word Dokument in dem du mit Hilfe von Platzhaltern wie bspw. <Mitarbeiter> den Text im Worddokument ersetzen kannst, druckst es aus via deine word_app.PrintOut() und schliesst das Doc... und ab geht es zum nächsten Datensatz. Ich denke das ist durchaus praktikabel und das habe ich auch so schon einmal machen müssen.
Das ist jetzt alles sehr grob ausgedrückt und nur ein Ansatz. Bei genaueren Informationen kann man dann auch gezielter antworten.
Gruß
Jens Gerber
-
Hallo,
zunächst vielen Dank für die schnelle Antwort.
Wie man in VB.net eine Verbindung zum SQL Server aufbaut weiß ich, das ist kein Problem.
Nur kann ich die Verbindung scheinbar für die MailMerge Funktion nicht benutzen, da man dort eine eigene aufbaut.
Die ODBC Verbindung aus deinem Link hatte ich auch schon gesehn, aber gerade erst den Parameter Connection:="DSN..." verstanden.
Über die Windows Verwaltung hab ich dann einen System DSN hinzugefügt (also SQL Server + Datenbank) und den Code in VB geändert. Nur erhalte ich leider immer den Fehler "Word konnte die Datenquelle nicht öffnen", ErrorCode -2146822366.
With oMainDoc.MailMerge .MainDocumentType = Word.WdMailMergeMainDocType.wdFormLetters Try .OpenDataSource(Name:="", _ Connection:="DSN=DSNname;DATABASE=Datenbank;uid=sa;pwd=.pwsa;", _ SQLStatement:="SELECT * FROM Mitarbeiter", _ SubType:=Microsoft.Office.Interop.Word.WdMergeSubType.wdMergeSubTypeWord2000) Catch cEX As COMException MsgBox(cEX.ErrorCode) End Try End With
Ich will am Ende eine Wordvorlage haben, in der die Datenbanktabelle schon hinterlegt ist (vielleicht auch nur die Tabellenkopfzeile). Dann kann ich die einzelnen Felder wie "Vorname", "Nachname" usw. im Dokument positionieren.
Im Programm selbst wähle ich dann irgendeinen Datensatz aus und öffne die Wordvorlage, in der die Felder dann mit dem Datensatz gefüllt werden.
Ich werde nun mal deinen Ansatz verfolgen.
Viele Grüße
Julian
-
Hallo Julian,
du kannst natürlich gerne meinen Ansatz verfolgen und wenn du fragen hast zum Ersetzen der Textmarken in Word melde dich.
Aber eine Frage zu der ODBC Connection... hast du den ODBC Driver 11 for SQl Server installiert und konntest du mit dem Verbindungsassistenten die Connection erfolgreich testen ?
Gruß
Jens Gerber
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 21. Oktober 2014 11:25
-
Hallo Jens,
ja der ODBC Driver 11 ist installiert.
Beim Erstellen der Datenquelle im System-DSN Reiter konnte ich zwischen folgenden wählen:
- SQL Server
- SQL Server Native Client 10.0
- SQL Server Native Client 11.0
Habe es dann mit dem 11.0 Client eingerichtet und der Assistent hat die Verbindung erfolgreich getestet.
Bei Fragen melde ich mich.
Vielen Dank
Julian