Access-Datenbank drucken?

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von bodo85.

    Access-Datenbank drucken?

    Hallo Community und ein frohes neues Jahr!!


    Ich habe da mal eine Frage zum Drucken von einer Access-Datenbank. Ich möchte gerne auf einen Button klicken und dann soll die vorhandene im Projekt eingebundene Access-Datenbank gedruckt werden.

    Wie kann ich das machen? Gibt es einen Befehl womit ich die komplette Datei drucken kann oder muss ich das mithilfe eines DataGridView machen indem ich die Daten da einlese und dann das drucke...

    Vielen Dank schon mal für eure Hilfe!
    Hallo Bodo,

    das mit dem Drucken ist ein leidiges Thema. Egal wo man sucht, ich habe kaum hilfreiche Sachen gefunden. Zumindest nicht einfaches.
    Generell scheint es so zu sein, dass du 3 Möglichkeiten des Druckens hast.

    1. Eine Hardcopy, damit wird quasi der Bildschirm gedruckt, was einem bei einer größeren Datenbank nicht wirklich weiter hilft.
    2. Du machst das über einen Report, der allerdings nicht in der Express Version dabei ist.
    3. Du mußt das komplette Blatt von Hand designen. Du mußt also jeden Text, der irgendwo stehen soll, mit einer x und y Position definieren. Bei einer Datenbank geht das relativ einfach, da du die einzelnen Zeilen über eine Schleife definieren kannst. Schwieriger wird es, wenn die Tabelle/Datenbank zu viele Spalten hat, da diese nicht alle nebeneinander auf das Blatt passen.

    Vielleicht hilft dir das erst einmal.
    Hier mal ein Beispiel aus meinem aktuellen Projekt.
    Dies ist der Code, der seit gestern funktioniert. Der nächste Schritt ist, diesen noch zu verbessern durch z.B. mehrdimensionale Variablen und nicht x1, x2,... Dadurch kann ich dann noch ein paar For ... Next Schleifen einbauen und der Code wird kürzer.
    Zum Porbieren und umstricken sollte dieser aber eigentlich ok sein.
    Was man im Programm braucht sind PrintDocument1, PrintDialog1, PrintPreviewDialog1.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Drucken()
    2. PrintPreviewDialog1.Document = PrintDocument1
    3. 'Dem zu druckenden Dokument einen Namen zuweisen. Dieser wird dann bei dem Drucker Dialog angezeigt.
    4. PrintDocument1.DocumentName = "Mitgliederliste " & Date.Now
    5. 'Die Ränder müssen vor der Druckvorschau definiert werden, sonst ändert sich nichts !
    6. 'Die Ränder kommen kommen zu den in den Druckereinstellungen möglichen minimalsten Seitenrändern hinzu !
    7. Dim Umrechnung As Integer = 1 / 2.54 ' * Umrechnung für Angabe in mm
    8. PrintDocument1.OriginAtMargins = False
    9. PrintDocument1.DefaultPageSettings.Margins.Left = 10 * Umrechnung
    10. PrintDocument1.DefaultPageSettings.Margins.Right = 10 * Umrechnung
    11. PrintDocument1.DefaultPageSettings.Margins.Top = 10 * Umrechnung
    12. PrintDocument1.DefaultPageSettings.Margins.Bottom = 10 * Umrechnung
    13. PrintDocument1.DefaultPageSettings.Landscape = True ' Blatt auf Hochformat(false) stellen
    14. PrintPreviewDialog1.WindowState = FormWindowState.Maximized ' Druckvorschau maximiert öffnen
    15. 'DT_Drucken ist meine DataTable, in der ich die Datenbank die gedruckt werden soll einlese
    16. 'Wenn ein DataGridView gedsruckt werden soll, weil die Daten nicht aus einer Datenbank kommen
    17. 'kann dies geändert werden. Zugriff ist dann DGV.Rows(Y).Cells("Spaltenname" oder Zahl).value
    18. DT_Drucken.Clear()
    19. DA_Drucken.Fill(DT_Drucken)
    20. 'Ich lasse mir 50 Einträge pro Seite drucken. Die benötigten Seitenanzahl steht dann in Druck_Seite_max
    21. Druck_Seite_max = Math.Ceiling(DT_Drucken.Rows.Count / 50)
    22. '
    23. If PrintPreviewDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then ' Ruft die Sub PrintDocument1_PrintPage() auf und Druckt
    24. PrintPreviewDialog1.Close()
    25. End If
    26. End Sub
    27. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage ' Zuweisen, was gedruckt werden soll
    28. 'Die aktuelle Seite hochzählen
    29. Druck_Seite += 1
    30. '
    31. If Druck_Seite < Druck_Seite_max Then
    32. 'Bescheid geben, dass das zu druckende Zeug mehrere Seiten hat, sonst wird nur die 1.Seite gedruckt
    33. e.HasMorePages = True
    34. Else
    35. 'wenn die letzte Seite aufgerufen wird sagen, dass keine weitere Seite kommt
    36. e.HasMorePages = False
    37. End If
    38. 'festlegen, dass die Angaben in mm sind. Ist zum Positionieren einfacher, da man mit Lineal nachmessen kann
    39. e.Graphics.PageUnit = GraphicsUnit.Millimeter
    40. Dim Schwarz As New Pen(Color.Black, 0.2), Hellgrau As New Pen(Color.LightGray, 0.2)
    41. Dim DGVText(20) As String
    42. Dim x1 As Integer, x2 As Integer, x3 As Integer, x4 As Integer, x5 As Integer, x6 As Integer, x7 As Integer, x8 As Integer, x9 As Integer, x10 As Integer, x11 As Integer, x12 As Integer, x13 As Integer, x14 As Integer, x15 As Integer, x16 As Integer, x17 As Integer
    43. Dim Y As Integer
    44. Dim F0 As New Font("Arial", 5, FontStyle.Bold)
    45. Dim F1 As New Font("Arial", 6, FontStyle.Bold)
    46. Dim F2 As New Font("Arial", 7, FontStyle.Bold)
    47. Dim F3 As New Font("Arial", 8, FontStyle.Bold)
    48. Dim F4 As New Font("Arial", 4, FontStyle.Regular)
    49. Dim F5 As New Font("Arial", 5, FontStyle.Regular)
    50. Dim F6 As New Font("Arial", 6, FontStyle.Regular)
    51. Dim F7 As New Font("Arial", 7, FontStyle.Regular)
    52. Dim F8 As New Font("Arial", 8, FontStyle.Regular)
    53. Dim P0 As New Pen(Brushes.Black, 0.2), P1 As New Pen(Brushes.LightGray, 0.1)
    54. Dim aktY As Integer = 0, aktYHilf As Integer = 0, Faktor As Integer = 6 * inZoll
    55. Dim Abstand As Integer = 20, LAbstand As Integer = (F7.Size + 1) / 2.54
    56. Dim Zeile As Integer = (F7.Size + 2) / 2.54
    57. 'ich lege die Spaltenpositionen X in Variablen ab
    58. x1 = 0 'Name
    59. x2 = 20 'Vorname
    60. x3 = 43 'Ort
    61. x4 = 80 'Straße
    62. x5 = 110 'Telefon
    63. x6 = 128 'Geb.Datum
    64. x7 = 142 'Alter
    65. x8 = 147 'Eintritt
    66. x9 = 159 'imVerein
    67. x10 = 168 'Ehefrau
    68. x11 = 183 'Geb.Datum
    69. x12 = 195 'Hochzeit
    70. x13 = 207 'Status
    71. x14 = 237 'BLZ
    72. x15 = 248 'KontoNr
    73. x16 = 260 'Werber1
    74. x17 = 279
    75. 'Überschrift drucken
    76. e.Graphics.DrawString("Mitgliederliste vom " & Format(Date.Now, "dd.MM.yyyy") & " Mitgliederzahl : " & DT_Drucken.Rows.Count & " Seite " & Druck_Seite & " / " & Druck_Seite_max, F3, Schwarz.Brush, x1, aktY)
    77. 'aktY ist meine aktuelle Y Position, die nach jeder Zeile hochgezählt wird.
    78. aktY += 5
    79. 'die Spaltenüberschriften zeichnen,F1,F2 sind meine Fonts
    80. e.Graphics.DrawString("Name", F2, Schwarz.Brush, x1, aktY)
    81. e.Graphics.DrawString("Vorname", F2, Schwarz.Brush, x2, aktY)
    82. e.Graphics.DrawString("Ort", F1, Schwarz.Brush, x3, aktY)
    83. e.Graphics.DrawString("Straße", F1, Schwarz.Brush, x4, aktY)
    84. e.Graphics.DrawString("Telefon", F1, Schwarz.Brush, x5, aktY)
    85. e.Graphics.DrawString("Geb.Datum", F1, Schwarz.Brush, x6, aktY)
    86. e.Graphics.DrawString("Alter", F1, Schwarz.Brush, x7, aktY)
    87. e.Graphics.DrawString("Eintritt", F1, Schwarz.Brush, x8, aktY)
    88. e.Graphics.DrawString("imVerein", F1, Schwarz.Brush, x9, aktY)
    89. e.Graphics.DrawString("Ehefrau", F1, Schwarz.Brush, x10, aktY)
    90. e.Graphics.DrawString("Geb.Datum", F1, Schwarz.Brush, x11, aktY)
    91. e.Graphics.DrawString("Hochzeit", F1, Schwarz.Brush, x12, aktY)
    92. e.Graphics.DrawString("Status", F1, Schwarz.Brush, x13, aktY)
    93. e.Graphics.DrawString("BLZ", F1, Schwarz.Brush, x14, aktY)
    94. e.Graphics.DrawString("KontoNr", F1, Schwarz.Brush, x15, aktY)
    95. e.Graphics.DrawString("Werber1", F1, Schwarz.Brush, x16, aktY)
    96. e.Graphics.DrawString("Werber2", F1, Schwarz.Brush, x17, aktY)
    97. 'eine Linie unter den Spaltenüberschriften zeichnen
    98. e.Graphics.DrawLine(P0, 0, aktY + LAbstand, 297, aktY + LAbstand)
    99. aktY += 4
    100. 'die Schleife, damit immer 50 Zeilen pro Blatt angezeigt werden
    101. For Y = 0 To 49
    102. 'und eine if Anweisung, damit die Schleife auf dem letzten Blatt vor erreichen von 50 Stück abgebrochen wird
    103. If ((Druck_Seite - 1) * 50) + Y < DT_Drucken.Rows.Count Then
    104. 'hier werden Spalte für Spalte und Zeile für Zeile aus der DT in die Hilfsvariable gelesen
    105. DGVText(1) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Name").ToString
    106. DGVText(2) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Vorname").ToString
    107. DGVText(3) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Ort").ToString
    108. DGVText(4) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Straße").ToString
    109. DGVText(5) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Telefon").ToString
    110. If DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Geburtsdatum").ToString <> "" Then
    111. DGVText(6) = Format(DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Geburtsdatum"), "dd.MM.yyyy")
    112. ' DGVText(7) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Alter").ToString
    113. Else
    114. DGVText(6) = ""
    115. DGVText(7) = ""
    116. End If
    117. If DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Geburtsdatum").ToString <> "" Then
    118. DGVText(8) = Format(DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Eintritt"), "dd.MM.yyyy")
    119. ' DGVText(9) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("imVerein").ToString
    120. Else
    121. DGVText(8) = ""
    122. DGVText(9) = ""
    123. End If
    124. DGVText(10) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Ehefrau").ToString
    125. If DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("GeburtsdatumEhefrau").ToString <> "" Then
    126. DGVText(11) = Format(DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("GeburtsdatumEhefrau"), "dd.MM.yyyy")
    127. Else
    128. DGVText(11) = ""
    129. End If
    130. If DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Hochzeit").ToString <> "" Then
    131. DGVText(12) = Format(DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Hochzeit"), "dd.MM.yyyy")
    132. Else
    133. DGVText(12) = ""
    134. End If
    135. DGVText(13) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Status").ToString
    136. DGVText(14) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("BLZ").ToString
    137. DGVText(15) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("KontoNr").ToString
    138. DGVText(16) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Werber1").ToString
    139. DGVText(17) = DT_Drucken.Rows(((Druck_Seite - 1) * 50) + Y).Item("Werber2").ToString
    140. 'Zeichnen der Hilfsvariablen mit den Fonts F7,F6,F5
    141. e.Graphics.DrawString(DGVText(1), F7, Schwarz.Brush, x1, aktY + Y * Zeile)
    142. e.Graphics.DrawString(DGVText(2), F7, Schwarz.Brush, x2, aktY + Y * Zeile)
    143. e.Graphics.DrawString(DGVText(3), F6, Schwarz.Brush, x3, aktY + Y * Zeile)
    144. e.Graphics.DrawString(DGVText(4), F6, Schwarz.Brush, x4, aktY + Y * Zeile)
    145. e.Graphics.DrawString(DGVText(5), F5, Schwarz.Brush, x5, aktY + Y * Zeile)
    146. e.Graphics.DrawString(DGVText(6), F6, Schwarz.Brush, x6, aktY + Y * Zeile)
    147. e.Graphics.DrawString(DGVText(7), F5, Schwarz.Brush, x7, aktY + Y * Zeile)
    148. e.Graphics.DrawString(DGVText(8), F6, Schwarz.Brush, x8, aktY + Y * Zeile)
    149. e.Graphics.DrawString(DGVText(9), F5, Schwarz.Brush, x9, aktY + Y * Zeile)
    150. e.Graphics.DrawString(DGVText(10), F5, Schwarz.Brush, x10, aktY + Y * Zeile)
    151. e.Graphics.DrawString(DGVText(11), F5, Schwarz.Brush, x11, aktY + Y * Zeile)
    152. e.Graphics.DrawString(DGVText(12), F5, Schwarz.Brush, x12, aktY + Y * Zeile)
    153. e.Graphics.DrawString(DGVText(13), F5, Schwarz.Brush, x13, aktY + Y * Zeile)
    154. e.Graphics.DrawString(DGVText(14), F6, Schwarz.Brush, x14, aktY + Y * Zeile)
    155. e.Graphics.DrawString(DGVText(15), F6, Schwarz.Brush, x15, aktY + Y * Zeile)
    156. e.Graphics.DrawString(DGVText(16), F5, Schwarz.Brush, x16, aktY + Y * Zeile)
    157. e.Graphics.DrawString(DGVText(17), F5, Schwarz.Brush, x17, aktY + Y * Zeile)
    158. 'nach jeder Zeile eird eine waagerechte und sämtliche senkrechten Linien gezeichnet
    159. e.Graphics.DrawLine(P1, 0, aktY + (Y + 1) * Zeile - 1, 297, aktY + (Y + 1) * Zeile - 1)
    160. e.Graphics.DrawLine(P1, x2, aktY + (Y) * Zeile - 1, x2, aktY + (Y + 1) * Zeile - 1)
    161. e.Graphics.DrawLine(P1, x3, aktY + (Y) * Zeile - 1, x3, aktY + (Y + 1) * Zeile - 1)
    162. e.Graphics.DrawLine(P1, x4, aktY + (Y) * Zeile - 1, x4, aktY + (Y + 1) * Zeile - 1)
    163. e.Graphics.DrawLine(P1, x5, aktY + (Y) * Zeile - 1, x5, aktY + (Y + 1) * Zeile - 1)
    164. e.Graphics.DrawLine(P1, x6, aktY + (Y) * Zeile - 1, x6, aktY + (Y + 1) * Zeile - 1)
    165. e.Graphics.DrawLine(P1, x7, aktY + (Y) * Zeile - 1, x7, aktY + (Y + 1) * Zeile - 1)
    166. e.Graphics.DrawLine(P1, x8, aktY + (Y) * Zeile - 1, x8, aktY + (Y + 1) * Zeile - 1)
    167. e.Graphics.DrawLine(P1, x9, aktY + (Y) * Zeile - 1, x9, aktY + (Y + 1) * Zeile - 1)
    168. e.Graphics.DrawLine(P1, x10, aktY + (Y) * Zeile - 1, x10, aktY + (Y + 1) * Zeile - 1)
    169. e.Graphics.DrawLine(P1, x11, aktY + (Y) * Zeile - 1, x11, aktY + (Y + 1) * Zeile - 1)
    170. e.Graphics.DrawLine(P1, x12, aktY + (Y) * Zeile - 1, x12, aktY + (Y + 1) * Zeile - 1)
    171. e.Graphics.DrawLine(P1, x13, aktY + (Y) * Zeile - 1, x13, aktY + (Y + 1) * Zeile - 1)
    172. e.Graphics.DrawLine(P1, x14, aktY + (Y) * Zeile - 1, x14, aktY + (Y + 1) * Zeile - 1)
    173. e.Graphics.DrawLine(P1, x15, aktY + (Y) * Zeile - 1, x15, aktY + (Y + 1) * Zeile - 1)
    174. e.Graphics.DrawLine(P1, x16, aktY + (Y) * Zeile - 1, x16, aktY + (Y + 1) * Zeile - 1)
    175. e.Graphics.DrawLine(P1, x17, aktY + (Y) * Zeile - 1, x17, aktY + (Y + 1) * Zeile - 1)
    176. End If
    177. Next Y
    178. End Sub