Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: JOG am Dezember 20, 2012, 18:34:47

Titel: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: JOG am Dezember 20, 2012, 18:34:47
Hallo Access-Profis

Habe ein ganz eigenartiges Phänomen, welches ab und zu auftritt. In einem Formular gebe ich verschiedene Datensätze ein (Artikel, Produktionsdatum, Chargen-Nr.) zu denen ich in einem nachfolgenden Bericht Etiketten erstellen lasse. Nun kommt es ab und zu vor, dass wenn ich die Etiketten der ausgewählten Datensätze via Seitenansicht drucken will, der Druckmanager anstatt die eine Seite mit Etiketten dann sämtliche Datensätze der zugrunde liegenden Tabelle tabellarisch ausdruckt  ??? Dieser Fehler tritt lediglich sporadisch auf und ist auch beim Ausdruck von einem Bericht in einem anderen Zusammenhang ab und zu festzustellen (wenn's dumm kommt, werden dann da anstatt eine Seite halt bis zu 20 und mehr ausgedruckt >:(.

WEiss jemand, an was das liegen könnte? Da es bei mehreren Berichten vorkommt, frag ich mich, ob's mit der Systemumgebung vom PC oder Drucker zu tun haben könnte.

Danke für Eure Inputs.

Gruss JOG
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: DF6GL am Dezember 20, 2012, 18:44:15
Hallo,

hört sich mysteriös an...


1)  Wie lautet die Datenherkunft des Berichtes (bei einer Abfrage deren SQl-String) ?
2) Wie wird der Bericht überhaupt aufgerufen?
3) "... die Etiketten der ausgewählten Datensätze ... " WIE werden diese Datensätze ausgewählt?


Falls die DB "zerschossen" sein sollte, hilft evtl. , eine neue leere DB anzulegen und darin alle Objekte aus der alten zu importieren.
Auch könnte der Access-Startparameter "/decompile"  hilfreich sein.


Wenn nichts von all dem hilft, lad die DB hier hoch (datenreduziert und gezippt) damit man sich die Sachlage genau ansehen kann.


Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: database am Dezember 20, 2012, 19:20:28
Hallo,

gibt es einen Unterschied im Verhalten, wenn du den Bericht zuerst in der Berichtsansicht öffnest und dann in die Seitenvorschau wechselst und wenn du den Bericht per Rechtsklick aus dem Objektfenster in die Seitenansicht beförderst und wenn der Bericht 'ganz normal' aufgerufen wird (z.B. aus einem Formular?
Enthält der Bericht irgendwelche VBA-Codes?

Wie Franz schon angemerkt hat ... wie wird der Bericht überhaupt aufgerufen?
    Ist auch mitentscheidend zu meiner ersten Frage zu sehen.
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: JOG am Dezember 20, 2012, 22:42:26
Hallo und guten Abend

Ja die Berichte haben teilweise verschiedene Codes und Funktionen hinterlegt. Das verwunderliche an der Sache ist, dass beim schliessen und erneuten öffnen der DB der Fehler bis zum nächsten Mal verschwunden ist (ist auch der Fall, wenn ich kurz in die Entwurfsansicht des frm wechsle...
Das Verhalten des Fehlers in den verschiedenen Berichtsansichten muss ich erst noch testen, da kann ich noch nichts dazu sagen.

Zu Frage 1: Datenherkunft aus Abfrage
2: Der Bericht wird via Schaltfläche und docmd.-Befehl aufgerufen => "Ansicht Seitenansicht"
3: Daten werden einerseits mittels eines Kontrollfeldes ausgewählt und alle Daten mit Kontrollfeld "JA" ausgedruckt. Andererseits drucke ich im anderen Fall ein Report aus anhand eines bearbeiteten, aktuellen Datensatzes im Formular.

Helfen diese Angaben weiter?

Gruss JOG
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: DF6GL am Dezember 20, 2012, 23:06:31
Hallo


nur bedingt....


Wie lautet der SQL-String der Abfrage?

Benutzt Du ein Makro oder VBA-Code für den Berichtsaufruf? Wie lauten ALLE angebenen Parameterwerte für die Docmd-Methode?

Zu 3).  ok.





Es bleibt:  Vermutlich ist die DB zerschossen. Das kann auch nur heißen, dass lediglich eine Tabelle "unsaubere" Daten enthält, bzw. strukturell beschädigt ist.


Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: JOG am Dezember 21, 2012, 08:05:06
Guten Morgen

Dies ist der SQL-String der zugehörigen Abfrage:

SELECT Bulkchargen.DatumHerstellung, Bulkchargen.ArtikelNr, Artikelliste.Artikelbezeichnung, Bulkchargen.[Chargen-Nr], Bulkchargen.EtikettenDruck
FROM Bulkchargen INNER JOIN Artikelliste ON Bulkchargen.ArtikelNr = Artikelliste.ArtikelNr
WHERE (((Bulkchargen.EtikettenDruck)=Yes));


Der VBA-Code für den Berichtsaufruf lautet:
DoCmd.OpenReport "Berichtetikettenbulk", acViewPreview, "", "", acWindowNormal

Was wäre Deiner Meinung nach das Beste, wenn die DB zerschossen sein sollte? Hast Du eine Vermutung bezüglich "unsaubere Daten" resp. "strukturell beschädigt"?

Gruss JOG
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: DF6GL am Dezember 21, 2012, 17:45:28
Hallo,


schreib mal im SQl-String:

WHERE Bulkchargen.EtikettenDruck <> 0




Die Antwort zur beschädigten DB hast Du schon erhalten.


Hier weitere Tipps:

http://www.donkarl.com/?FAQ1.27
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: JOG am Dezember 21, 2012, 21:12:52
Hallo

Leider auch nicht erfolgreich. Habe die Where-Klausel auf<>0 angepasst, jedoch ohne Erfolg. Das einzige scheinbar wirksame war bisher den Einbau des folgenden Codes vor dem Öffnen des Berichts:

DoCmd.OpenForm "Erfassen Bulkchargen", acDesign, "", "", , acWindowNormal
DoCmd.OpenForm "Erfassen Bulkchargen", acNormal, "", "", , acWindowNormal


Ist zwar Symptombekämpfung aber scheinbar hilfts...

Danke für die Hinweise und die Links.

Gruss JOG
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: DF6GL am Dezember 21, 2012, 23:04:08
Hallo,

Hast Du nun mal /decompile und/oder den Import in eine neue leere DB durchgeführt??
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: database am Dezember 22, 2012, 09:12:39
Hallo,

ZitatJa die Berichte haben teilweise verschiedene Codes und Funktionen hinterlegt...

Es kann sein, dass du Codes einsetzt, die eine datenbezogen richtige Darstellung des Berichts verhindern,
die Art der 'Symptombekämpfung' läßt für mich auch diesen Schluß zu.


DoCmd.OpenForm "Erfassen Bulkchargen", acDesign, "", "", , acWindowNormal
DoCmd.OpenForm "Erfassen Bulkchargen", acNormal, "", "", , acWindowNormal


Mit obigen Zeilen beförderst du das Formular in die Entwurfsansicht und danach wieder in die Normalansicht.
Hast du irgendwelche Codes 'Beim Anzeigen', 'Beim Laden' oder 'Beim Öffnen des Formulars im Einsatz, die sich auf
die Daten des zu öffnenden Berichts Einfluß nehmen?

WHERE (((Bulkchargen.EtikettenDruck)=Yes));
oder
WHERE (((Bulkchargen.EtikettenDruck)=True));
oder
WHERE (((Bulkchargen.EtikettenDruck)<>0));
oder auch
WHERE (((Bulkchargen.EtikettenDruck)=-1));

... wird keine Wirkung zeigen, wenn zum Zeitpunkt des Berichtsaufrufes das Tabellenfeld 'Bulkchargen.Etikettendruck' nicht oder noch nicht den gewünschten/erwarteten/aktualisierten Wert zeigt.
Setze mal einen Haltepunkt direkt vor den Berichtsaufruf und schau in die Tabelle ob die gewünschten DS mit Ja / True gekennzeichnet sind.

Eventuell kann dir dieses helfen:
http://www.donkarl.com?FAQ4.5 (http://www.donkarl.com?FAQ4.5)

Was passiert den mit diesem Tabellenfeld nachdem der Druck durchgeführt wurde?
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: JOG am Dezember 22, 2012, 21:10:04
Hallo

Das ist mir soweit klar, dass ich mit der "Symptombekämpfung" das Formular lediglich zuerst in die Entwurfs- und danach wieder in die Normalansicht stelle und erst danach den Bericht auslöse.

Muss vielleicht noch sagen, dass es immer dann auftritt wenn ich neue Datensätze ins entsprechende frm eingebe.

Der Bericht enhält im übrigen folgende Prozedur als Code:

Beim Drucken:
Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer)
   Dim AnzahlEtiketten As Long, I As Long, TypFeld As String, FarbeGrün As Long, FarbeRot As Long
   AnzahlEtiketten = 5
   FarbeRot = RGB(242, 30, 30)
   FarbeGrün = RGB(0, 184, 0)
   
       If AnzahlEtiketten = 0 Then
   ' Wenn Wert 0 ist, dann gar nichts drucken
       Me.NextRecord = True
       Me.MoveLayout = False
       Me.PrintSection = False
       
     Else
     ' Druckvorgang für diesen Datensatz wiederholen,
     ' wenn AnzahlEtiketten noch nicht erreicht ist
       End If
     
       If PrintCount < AnzahlEtiketten Then
           Me.NextRecord = False
       End If
       
       For I = 1 To AnzahlEtiketten
       Me.txtZusatz__txtMusterTyp = DLookup("Z_Text", "tblZusatz", "ZID=" & PrintCount Mod (AnzahlEtiketten + 1))
       
       Me.txtZusatz__txtMusterTyp.FontBold = True
       If Me.txtZusatz__txtMusterTyp = "Prüfmuster Anfang" Then
       Me.txtZusatz__txtMusterTyp.ForeColor = FarbeGrün
       ElseIf Me.txtZusatz__txtMusterTyp = "Prüfmuster Ende" Then
       Me.txtZusatz__txtMusterTyp.ForeColor = FarbeGrün
       Else: Me.txtZusatz__txtMusterTyp.ForeColor = FarbeRot
       End If
       
       Next I
       
      End Sub


In der Seitenansicht wird der Bericht stets korrekt angezeigt. Der Fehler zeigt sich effektiv erst, wenn ich aus der Seitenansicht Drucke (via Druckermenü).

Den Tip mit dem Import der DB in eine neue leere haben ich ebenfalls ausprobiert sowie auch den Befehl in Acces "DB komprimieren und reparieren". Hat leider auch nicht das gewünschte Ergebnis erbracht...

Gruss JOG
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: bahasu am Dezember 22, 2012, 21:53:07
Hi,

du legst fest:
AnzahlEtiketten = 5  

und fragst dann ab:
If AnzahlEtiketten = 0 Then

Welchen Sinn hat das?


Ginge nicht auch als vereinfachte Form (hier allerdings ohne die farblichen Zuweisungen):

Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer)
    'wenn AnzahlEtiketten ' noch nicht erreicht ist
    If Me.PrintCount < 5 Then
        Me.NextRecord = False
    End If
   
    Me.txtZusatz = Nz(DLookup("Z_Text", "tblZusatz", "ZID = " & Me.PrintCount), "")
End Sub

Bei meinem Test wurde auch ohne for next beim ersten Etikett "Prüfmuster Anfang" und beim letzten "Prüfmuster Ende" gedruckt.

Harald
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: database am Dezember 24, 2012, 13:47:30
Hallo,

Zitat...wenn ich neue Datensätze ins entsprechende frm eingebe

Hast du schon probiert, vor dem Bereichtsaufruf den DS zu wechseln - also den neuen DS zu verlassen und danach wieder zurückzukehren?
Wenn das funktioniert dann schau mal den Link in meiner letzten Antwort an.
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: JOG am Dezember 27, 2012, 18:54:38
Hallo zusammen

Ich glaub, dass ich mit dem Hinweis den DS zu wechseln am Ziel bin. Damit konnte ich auf jeden Fall den Fehler nicht mehr provozieren. Die anderen Hinweise behalte ich auf jeden Fall im Hinterkopf.

Vielen Dank für Eure fachkundige Hilfe. :D

Gruss JOG
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: bahasu am Dezember 27, 2012, 19:37:31
Hi,

ich komme noch mal auf Fragen von Peter zurück:
"Hast du irgendwelche Codes 'Beim Anzeigen', 'Beim Laden' oder 'Beim Öffnen des Formulars im Einsatz, die sich auf
die Daten des zu öffnenden Berichts Einfluß nehmen?"

Da Du schreibst, dass der Datensatzwechsel ausreicht, um die "Macke" zu vermeiden, betrachte ich "Beim Laden" und "Beim Öffnen" als im Moment nicht relevant.

Also:
1. Gibt es eine Sub zum Ereignis "Beim Anzeigen"
2. wenn ja: was steht da?

Harald
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: database am Dezember 28, 2012, 08:40:35
Hallo,

nur kurz, nachdem die Frage bereits mit 'gelöst' gekennzeichnet wurde...

ZitatMuss vielleicht noch sagen, dass es immer dann auftritt wenn ich neue Datensätze ins entsprechende frm eingebe.

Da der Tipp mit dem DS-Wechsel offenbar geklappt hat:

Ich vermute weiter, dass ein neuer DS angelegt wird, und OHNE dass dieser verlassen wird, der Bericht aus dem gleichen Form aufgerufen wird, denn ...
Zitat von: JOG am Dezember 20, 2012, 22:42:26

Zu Frage 1: Datenherkunft aus Abfrage
2: Der Bericht wird via Schaltfläche und docmd.-Befehl aufgerufen => "Ansicht Seitenansicht"
3: Daten werden einerseits mittels eines Kontrollfeldes ausgewählt und alle Daten mit Kontrollfeld "JA" ausgedruckt. Andererseits drucke ich im anderen Fall ein Report aus anhand eines bearbeiteten, aktuellen Datensatzes im Formular.

gemäß Pkt. 3 werden Checkboxen geklickt um die zu druckenden DS zu kennzeichnen.
Wenn es sich hierbei um einen NEUEN DS handelt und dieser nicht explizit verlassen wird, ist die Kennzeichnung in der/den Tabellen zum Zeitpunkt des Berichtsaufrufes nicht bekannt
da zu diesem Zeitpunkt die ID des neuen DS in der Mastertabelle noch nicht eingetragen ist.
Die Abfrage wird sich auf diesen neuen DS beziehen müssen - kann ihn aber wegen der vorgenannten Gründe nicht finden sondern listet stattdessen die gesamte Tabelle auf.

Somit ist wäre m.E. ein guter Lösungsansatz dahingehend zu sehen, erstens eine Aktualisierung des neuen DS zu veranlassen und zweitens dafür zu sorgen, dass
die Abfrage nur Daten liefern kann, die ausschließlich mit diesem NEUEN DS in Beziehung stehen.

Für die Aktualisierung der Formulardaten habe ich bereits den Link http://www.donkarl.com?FAQ4.5 (http://www.donkarl.com?FAQ4.5) genannt.

Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: bahasu am Dezember 28, 2012, 11:34:00
Hi,

hast Du den Button zum Berichtsaufruf nicht im Hauptformular und die Dateneingabe im Unterformular sondern alles in einem Formular?

Wenn das so ist, könnte eventuell helfen, bei den Button-Codezeilen am Anfang hinzuzufügen:
DoCmd.RunCommand acCmdSaveRecord

Harald
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: JOG am Januar 04, 2013, 07:48:43
Hallo zusammen

Erstmal vielen Dank, dass Ihr nicht so rasch locker lässt - super ;).
Also es ist so, dass die Daten in einem (Hauptfrm) Formular eingegeben werden. Es werden Artikel, Lot und Datum erfasst sowie eben das Kontrollfeld, welches angibt, ob der DS auch ausgedruckt werden soll. Wenn ich das Kontrollfeld anklicke, wechselt der DS vom Status "in Bearbeitung" in den Status "markiert" dies erkenne ich anhand des DS-Markierers auf der rechten Seite. Was allerdings offensichtlich nicht heissen muss, dass der DS auch wirklich gespeichert wird. Auf jeden Fall habe ich den Code von Harald DoCmd.RunCommand acCmdSaveRecord ebenfalls getestet und auch dieser scheint zu funktionieren.
Nun sieht mein Code bei Drucken so aus ohne dass dieser den Fehler produziert:

Private Sub cmdEtikDrucken_Click()
        DoCmd.RunCommand acCmdSave
        DoCmd.OpenReport "Berichtetikettenbulk", acViewPreview, "", "", acWindowNormal
   
End Sub



Übrigens steht beim Ereignis "Beim Anzeigen" folgender Code drin (aktualisiert das Such-Textfeld mit dem aktuell gewählten DS im Frm)

Private Sub Form_Current()
    Me.cboBulkchargeSuchen = Me.txtChargenNr
End Sub


Ansonsten stehen da keine relevanten Codes bei irgendeinem Ereignis des Frm.

Nun, ich glaub wir sind da am Ziel und ich bedanke mich nochmals herzlich für die Unterstützung.

Danke und bis zum nächsten Mal.:D
Gruss JOG
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: DF6GL am Januar 04, 2013, 11:53:25
Hallo,

und noch einer...


Es sollte statt acCmdSave  acCmdSaveRecord   heißen.
Titel: Re: Access druckt alle Datensätze aus der Tabelle anstatt Bericht
Beitrag von: JOG am Januar 07, 2013, 20:41:26
Hallo

Klar, hab ich übersehen. :o

Vielen Dank.

Gruss JOG