Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: lenssen am Februar 14, 2017, 11:21:37

Titel: Fehler bei acViewNomal
Beitrag von: lenssen am Februar 14, 2017, 11:21:37
Hallo, komme irgendwie nicht weiter.
Ich möchte aus einem Formular einen Bericht drucken.
Solange ich folgenden Befehl nutze wird der Bericht korrekt geöffnet mit dem entsprechenden Datensatz. Allerdings muss ich dann das drucken gesondet über rechte Maustaste anstossen

DoCmd.OpenReport "rpt_besucherschein",acViewPreview, , "besucherscheinnr = " & Me!

Daher habe ich acViewPreview ersetzt durch acViewNormal. Jetzt druckt er zwar direkt, allerdings steht überall #Typ! in den Felder anstatt des gewünschten Datensatzes

besucherscheinnrDoCmd.OpenReport "rpt_besucherschein", acViewNormal, , "besucherscheinnr = " & Me!besucherscheinnr

Was mache ich falsch. Danke im Voraus
Titel: Re: Fehler bei acViewNomal
Beitrag von: MzKlMu am Februar 14, 2017, 12:24:41
Hallo,
wie ist denn der Datetyp der besucherscheinnr ?

PS:
Prüfe bitte Deine Beiträge vor dem Senden. Und verwende für Codedarstellungen die Codetags des Forums.
Titel: Re: Fehler bei acViewNomal
Beitrag von: lenssen am Februar 14, 2017, 14:32:09
Hallo, sorry. Hab mich grade erst registriert und kenne mich noch nicht so gut aus.
Der Dateityp ist integer
DoCmd.OpenReport "rpt_besucherschein",acViewPreview, , "besucherscheinnr = " & Me!

Ist es so richtig?
Titel: Re: Fehler bei acViewNomal
Beitrag von: DF6GL am Februar 14, 2017, 15:45:16
Hallo,

man kann immer nur noch vermuten:

So muss der Aufruf lauten (und womit wird der Bericht aufgerufen?  Nachfolgend ist eine Schaltfläche mit Namen "btnDrucken" angenommen.):

Sub btnDrucken_Click()
DoCmd.OpenReport "rpt_besucherschein", acViewNormal, , "besucherscheinnr = " & [color=red]Me!besucherscheinnr
[/color]
End Sub



Sofern im aktuellen Formular sich ein Textfeld mit Namen "besucherscheinnr" befindet, das eben eine Besucherscheinnr anzeigt.

Datentyp Integer ist eher mit Vorsicht zu genießen, weil nur Zahlen zwischen -32.768 bis +32.767  zulässig sind.
Titel: Re: Fehler bei acViewNomal
Beitrag von: lenssen am Februar 14, 2017, 16:15:10
Hi, hier mal der vollständige Code. besucherscheinnr ist ein longinteger (mein Fehler) bei der ersten Angabe.
Die Prüfungen ob eine Nr bereits im Jahr vergeben ist usw. funktioniert einwandfrei.
Das einzige Problem ist wirklich, je nachdem ob ich acViewPreview oder acViewNormal eingebe. Bei dem einen bekomme ich den korrekt ausgefüllten Besucherschein, bei dem anderen eben nur #Typ!. Sind diese beiden Befehle denn so unterschiedlich?


Private Sub Besucherschein_drucken_Click()
Dim strPrüfNr As Long
Dim AktuellesJahr As Long
     
'Aus der qry_maxnr wird die bisher höchste vergebene Besucherscheinnr (aus qry_besucherscheinvorbereiten) ausgelesen und dem Feld strPrüfNr zugewiesen
'Dem Feld AktuellesJahr wird das aktuelle Jahr zugewiesen

   strPrüfNr = DMax("MaxNr", "qry_maxnr")
   AktuellesJahr = Year(Now)
 
'Prüfung, ob ein neues Jahr betroffen ist
'Wenn ja, dann wird die AkkrNr auf 0 zurückgesetzt und eine neue AkkrNr (Jahr0001) wird vergeben
   If ((AktuellesJahr * 10000) - strPrüfNr) > 1000 Then
      besucherscheinnr = 0
      besucherscheinnr = besucherscheinnr + (AktuellesJahr * 10000) + 1
'Wenn nicht, wird geprüft, ob bereits ein Wert vorhanden ist.
'Wenn noch kein Wert vorhanden ist wird die aktuelle AkkrNr (höchster vorhandener Wert) um 1 erhöht
   Else
      If IsNull(besucherscheinnr) Then
         besucherscheinnr = strPrüfNr + 1
'Ist bereits eine Nr vergeben worden, wird eine Fehlermeldung ausgegeben
      Else
         MsgBox "Eine bereits vergebene Besucherscheinnummer kann nicht verändert oder gelöscht werden"
      End If
   End If
   DoCmd.OpenReport "rpt_besucherschein", acViewPreview, , "besucherscheinnr = " & Me!besucherscheinnr
   End Sub
Titel: Re: Fehler bei acViewNomal
Beitrag von: MzKlMu am Februar 14, 2017, 16:58:31
Hallo,
möglicherweise muss der Datensatz erst gespeichert werden. Füge mal vor DoCmd.... noch folgende Zeile ein:
DoCmd.RunCommand acCmdSaveRecord
Ist aber nur raten.
Titel: Re: Fehler bei acViewNomal
Beitrag von: Beaker s.a. am Februar 14, 2017, 17:41:17
Hallo lenssen,
Versuche mal in diesem Teil das Steuerelement vollständig zu referenzieren
   If ((AktuellesJahr * 10000) - strPrüfNr) > 1000 Then
'     besucherscheinnr = 0   <-- unnötig, warum nicht gleich
      Me!besucherscheinnr = 0 + (AktuellesJahr * 10000) + 1    ' <---
   Else
      If IsNull(Me!besucherscheinnr) Then    ' <---
         Me!besucherscheinnr = strPrüfNr + 1    ' <---

Klaus' Vorschlag würde ich an den Anfang der Prozedur setzen, allerdings
so
If Me.Dirty Then Me.Dirty = False

gruss ekkehard
Titel: Re: Fehler bei acViewNomal
Beitrag von: MzKlMu am Februar 14, 2017, 17:52:55
Hallo,
ZitatKlaus' Vorschlag würde ich an den Anfang der Prozedur
wieso an den Anfang ?
Die Prozedur erzeugt doch eine neue Nummer und da kann ja erst gespeichert werden, wenn dies Nummer erstellt ist. Die sicherste Stell ist daher unmittelbar vor dem Aufruf von DoCmd ...
Ob jetzt mit meinem Vorschlag oder mit dem Dirty halte ich für egal. Oder wießt Du da mehr (durchaus ernstgemeinte Rückfrage) ?
Titel: Re: Fehler bei acViewNomal
Beitrag von: Joss am Februar 14, 2017, 18:59:52
Hallo lenssen,

ZitatBei dem einen bekomme ich den korrekt ausgefüllten Besucherschein, bei dem anderen eben nur #Typ!.

nur so ein "Schuss ins Blaue":
Sind irgendwo im Bericht vielleicht berechnete Felder mit "im Spiel"?

Gruß
Josef
Titel: Re: Fehler bei acViewNomal
Beitrag von: Beaker s.a. am Februar 14, 2017, 19:10:38
Hallo Klaus,
Klar  >:(
ZitatOb jetzt mit meinem Vorschlag oder mit dem Dirty halte ich für egal. Oder wießt Du da mehr (durchaus ernstgemeinte Rückfrage) ?
Ich denke nicht. Durch das Erzeugen der neuen Nr. ist ja klar, dass
Form.Dirty True ist; brauch ich gar nicht prüfen. Also speichern wie von
dir vorgeschlagen und gut ist.  :)

@lenssen
Sorry für Verwirrung.

gruss ekkehard
Titel: Re: Fehler bei acViewNomal
Beitrag von: lenssen am Februar 17, 2017, 19:29:38
Hallo, Danke erst einmal für die antworten. Leider musste ich kurzfristig verreisen und kann so erst am Montag testen. Trotzdem schon mal vielen Dank. Ich melde mich wieder.
Titel: Re: Fehler bei acViewNomal
Beitrag von: lenssen am Februar 20, 2017, 14:36:51
Hallo Zusammen und nochmals vielen Dank
DoCmd.RunCommand acCmdSaveRecord
vor dem Druck hat meine Probleme gelöst.
Ich verstehe zwar nicht, wieso der eine Befehl eine Speicherung vorab durchführt und der andere nicht, aber das Ergebnis ist ja entscheidend. Und das lautet: Es geht jetzt!  :D
Bestimmt bis bald wieder.
Ach so, wie kann ich dieses Thema als gelöst markieren, oder ist das nicht erforderlich?
Titel: Re: Fehler bei acViewNomal
Beitrag von: MzKlMu am Februar 20, 2017, 14:43:20
Hallo,
bei einen neuen Datensatz steht dieser erst in der Tabelle wenn entweder der Datensatz verlassen wird oder explizit gespeichert wird. Das Speichern passiert mit acCmdSaveRecord. Erst dann kann der Datensatz auch gedruckt werden. Wenn ein bestehender DS aufgerufen wird ist der ja schon da und nur das Feld muss aktualisiert werden. Das geschieht automatisch wenn man auf einen Button klickt.