Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Bericht mit mindestens einem Datensatz auf letzter Seite

Begonnen von Hamsterbacke, Juli 12, 2015, 07:50:20

⏪ vorheriges - nächstes ⏩

Hamsterbacke

Hallo Harald.

Sorry zweiter Bereich war etwas unglücklich ausgedrückt. Ich meinte damit das ich das ganze auf den zweiten Bericht -> Apothekenbesuche, anwenden wollte.
Ich hab den Code eingefügt im Bericht und zur Schaltfläche (Lupe Steuerausgleich). Hab diese noch auf die entsprechenden Felder angepasst so das der richtige Bericht öffnen. Kurz gesagt ich habe mich an deine Anleitung gehalten.
Nun ist es so das die Bedingung das auf der letzten Seite mindestens ein Datensatz steht beim öffnen des Berichtes ignoriert wird. (Datenbank öffnen -> klick auf die Drucker Schaltfläche-> auf der rechten Seite "Apotheke" -> klick auf Steuerausgleich). Ich glaube es hängt mit den Punkten 3 und 4 zusammen das ich da etwas verkehrt gemacht oder vergessen habe.

Gruß Markus

bahasu

Hallo Markus,

geänderte Datenbank siehe Anhang.


1.
Generel gilt:
Verwende an jedem VBA-Anfang:
Option Compare Database
Option Explicit


2.
Den Bericht "tblApothekeBesuch" habe ich umbenannt in "rptApothekeBesuch".


3.
Im Formular "frmStart" habe ich beim Button "Fahrten zur Apotheke" dessen Namen von "Befehl2" umgeändert in "Fahrten_zur_Apotheke".
Für mich als Außenstehenden ist ein Programm noch schwerer verständlich, wenn keine verständlichen Namen verwendet werden. Das erfordert zeitaufwändiges Suchen.


Dort habe ich eingebaut:
Private Sub Fahrten_zur_Apotheke_Click()
    DoCmd.Echo False
   
    letzter_Datensatz = 0
    DoCmd.OpenReport "rptApothekeBesuch", acPreview, , , , letzter_Datensatz
           
    DoEvents
    Call mySendKeys("{END}", True)
    DoEvents

    DoCmd.Close acReport, "rptApothekeBesuch"
    DoEvents
    DoCmd.Echo True
   
    DoCmd.OpenReport "rptApothekeBesuch", acPreview, , , , letzter_Datensatz
End Sub


4.
Im Bericht "rptApothekeBesuch" habe ich die Gruppierung "ApoTerminID" inkl. Gruppenkopf hinzugefügt.

Diese hat das Ereignis "Beim Formatieren".
Dort habe ich eingetragen:

Private Sub Gruppenkopf0_Format(Cancel As Integer, FormatCount As Integer)
    If Me.OpenArgs = 0 Then
        letzter_Datensatz = Me.ApoTerminID
   
    Else
        Me.Detailbereich.ForceNewPage = 0    ' kein Seitenvorschub
   
        If letzter_Datensatz > 0 Then
            If Me.ApoTerminID = letzter_Datensatz Then
                If Me.Page = Me.Pages - 1 Then
                    Me.Detailbereich.ForceNewPage = 1    ' vor Bereich
                End If
            End If
        End If
    End If
End Sub

Zur Zeit werden zweimal Parameter-Eingaben angefordert. Das habe ich nicht abstellen können, da mir nicht klar ist, wann und womit Du Deine Datenauswahl vornimmst (siehe auch 5).


5. Mit Deiner "querry"-Zuweisung (siehe Befehl_35_Click) bin ich nicht klar gekommen.
Vor dem ersten "DoCmd.OpenReport" wird in "querry" etwas anderes eingetragen als vor dem zweiten "DoCmd.OpenReport"
Achtung: Dort wird noch die alte Berichts-Bezeichnung "tblApothekeBesuch" verwendet.
Diese habe ich dort nicht umgeändert.


Vielleicht helfen Dir aber diese Angaben, dass Du selber Deine Datenbank Deinen Wünschen entsprechend anpassen kannst.

Harald
Servus

MaggieMay

Hi,

was das betrifft:
Zitat von: bahasu am August 08, 2015, 18:16:28
Verwende an jedem VBA-Anfang:
Option Compare Database
Option Explicit
so setze einmalig den Haken bei der VBA-Option "Variablendeklaration erforderlich", dann wird dieser Eintrag bei allen neuen Modulen (jeglicher Art) automatisch hinzugefügt. Bei bereits vorhandenen Modulen muss das allerdings manuell nachgetragen werden.
Freundliche Grüße
MaggieMay

Hamsterbacke

Guten Morgen Harald

In deiner neuen Beschreibung Punkt 4 war's was ich vergessen habe. Deshalb hat es nicht funktionier. Jetzt funktioniert es auch bei den restlichen Berichten. Danke nochmal für die Hilfe.
Das die Datenbank so unsauber aufgebaut ist liegt daran das ich diese als blutiger Anfänger angefangen haben. Da wusste ich nicht viel mehr als das es Access gibt.http://www.access-o-mania.de/forum/Smileys/default/smiley.gif
Jedenfalls hab ich mich mir die halbe Nacht um die Ohren geschlagen und die Datenbank nochmal sauber (mit Schaltflächenbeschriftung usw.) neu aufzubauen.
Somit würde ich Sagen ist das Thema abgeschlossen.

Hamsterbacke

Hallo Harald

jetzt bräuchte ich doch nochmal deine Hilfe.
Wenn ich den Bericht mir Filterkriterien öffne z. b. eine Person X auswähle und hier keine Daten hinterlegt sind Bricht Access mit dem Laufzeitfehler 2427 Sie haben einen Ausdruck ohne Wert eingegeben. Drücke ich dann auf Debuggen zeigt er mir das er bei dem im Foto angehängten Befehl hängen bleibt.

Ich habe selber schon etwas gesucht und ausprobiert:
im Bericht beim Öffnen ohne Datensatz den folgenden VBA Code Ausprobiert.
MsgBox "Der Bericht enthält keine Daten.", _
   vbInformation + vbOKOnly, "Keine Daten"

Cancel = True

Dann hab ich auch noch folgenden Code gefunden
If Dcount("*", "Datenherkunft_des_Berichtes") > 0 Then
   DoCmd.OpenReport "Berichtsname"
Else
   MsgBox "Der Bericht enthält keine Daten.", _
     vbInformation + vbOKOnly, "Keine Daten"
End If

Beide funktionieren super solang die Tabelle mit Datensatzherkunft komplett leer ist. Sobald aber auch nur ein Datensatz drinsteht und ich etwas auswähle was nicht "vorhanden" ist wie z. B. Person dann kommt der Fehler. Zusätzlich hängt sich dann auch das ganze Accessprogramm auf.

Kannst du mir hier nochmal helfen.

bahasu

Hi Markus,

vielleicht hilft:

letzter_Datensatz = nz(Me.ArztterminID, 0)


Dann wären auch Plausibilitätsanfragen möglich z.B. bei:
Private Sub Fahrten_zur_Apotheke_Click()
    DoCmd.Echo False
   
    letzter_Datensatz = 0
    DoCmd.OpenReport "rptApothekeBesuch", acPreview, , , , letzter_Datensatz

    If letzter_Datensatz > 0 then
       DoEvents
       Call mySendKeys("{END}", True)
       DoEvents

       DoCmd.Close acReport, "rptApothekeBesuch"
       DoEvents
       DoCmd.Echo True
   
       DoCmd.OpenReport "rptApothekeBesuch", acPreview, , , , letzter_Datensatz

  else
    msgbox "keine Daten vorhanden"
  end if
End Sub

Das ganze ist ungetestet.
Ansonsten muss ich mir das noch mal genauer anschauen, sobald ich Zeit habe.

Harald
Servus

Hamsterbacke

Hallo Harald

Danke für die schnelle Antwort.
Ich hab das jetzt so gut es geht bei mir zuhause am Laptop eingefügt. Access bringt zwar immer noch einen Fehler aber es hängt sich zumindest nicht mehr auf. Ich werde mir das Morgen in der Arbeit noch einmal genauer Anschauen. Dort hab ich wieder 3 Monitore zur Verfügung was wesentlich einfacher ist als mit einen 14" Laptop :-).  Vielleicht hab ich auch nur einen Tip oder Copy Fehler.
Ich gebe auf jeden Fall bescheid sobald ich es mir Morgen in ruhe angeschaut habe.

Danke Markus

bahasu

Hallo Markus,
Zitat von: Hamsterbacke am August 12, 2015, 19:59:54
... Access bringt zwar immer noch einen Fehler ...

welchen Fehler an welcher Stelle?

Harald
Servus

Hamsterbacke

Guten Morgen

Also wie schon geschrieben bei mir zuhause mit AC2013 hängt er sich zumindest nicht mehr auf.
Bringt aber immer noch eine Fehlermeldung.
Ich habe das ganze hier in der Arbeit jetzt noch einmal angeschaut. beim kopieren des Codes und einfügen hab ich keinen Fehler gemacht. Hier bringt er auch immer noch einen Fehler und AC2010 hängt sich auf.

Den Fehler was er bringt scheint der Gleiche zu sein:
Laufzeitfehler '-2147352567 (80020009)':
Sie haben einen Ausdruck ohne Wert eingegeben.

Gruß Markus

DF6GL

Hallo,

ZitatWenn ich den Bericht mir Filterkriterien öffne z. b. eine Person X auswähle und hier keine Daten hinterlegt sind Bricht Access mit dem Laufzeitfehler 2427 Sie haben einen Ausdruck ohne Wert eingegeben.

So etwas passiert, wenn auf ein (gebundenes) Steuerelement referenziert wird, das bei "keinen Daten"  gar nicht existiert. D. h. die Steuerelemente werden erst dann erzeugt , wenn damit auch Daten angezeigt werden können.

Hamsterbacke

Hallo DF6GL

Ja das ist mir soweit klar. Wenn keine Daten zum öffnen des Berichtes vorliegen, z. B. bei Person X noch keine Daten hinterlegt sind, kann der Bericht natürlich nicht geöffnet werden. Das hängt mit dem Code zusammen den ich im Beitrag vom August 12, 2015, 10:35:35 schon einmal als Bild angehängt habe.
Ich hab jetzt noch eine ältere Datenbankversion geöffnet und dort geschaut was passiert wenn keine Daten vorhanden sind. Hier bricht er mir zwar auch mit dem Fehler 2427 ab (logisch wenn keine Daten vorhanden sind) aber Access stürzt nicht ab wie eben bei der neueren Version wo die Funktion schon eingebaut ist Bericht mit mindestens einem Datensatz auf letzter Seite. (keine Reaktion mehr, eingefroren). Bei dieser Datenbankversion kann ich dann bei Berichtereignis den Code

MsgBox "Der Bericht enthält keine Daten.", _
   vbInformation + vbOKOnly, "Keine Daten"

einfügen und Access bringt mir dann ein Textfeld "keine Datenvorhanden" und nicht das unschöne Debugg Fenster.

Gruß Markus

DF6GL

Hallo,

naja, man kann halt den Teufel nicht mit dem Beelzebub austreiben..

Fehlersituation ist Fehlersituation, und die kann durchaus von den unterschiedlichen Access-Version unterschiedlich "behandelt" werden.

Der Bericht darf halt nicht geöffnet werden, wenn keine Daten vorliegen...  Dafür gibt es das Ereignis "Bei keinen Daten" oder eine Prüfung der Datensatzzanzahl vor dem Öffnen des Berichtes...

MaggieMay

Hi,
ZitatDer Bericht darf halt nicht geöffnet werden, wenn keine Daten vorliegen...

Sorry, aber genau dafür gibt es doch das Berichtsereignis "Bei ohne Daten".
Dann gibt man eine Meldung aus, ala "Bericht ohne Daten" und beendet die Aktion mit

Cancel = True

Unter Umständen muss noch ein Folgefehler im aufrufenden Formular abgefangen bzw. behandelt werden.

So sieht "Fehlerbehandlung" bei mir aus: nicht verhindern, sondern reagieren und bei Bedarf kommentieren.
Freundliche Grüße
MaggieMay

Hamsterbacke

Hallo MaggieMay

Danke für deine Antwort. Leider hab ich das mit der Option ala "Bericht ohne Daten" und beendet die Aktion mit Cancel = True und weiteren VBA Codes Probiert. Ohne Erfolg.

Ich hab jetzt nach längerem Probieren eine Lösung gefunden. Ich hab den Code der für das einfrieren von Access verantwortlich war, wenn keine Daten zum öffnen vorhanden sind, mit

On Error GoTo Err_rptApothekeBesuchPrivat

am Anfang und

Exit_rptApothekeBesuchPrivat:
    Exit Sub
 
Err_rptApothekeBesuch:
    Resume Exit_rptApothekeBesuchPrivat

am Ende ergänzt. Und schon funktioniert alles Wunderbar.

Danke an alle für eure Hilfe.

Gruß Markus