PDA

Vollständige Version anzeigen : Datensätze aus Formular drucken, ohne Tabellenzugriff


Gast
25.10.2003, 15:10
Problembeschreibung
-----------------------------------
Ich habe ein Formular "MechanischeWerte" welches von einer Abfrage "NachWarmbandNr" generiert wird.
In diesem Formular kann der Nutzer blättern. Er möchte bestimmte Datensätze markieren und in berichtsform ausdrucken.
Den gesamten Datensatz ausdrucken zu lassen ist kein Problem, ich lasse per Button ein Bericht öffnen.

Im Formular "MechanischeWerte" muss ich also in irgendeiner Art und Weise etwas einbauen, wo der Nutzer auswählen kann, ob er diesen Datensatz ausdrucken möchte oder nicht. Danach muss ich diese Datensätze irgendwo "zwischenspeichern" und schliesslich als Bericht ausgeben. Hat jemand eine Idee?

Weitere Restriktionen
-----------------------------
Verkompliziert wird das ganze dadurch, dass ich in den Tabellen, die für die Abfrage "NachWarmbandNr" eine Rolle spielen (und somit auch für das Formular "MechanischeWerte") nichts verändern kann, da ich keine Schreibrechte habe. Die Tabellen selbst sind gar nicht vorhanden, sondern nur eine Verknüpfung (ODBC).
Neue Tabellen anlegen etc. ist kein Problem.

Wenn ich nun im Formular eine Auswahltschaltfläche einbaue "Datensatz Drucken?", so ist die Auswahl für alle Einträge wirksam. Ändert beispielsweise der Nutzer im Datensatz 5 den Eintrag auf "drucken", dann sind alle anderen Datensätze auch so markiert. Nimmt er es irgendwo raus, ist es bei allen anderen Datensätzen auch nicht mehr markiert.

Vielen Dank im voraus
Teoman79

Johnny Loser
25.10.2003, 15:23
Ich weiß jetzt nicht, welche Möglichkeiten Du hast, an Deiner DB Obejekte zu erstellen oder zu verändern.

Was hältst Du davon, auf dem Formular einen Button zu setzen. Bei Betätigung des Buttons wird die ID des Datensatzes in eine Array-Variable gespeichert. Wenn der User dann mit dem Durchblättern fertig ist, stehen z.B. 30 ID's in der Variablen.

Aus diesen kannst Du Dir ein Kriterium in einer Funktion zusammensetzen, welche dann für Deine Berichtsabfrage genommen werden kann.

Gast
25.10.2003, 15:51
Original geschrieben von Johnny Loser
Ich weiß jetzt nicht, welche Möglichkeiten Du hast, an Deiner DB Obejekte zu erstellen oder zu verändern.

Was hältst Du davon, auf dem Formular einen Button zu setzen. Bei Betätigung des Buttons wird die ID des Datensatzes in eine Array-Variable gespeichert. Wenn der User dann mit dem Durchblättern fertig ist, stehen z.B. 30 ID's in der Variablen.

Aus diesen kannst Du Dir ein Kriterium in einer Funktion zusammensetzen, welche dann für Deine Berichtsabfrage genommen werden kann.

Die Abfrage "NachWarmbandNr" wird anhand von 3 Tabellen (genauer gesagt Verknüpfungen zu diesen Tabellen) erstellt. In diesen 3 Tabellen kann ich also nichts machen, alles andere steht mir offen.

Die Idee mit "ID" speichern hatte ich auch, aber welche ID soll ich speichern? Es existiert im Formular für die einzelnen Datensätze ja keine eindeutige ID. Es ist vielmehr das Ergebnis einer Abfrage.

Denkanstösse
--------------------------
Ich hatte folgende Idee: Ich könnte zunächst eine Tabelle "Druckauswahl" erstellen, die alle Felder (WarmbandNr, SchmelzNr, Dicke, Breite etc.) beinhaltet, die in diesem Formular vorkommen.

Direkt beim Aufruf des Formulars wird diese Tabelle geleert (falls irgendetws vorhanden ist)

Ich baue drei Buttons ein
1.) Zum Ausdrucken auswählen
2.) Auswahl drucken
3.) Auswahl leeren

Drückt der Nutzer den Button "Zum Drucken auswählen" müssen alle Felder des aktuellen Datensatzes an die Tabelle "Druckauswahl" übergeben werden sprich dort eingetragen werden.
Drückt der Nutzer den Button "Auswahl drucken" wird die Tabelle "Druckauswahl" in einem Bericht geöffnet.
Drückt der Nutzer "Auswahl leeren" wird die Tabelle geleert.

Problem
-------------
Meine Idee hat gewisse Nachteile.
1.) Ich weiss nicht, ob sowas zu implementieren ist, und wie es zu implementieren wäre
2.) Der Nutzer kann immer nur die gesamte Auswahl entfernen, und nicht einzeln. Wenn er sich mal "verdrückt", muss er die Auswahl von vorne beginnen, da er nicht einen einzelnen Datensatz entfernen kann.

Testversuch
-------------------
3.) Bei einem Testversuch dies umzusetzen, bekam ich interessanterweise die Fehlermeldung "Typen unverträglich", obwohl die Felder ja identisch sind.

Deshalb habe ich hier mein Ziel dargestellt, damit der eine oder andere Experte eventuell eine viel intelligentere Vorgehensweise kennt.

Johnny Loser
25.10.2003, 16:01
Wenn es keine eindeutige ID pro Datensatz gibt, bleibt Dir wahrscheinlich nichts anderes übrig, als Deinen Vorschlag in die Tat umzusetzen.

Erstelle eine Tabelle, die alle notwendigen Felder aufnehmen kann.
Mit Button fügst Du per VBA die Daten an die Tabelle an.

Ich würde dann einen zweiten Button anlegen, mit dem ich ein weiteres Formular öffne, in dem mir die ausgewählten Daten in einem Endlosformular angezeigt werden. Hier habe ich zusätzlich die Möglichkeit, einzelne Datensätze wieder zu löschen.
Aus diesem Formular kann ich den Druck starten.

Alternativ wäre ein Unterformular oder eine ListBox in Deinem Hauptformular, das hängt aber vom Platz ab.

3.) Bei einem Testversuch dies umzusetzen, bekam ich interessanterweise die Fehlermeldung "Typen unverträglich", obwohl die Felder ja identisch sind.
Hierzu wäre es interessant den Code zu sehen, wo dieser Fehler auftritt...

Gast
25.10.2003, 16:12
Original geschrieben von Johnny Loser

Mit Button fügst Du per VBA die Daten an die Tabelle an.



Wie mache ich das? Habe noch nie mit VBA programmiert. (Allgemeine Programmierkenntnisse sind aber vorhanden)

Ich habe auch ein VBA-Buch, ich schaue auch mal dort rein. Wenn jemand die Lösung kennt (oder aber ganz andere Lösungsansätze hat) bitte reinposten.

Thanx und Gruss
Teoman

Johnny Loser
25.10.2003, 16:22
Okay, okay...

es existiert also eine Tabelle Druckauswahl.

Im Ereignis Beim Klicken des Buttons könnte ich mir folgende Prozedur vorstellen:


Private Sub Button1_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("SELECT * FROM Druckauswahl")
rs.AddNew
rs("NameDesErstenTabellenFeldes") = Me!NameDesEntsprechendenFormularfeldes
rs("NameDesZweitenTabellenFeldes") = Me!NameDesEntsprechendenFormularfeldes
rs("NameDesDrittenTabellenFeldes") = Me!NameDesEntsprechendenFormularfeldes
'... usw.
rs("NameDesLetztenTabellenFeldes") = Me!NameDesEntsprechendenFormularfeldes
rs.Update
rs.Close
db.Close
End Sub

Gast
26.10.2003, 19:15
Ja, so klappt's

Daneben habe ich zwei buttons eingebaut, um die Auswahl anzuzeigen (DoCmd.OpenTable("Druckauswahl")) und um den Bericht zu öffnen (DoCmd.OpenReport("Bericht"), wobei der Bericht von der Tabelle "Druckauswahl" generiert wird.

Ich müsste noch etwas einbauen. Und zwar beim verlassen des Formulars sollte die Tabelle "Druckauswahl" geleert werden. Jemand eine Idee?

(Sollte simpel sein, aber ich habe halt keine VBA-Erfahrung)

danke im voraus

Johnny Loser
26.10.2003, 22:00
Das Löschen ist am einfachsten über ein Execute-Statement umzusetzen.

CurrentDb.Execute("DELETE FROM Druckauswahl")
Diese Zeile beim Entladen des Formulars, dann ist die Tabelle wieder leer...

keviani
02.05.2007, 09:46
Hallo,

ich habe beim suchen auf dieses Thema aufmerksam geworden und habe versucht es bei mir anzupassen.

Ich habe eine Tabelle, wo die Einträge gespeichert werden müssen, mit dem Assistent klappt es nicht, die Einträge werden nicht gespeichert.
ich habe den Code Private Sub Button_Add_Record_Click()
On Error GoTo Err_Button_Add_Record_Click

Dim db As DAO.Database
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("SELECT * FROM tbl_Follow_up")
rs.AddNew
rs("Follow_up_number") = Me!Follow_up_Notification
rs.Update
rs.CLOSE
db.CLOSE

Exit_Button_Add_Record_Click:
Exit Sub

Err_Button_Add_Record_Click:
MsgBox Err.Description
Resume Exit_Button_Add_Record_Click

End Sub
für die Taste Add new Record eingefügt, macht Fehler, ich weiß nicht warum.

Mein Problem ist, dass ich einen Fehler DS habe und die Follow up Notif. sind die Unterdatensätze, müssen sein, ich weiß nur nicht wie ich es hinkriege, dass mehrere DS (Follow up Notification) die über UFO in der Tabelle "Follow up number" gespeichert werden zu dem DS aus HF angehängt werden können.

keviani
03.05.2007, 07:17
Hallo,

die Frage ist erledigt.