Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: Marne89 am Februar 07, 2017, 11:25:00

Titel: Formular drucken, #Typ!, #Fehler
Beitrag von: Marne89 am Februar 07, 2017, 11:25:00
Hallo allerseits,

ich habe aktuell ein Problem in Access 2016. Zu allererst, ich arbeite jetzt seit ca. 4 Wochen mit dem Programm, kenne mich dementsprechend nicht allzu gut damit aus.

Ich erstelle eine Preisdatenbank für Bauwerke. Die nötigen Tabellen dafür habe ich bereits eingearbeitet und mir ein Formular aufgebaut. In diesem Formular soll der Nutzer Werte eingeben können wie z.B. Bauwerkslänge und im Feld daneben soll der Einheitspreis, der sich aus den eingespeisten Tabellen berechnet, mit den vom Nutzer eingegebenen Werten multiplizieren. Den Einheitspreis habe ich über Unterformulare realisiert, die sich auf die jeweilige Tabelle beziehen. Das funktioniert im Grunde jetzt soweit auch alles ganz gut, bis es zum Drucken des Formulares kommt.
(Ja ich weiß, eigentlich sind Berichte zum drucken vorgesehen, aber in einem Bericht kann der Nutzer eben keine eigenen Werte zur Berechnung eingeben... deshalb der Weg als Formular)
Ich habe eine Schaltfläche eingefügt, mit der das Formular gedruckt werden soll. Dies war auf 2 Wegen möglich.

1. per Assistent: Formularoperationen -> aktuelles Formular drucken
2. per VBA: im Clickevent: DoCmd.RunCommand acCmdPrint

Ergebnisse:

bei 1.:
Der Druckvorgang öffnet sich, und sobald ich auf drucken klicke (egal ob virtueller Pdf-Drucker oder realer Drucker) werden mir mehrere Fehlermeldungen angezeigt.
"Nicht genügend Speicherplatz zum Ausführen der Operation. Schließen Sie Anwendungen, die Sie nicht benötigen, und versuchen Sie es erneut."
"Nicht genügend Systemressourcen"
Diese erscheinen mehrmals hintereinander bis ich zu einem Fenster gelange, auf dem ich "alle Makros ausschalten" anklicken kann.

beim erneuten drücken der Schaltfläche das gleiche Prozedere.

bei 2.
Der Druckvorgang öffnet sich, und sobald ich auf drucken klicke (egal ob virtueller Pdf-Drucker oder realer Drucker) wird mir folgende Fehlermeldung angezeigt.
"Laufzeitfehler '2212' Microsoft Access konnte das Objekt nicht drucken"
beim Debuggen wird mir lediglich die oben beschriebene Zeile gelb markiert. (DoCmd.RunCommand acCmdPrint)

Ich habe es dann geschafft die Fehlermeldung zu unterdrücken (obwohl das ja eigentlich nicht die Lösung sein kann) mit:
On Error Resume Next
DoCmd.RunCommand acCmdPrint
On Error GoTo 0

Auf diese Art und Weise wird mir das Formular tatsächlich ab und zu ausgedruckt, aber meistens nicht. Der Fehler erscheint mir sehr willkürlich, da nach mehrmaligem drücken der Schaltfläche das Formular manchmal gedruckt wird und manchmal nicht. Woran kann das liegen? Habe schon versucht den Focus beim drucken direkt auf das Formular (Durchlass) zu legen.

DoCmd.SelectObject acForm, "Durchlass", True

Forms!Durchlass.SetFocus

Hat aber beides nichts geändert.


Außerdem habe ich noch ein zweites Problem (Hoffe die Anfrage wird nicht zu lang)
Wenn mir das Formular nun doch mal gedruckt wird werden mir in manchen Felden #Typ! und #Fehler angezeigt, obwohl in der Formularansicht alles korrekt berechnet und angezeigt wird.
Eigentlich weist #Typ! ja darauf hin dass es sich um einen leeren Datensatz handelt, das ist aber nicht der Fall. Zumal es in der Formularansicht ja korrekt dargestellt wird...

Ich hoffe ihr könnt mir weiterhelfen, ich habe Angst, dass ich das gleiche Ergebnis bekomme wenn ich das nächste Formular aufbaue.
Titel: Re: Formular drucken, #Typ!, #Fehler
Beitrag von: DF6GL am Februar 07, 2017, 11:37:48
Hallo,

erster Ratschlag:   bearbeite die (normalisierten) Tabellen mit Formularen  (Daten eingeben, ändern, löschen) und benutze für den Ausdruck, bzw. besondere formatierte Darstellung einen Bericht.

zweiter Ratschlag:  benutze VBA-Ereignisprozeduren und dort keine internen Access-Makros (Docmd...) , von ein paar Ausnahmen abgesehen, z. Docmd.Openform, Docmd.Openreport)

dritter Ratschlag:  speichere keine berechneten Werte in Tabellenfelder ab. Berechne die Werte immer dort erneut, wo sie gerade gebraucht werden (Abfragen, Steuerelementinhalte, etc.)


vierter (eigentlich allererster) Ratschlag:  sorge für eine passende und normalisierte Tabellenstruktur.

Wieviele Datensätze werden im Formular denn angezeigt und um welchen Formulartyp handelt es sich (EinzelForm, Endlosform)?

Es werden mit dieser Methode soviele DS ausgedruckt, wie das Form aktuell (durchscrollen!) anzeigen kann.

Soll nur ein DS gedruckt werden, so ist das Recordset auf den aktuell genutzten DS zu beschränken (Filtern!)  oder die Formabfrage mit einer Where-Condition bezgl. des einen aktuellen DS (Primärschlüssel!)  anzupassen.


Titel: Re: Formular drucken, #Typ!, #Fehler
Beitrag von: Marne89 am Februar 07, 2017, 12:07:47
Hallo, danke für die schnelle Antwort.

1. Ich habe unterschiedliche Tabellen angelegt (z.B. Entsorgung mit den Spalten min Gesamtpreis, ⌀ Gesamtpreis, max Gesamtpreis, Menge, min Einheitspreis, ⌀ Einheitspreis, max Einheitspreis) auf jede Tabelle bezieht sich ein Unterformular um mir den Mittelwert für ⌀ Einheitspreis zu berechnen.
Ich möchte jeweils ein Formular anlegen, in dem der Benutzer ein neues abgeschlossenes Projekt eingeben kann (mit den tatsächlichen Preisen) und je ein Formular, das zur Kostenschätzung für neue Projekte dient, in das man Kennwerte eingibt um einen Preis aus den vorhandenen Projekten zu bekommen.
Bisher habe ich nur das letztere erstellt.

2. Habe mich nun auch hauptsächlich auf VBA gestützt.

3. Die berechneten Felder in der Tabelle sind notwenig um die Einheitspreise zu bekommen, aus denen sich letztendlich der Mittelwert berechnet.

4. Ja ich weiß das ist wahrscheinlich mein größtes Problem. Ich habe unter den Tabellen keine Beziehungen hergestellt, sondern die Felder im Formular direkt auf die Tabellen bezogen... es sind sehr viele Tabellen mit vielen Datensätzen, bei denen ich nicht weiß wie ich sie untereinander in Beziehung setzen soll, deswegen dachte ich mir es funktioniert vielleicht auch so. Das tut es ja auch, nur eben manchmal und manchmal nicht.  :-\

Ich bin mir nicht sicher, um welchen Formulartyp es sich handelt, da ich den Unterschied nicht kenne...

Ich hänge den Druckauszug an, der bisher funktioniert hat.
Titel: Re: Formular drucken, #Typ!, #Fehler
Beitrag von: DF6GL am Februar 07, 2017, 12:49:25
Hallo,

1)  nochmal: berechnete Werte sind falsch, weil fehlerträchtig.
     "jeweils ein Formular für ein (neues) Projekt"   ist genauso falsch, weil überflüssig.  Neue Projekte erscheinen als neue Datensätze in der/den Tabelle/n.  Dazu braucht es nur EIN Formular, das entspr. den Arbeitsvorgängen gesteuert wird.


2)  gut


3)  nein,  die sind nicht nötig, weil, wie gesagt die Ergebnisse aus den (gespeicherten) Ausgangs-/Grundwerten abgeleitet/berechnet werden können.

4) "Keine Beziehungen" ist ein KO-Kriterium für eine Datenbank.  Normalisierung und damit Beziehungen bei Tabellen sind essentiell beim Aufbau einer funktionierenden DB.
Zitatdie Felder im Formular direkt auf die Tabellen bezogen
das ist ja mit Normalisierung/Beziehungen nichts zu tun.


Zitatsehr viele Tabellen mit vielen Datensätzen
ist eine Normalität bei Datenbanken..

Zitatnicht weiß wie ich sie untereinander in Beziehung setzen soll
Das könnte man aus der Realität ableiten. Und Du selbst weißt am Besten, was für Daten Du verarbeiten musst.
Zudem könnte hier im Forum nachgefragt werden, welche Vorschläge es dazu geben könnte.


ZitatDas tut es ja auch, nur eben manchmal und manchmal nicht.

Eben... Knapp daneben ist auch nicht getroffen.

Zitat
um welchen Formulartyp es sich handelt 

---> Formularentwurfsansicht/Optionen/Format/Standardansicht

Zeige mal den Screenshot des Beziehungsfensters, nachdem Du alle Tabellen hinzugefügt hast und so groß gezogen hast, dass alle Tabellenfelder zu lesen sind.

Zudem zeige den VBA-Code der Formulare (mit Copy&Paste hierher kopieren)