Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: kingwambi am Juli 29, 2013, 14:04:53

Titel: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Juli 29, 2013, 14:04:53
Hallo - ich verwende unten stehenden Code um ein Formular als PDF zu speichern - funktioniert gut, jedoch hakt es noch bei folgendem. Ich möchte zwei verschiedene Varianten
Was muss ich abändern, dass

Variante 1) nur der aktuell angezeigte Datensatz gespeichert wird
Variante 2) alle Datensätze - jedoch jeder Datensatz in ein eigenes PDF
(Vorgehensweise - Formular wird geöffnet, Button gedrückt)

----------------------------------------------------------------------------------------

Private Sub PDF_speichern_Click()

Dim Berichtsname As String
    Dim BerichtZusatz As String
    Dim BerichtZusatz2 As String
   
    Berichtsname = Me!Inventarnummer
    BerichtZusatz = Me!Kundennr2
    BerichtZusatz2 = Me!Prüfdatum
   
   
    DoCmd.OutputTo acOutputForm, "frm_Prüfprotokoll_DVE", acFormatPDF _
                 , "D:\" & Berichtsname & "_" & BerichtZusatz & "_" & Format(BerichtZusatz2, "yyyymmdd") & ".pdf", False
                 
End Sub
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: DF6GL am Juli 29, 2013, 14:39:04
Hallo,

such mal hier im Forum nach "Bericht PDF" , da wirst Du dann das Prinzip finden, wie sowas gelöst werden kann:


V1):   Einer gespeicherten (Formular-)Abfrage per VBA deren Eigenschaft "SQL" einen mit dem passenden Kriterium  zusammengebauten SQL-String zuweisen und das Form mit Outputto "drucken"
V2: Wie V1, lediglich in einer Recordset-Schleife jeweils den Primärschlüsselwert als Kriterium zum SQL-String zusammenbauen und ausdrucken.
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Juli 29, 2013, 15:22:25
Hallo - ich durchforste schon seit geraumer Zeit das Forum. Ich bin froh, dass ich den vorhandenen Code mithilfe des Forums erstellen konnte - 0 Vorwissen mit VBA.

Im Hintergrund habe ich Kriterien in der (Form)Abfrage. Nun erhalte ich aus Gesamt 2000 Datensätzen zb 20 Datensätze im Form angezeigt. Nun blättere ich zu Datensatz 7 - und nur diesen gerade angezeigten möchte ich speichern. (Wie Druckbefehl: DoCmd.RunCommand acCmdSelectRecord / DoCmd.PrintOut acSelection)

Version 2 erwähne ich noch mal nicht - bis ich das behirnt habe.
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am Juli 29, 2013, 16:09:23
Hi,

beim Wechsel eines Datensatzes bzw. beim Schließen eines Formulars wird der Datensatz bereits gespeichert.

Ansonsten kann gespeichert werden mit:
       DoCmd.RunCommand acCmdSaveRecord                    ' Eingaben speichern

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Juli 29, 2013, 16:31:42
Hallo - ich meine eigentlich nicht den normalen Speicher Befehl, das ist mir klar, sondern mit Befehl docmd.outputto speichern als PDF - nur den einen angezeigten Datensatz

ZitatPrivate Sub PDF_speichern_Click()

Dim Berichtsname As String
    Dim BerichtZusatz As String
    Dim BerichtZusatz2 As String
   
    Berichtsname = Me!Inventarnummer
    BerichtZusatz = Me!Kundennr2
    BerichtZusatz2 = Me!Prüfdatum
 
   
    DoCmd.OutputTo acOutputForm, "frm_Prüfprotokoll_DVE", acFormatPDF _
                 , "D:\" & Berichtsname & "_" & BerichtZusatz & "_" & Format(BerichtZusatz2, "yyyymmdd") & ".pdf", False

Im Prinzip die gleiche Vorgehensweise wie beim Druck (mit folgendem Befehl drucke ich ja auch nur das Blatt in der Ansicht) - eben nur als PDF speichern:
ZitatDoCmd.RunCommand acCmdSelectRecord / DoCmd.PrintOut acSelection
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: DF6GL am Juli 29, 2013, 16:45:52
Hallo,

ja und nun?

Es wurde alles schon beantwortet..  Wo hängt es nun genau?

Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Juli 29, 2013, 17:29:41
Hallo - sorry - ich weiß aber mir sagt folgendes eben nichts - eben kein Access Gott - Anfänger.

ZitatEiner gespeicherten (Formular-)Abfrage per VBA deren Eigenschaft "SQL" einen mit dem passenden Kriterium  zusammengebauten SQL-String zuweisen

Eventuell reden wir auch von 2 untersch Dingen. Mit einer Abfrage mit Kriterien kann ich dies auch nicht lösen - Kriterien sind in der Formularabfrage schon hinterlegt - von den 2000 Datensätzen zeigt es mir eh nur 20 an - ich möchte jedoch nur den einen den ich angezeigt bekomme zb. Seite 7 wegspeichern. Eben ähnlich wie beim Druckbefehl "aktuellen Datensatz drucken"
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am Juli 29, 2013, 20:13:58
Hi,

und hier haben wir ein Beispiel, dass Crossposting mehr schadet als nutzt:
Die eben von mir eingestellte Lösung habe ich wieder gelöscht, nachdem ich http://www.office-loesung.de/ftopic611504_0_0_asc.php gefunden hatte.

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Juli 29, 2013, 21:21:52
Hallo - Sorry - es war mir nicht bewusst dass dies nicht gerne gesehen wird - ich bin kein großer Poster. Ich wollte nur rasch zu einer Lösung kommen - ich Entschuldige mich dafür und werde dies in Zukunft lassen.

Eventuell würde sich trotz meines Verstoßes noch jemand zu einer Lösung bewegen lassen
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am Juli 29, 2013, 21:27:16
ok,

neuer Versuch.

0) Ich setze voraus, Du hast eine eindeutige ID für den Datensatz. Falls nein, als auto-Feld in der Tabelle anlegen.

1) Im Modul (dessen Name ist beliebig) eine globale Variable deklarieren:
   Public Datensatz_id_fuer_Bericht As Long

2) Jetzt gilt es zu klären, wie festgelegt wird, ob nur EINER oder VIELE Datensätze zu drucken sind:
2a) Ist z.B. über einen Button lösbar. Dann dort im Ereignis "Bei Klicken" einfügen:
       Datensatz_id_fuer_Bericht = Me.Dein_id_Feld    ' bitte den von Dir bestimmten Namen verwenden
Zum Zurücksetzen dann noch einen Button anlegen und dort "Bei Klicken" eintragen:
       Datensatz_id_fuer_Bericht = 0

2b) Alternativ kann auch beim pdf-Druck-Button das Ereignis "Bei Mausbewegung" ausgenutzt werden:
   If Shift = 2 Then                         ' die strg-Taste wurde gedrückt beim Mausklicken
       Datensatz_id_fuer_Bericht = Me.Dein_id_Feld    
   Else
       Datensatz_id_fuer_Bericht = 0
   End If


3) Jetzt im Bericht, auf den die zu erstellenden pdf-Datei beruht, im Ereignis "Beim Öffnen" eintragen:
Private Sub Report_Open(Cancel As Integer)
   If Nz(Datensatz_id_fuer_Bericht, 0) > 0 Then
       Me.Filter = "Dein_id_Feld = " & Datensatz_id_fuer_Bericht
       Me.FilterOn = True
   Else
       Me.Filter = ""
       Me.FilterOn = False
   End If
End Sub


Falls das zu unverständlich ist, stell eine komprimierte und gezippte Datenbank mit wenigen Datensätzen im a2003-Format zur Verfügung.

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Juli 29, 2013, 22:37:01
Hallo - ich hab mich bemüht - schaut nicht so gut aus ???. Um dich nicht noch länger zu nerven hab ich alles wichtige rausgenommen und die Datenbank angehängt.
Öffne ich das Formular Blutsperre bekomme ich richtig 2 der 4 Datensätze angezeigt. Drücke ich im Formular auf den Button "PDF" erstellt er mir richtig das PDF auf "D:\" Jedoch beide Datensätze in ein PDF.
Ich würde jedoch gerne
1) einen Button haben in dem ich nur den aktuell angezeigten Datensatz speichere, jenen, den ich mir gerade ansehe - (Datensatz 1 von 2) und
2) einen Button mit dem ich auf Klick alle ausgewählten, in meinem Fall beide Datensätze, in je ein getrenntes PDF speichern kann - mit den hinterlegten docmd.outputto Kriterien.

Wenn du mir dies in einem Beispiel zeigen könntest - das wäre der Hammer ;D

[Anhang gelöscht durch Administrator]
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am Juli 30, 2013, 05:41:20
Hallo,

siehe Anhang.
Hinzugefügt wurde:
- Modul_Deklaration,
- zwei Buttons im Formular (habe sie im Kopf platziert, bitte an geeignete Stelle setzen)

Bei diesen Buttons gibt es das Klick.-Ereignis. Dort wird "Datensatz_id_fuer_Bericht" gesetzt und Deine Routine zum Drucken der pdf-Datei aufgerufen (call ...)

In der Routine zum pdf-Drucken wurden neue Zeilen hinzugefügt: Diese sind durch Kommentare ersichtlich.

Anmerkung:
Ich war davon ausgegangen, dass Du einen Bericht zur Vorlage der pdf-Datei verwendest. Das hätte den Vorteil, dass das Layout für den Ausdruck etwas "schöner" gestaltet werden kann und dass dort die zuvor bemerkten Zeilen (if nz(...) eingebaut werden können. Habe also das Setzen der Filter-Bedingung vor die "outout-Zeile gesetzt. Nach der out-put-Zeile wird der Filter wieder zurückgesetzt. Diese Variante wird allerdings Probleme geben, wenn Du selber Filter verwendest. Lösung ist ein eigener Bericht.

Wenn Du mehr als einen Datensatz als pdf-speicherst, bekommt er einen Namen, der auf nur einen Datensatz hindeutet. Soll das so bleiben?

Hoffe, es hat geholfen.

Harald

[Anhang gelöscht durch Administrator]
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Juli 30, 2013, 09:08:36
Hallo - erstmals vielen Dank!! Ich bin voll Happy  :D - das mit dem Einzeldruck funktioniert genau so wie ich es mir vorgestellt habe. Und wenn man es sieht versteht man es auch langsam - was mir sehr wichtig ist.

Jedoch wirft er beim Button "alle Datensätze" alle Datensätze in ein einziges PDF  - es sollten jedoch lauter einzelne werden. Wie ich im Forum herausgelesen habe - im Prinzip wie die Einzeldrucklösung mit einer Schleife oder so. Wäre es möglich für dich das noch einzubauen?

LG Jürgen
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: DF6GL am Juli 30, 2013, 09:26:29
Hallo,

versuch mal das :


Private Sub alle_Datensaetze_Click()

Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone

If Not (rs.BOF Or rs.EOF) Then
   rs.MoveFirst
   Do Until rs.EOF
       Datensatz_id_fuer_Bericht = rs!ID_Prüfprotokoll
       PDF_erstellen_Click
   rs.MoveNext
   Loop
End If

Set rs = Nothing

End Sub


(not checked)
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Juli 30, 2013, 10:18:52
Hallo

ich bekomm einen Laufzeitfehler 3420 - das Objekt ist ungültig oder es ist nicht mehr festgelegt. Gehe ich auf Debugger markiert er das Feld rs.MoveNext
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am Juli 30, 2013, 10:20:17
Hi,

etwas spät, aber checked  ;D

Harald

[Anhang gelöscht durch Administrator]
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Juli 31, 2013, 09:30:51
Hallo - du bist der Hammer. Genau so und nicht anders hab ich mir das vorgestellt! Danke!!!  ;D ;D

Ich hätte eine Frage zu Abfragekriterien - wenn ich

Wie "*" & [Datum eingeben] & "*" als Kriterium festlege kann ich entweder das ganz Datum oder nur mm.yyyy oder nur yyyy eingeben - dies ist echt hilfreich.
Wäre es jedoch möglich dies zu kombinieren mit Von Bis? Damit ich sägen könnte von 31.7.2013 bis 31.8.2013 oder 7.2013 bis 8.2013 oder eben nur 2013 bis 2014. Denn mit
>=[Von Datum Und <=[Bis Datum] muss ich ja immer das ganze Datum eingeben - eine Eingrenzung nach nur Montag + Jahr oder nur Jahr ist hier nicht möglich.

So in der Richtung - jedoch funktioniert dies nicht
>=(Wie "*" & [Von Datum] & "*") Und <=(Wie "*" & [Bis Datum] & "*")

LG Jürgen
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am Juli 31, 2013, 12:23:41
Hi,

Zitat von: kingwambi am Juli 31, 2013, 09:30:51
>=(Wie "*" & [Von Datum] & "*") Und <=(Wie "*" & [Bis Datum] & "*")

Dafür sehe ich im Moment keine einfache Lösung.
Denkbar ist, dass man die year- bzw. month-Funktion einsetzt. Das setzt dann aber voraus, dass mittels VBA der eingegebene Wert untersucht wird, um sich eine passende Bedingung zu basteln.

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Juli 31, 2013, 15:45:40
Hallo - das ist mir nicht wichtig - egal.

Eines wollte ich noch wissen. Wäre es möglich wenn ich ein Prüfdatum habe und ein nächste Prüfung Feld, dass ich dies automatisch berechnen lassen kann.
Wenn ich bei dem zu überprüfenden Gerät hinterlege in wie vielen Jahren die wiederkehrende Prüfung stattfinden soll - zb Name: Gerät1 | Prüfintervall: 3 (für in 3 Jahren)
Wenn ich das aktuelle Datum im Feld Prüfdatum eingebe er automatisch in das Feld nächste Prüfung 31.7.2016 einfügt?
Wenn ja wie funktioniert das oder wenn es sehr kompliziert wäre - könnte ich dich bitten dies im Beispiel zu übermitteln?

LG Jürgen
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am Juli 31, 2013, 16:43:45
Hi,

statt dem Speichern des zukünftigen Datums ist es besser, einen berechneten Wert anzuzeigen, da ansonsten bei einer Änderung des Prüfdatums und/oder Intervalls das gespeicherte (=altes Datenmodell) zukünftige Prüfddatum falsch ist bzw. neu berechnet werden muss und dann gespeichert werden muss.
Es gilt der Grundsatz: Keine berechneten Daten zu speichern.

Im Anhang ein einfaches Beispiel, bei dem in der Abfrage das zukünftige Prüfdatum anhand der Vorgaben pro Datensatz berechnet wird.
Dabei wird die DateAdd-Funktion verwendet. Die dort stehenden Angaben sind wichtig u.a. für die Intervall-Vorgabe.
Siehe access-Hilfe:
DateAdd-Funktion
     

Gibt einen Wert vom Typ Variant (Date) zurück, der ein Datum enthält, zu dem ein bestimmtes Zeitintervall addiert wurde.

Syntax

DateAdd(interval, number, date)

Die Syntax für die DateAdd-Funktion besteht aus den folgenden benannten Argumenten:

Teil Beschreibung
interval Erforderlich. Zeichenfolgenausdruck, der das zu addierende Zeitintervall ergibt.
number Erforderlich. Numerischer Ausdruck, der die Anzahl der zu addierenden Intervalle ergibt. Er kann positiv (für ein zukünftiges Datum) oder negativ (für ein vergangenes Datum) sein.
date Erforderlich. Ein Wert vom Typ Variant (Date) oder ein als Literal dargestelltes Datum, zu dem das Intervall hinzuaddiert wird.



Einstellungen

Das Argument interval hat die folgenden Einstellungen:

Einstellung Beschreibung
yyyy Jahr
q Quartal
m Monat
y Tag des Jahres
d Tag
w Wochentag
ww Woche
h Stunde
n Minute
s Sekunde

Harald

[Anhang gelöscht durch Administrator]
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Juli 31, 2013, 21:40:07
Hallo - funktioniert toll - nur habe ich ein Problem mit einer Abfrage, die sich auf das "nächste Prüfdatum" bezieht. Bis jetzt wurde das "nächste Prüfdatum" manuell eingegeben und dann konnte man mit

Wie "*" & [Monat& oder Jahr für nächste Prüfung eingeben] & "*"

eine Liste mit Geräten abrufen, die zb in 05.2015 oder eben alle Geräte im Jahr 2015 zu prüfen sind.

Nun erhalte ich jedoch immer Fehler. Es wäre jedoch komplett egal, wenn die Werte statisch sind - die werden nie wieder geändert, wenn dies hilft. Ev hast du hier eine Lösung - Danke - LG Jürgen
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am Juli 31, 2013, 21:57:05
Hi Jürgen,

wie lautet der Fehler?
Ich will lieber ein paar Minuten bei der bislang vorgestellten Variante bleiben, bevor Routinen für das Speichern von berechneten Werten kreiert werden.

Kannst Du wieder ein paar Spieldaten zur Verfügung stellen?

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am August 01, 2013, 10:41:47
Hallo Harald - war wohl ein Fehler von nicht eingegebenen Daten. Funktioniert wundervoll!!  :D Danke nochmals für die verständliche und äußerst kompetente Unterstützung!!!
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am August 01, 2013, 10:51:19
Hi Jürgen,

gern geschehen.

Für die Zukunft: Mit der Funktion NZ (siehe access Hilfe) können Fehler vermieden werden, wenn Felder keinen Inhalt haben (d.h. noch nichts eingegeben ist).

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am August 01, 2013, 15:03:32
Hallo - alles klar danke - werd ich mir ansehen. Jetzt muss ich noch einmal lästig sein.

Wenn ich eine Abweichung des Prüfintervalles habe - normalerweise sind bei einem speziellen Gerät 3 Jahre Prüfintervall - jedoch möchte ein Kunde dieses immer früher Prüfen lassen. Ich habe dem Gerät den Prüfintervall zugeteilt. Kann ich dem Kunden einen Prüfdifferenz zuteilen, damit ich ein effektives Prüfintervall erhalte. Gerät1 = 3 / Differenz -1 = Effektiv 2

nächste Prüfung: DatAdd([YMD];[Intervall]+[Intervalldiff];[Prüfdatum])

so in der Richtung - kann ich das in der Abfrage regeln oder müsste ich hier ein extra Feld in einer Tabelle oder eine extra Tabelle erstellen?

LG Jürgen
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am August 01, 2013, 16:13:51
Hi Jürgen,

ein Eintrag in einer Tabelle ist leichter zu pflegen als irgendein Konstrukt in einer Abfrage oder gar in irgendwelchen vba-Zeilen.

Hierbei stellt sich die Frage nach der Datenstruktur. Wenn ich das korrekt verstanden habe:
1. einfacher Fall: am Gerät X sind z.B. 3 Jahre hinterlegt.
2. neue Tabelle mit der Kombination Gerät X + Kunde Y und dem Intervall "weniger als 3 Jahre"

Die bestehende Abfrage müßte demnach noch mit der neu zu schaffenden Tabelle verknüpft werden.
Wenn bei der Verknüpfung kein Wert gefunden wird, werden die "3 Jahre" addiert, ansonsten das aus der neuen Tabelle.


Falls zu kompliziert: Als quick & dirty wäre auch denkbar: Gerät erneut anlegen mit Hinweis auf Kunden + Zuordnung eines anderen Intervalls {hoffentlich werde ich jetzt nicht gesteinigt  ;) }

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am August 02, 2013, 08:58:24
Hallo - ich hätte es so gelöst (siehe Anhang - Bild)

Intervall ist in Tabelle Gerät (jedes Gerät hat einen Standartintervall)
Intervalldiff in Tabelle Prüfprotokoll (Standardwert 0)
es kommt nun ein Feld Intervalldiff in das Eingabeformular. Weicht der Intervall vom Standardintervall ab, so gibt der Prüfer den Wert hier ein - ansonsten lässt er ihn leer.
Das nächste Prüfdatum errechnet sich dann wieder automatisch. So kann für jede Prüfung auf einen individuellen Prüfwunsch eingegangen werden. Funktionieren tuts - oder siehst du Probleme?

LG Jürgen

[Anhang gelöscht durch Administrator]
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am August 02, 2013, 09:52:34
Ein Problem hab ich gefunden - wenn ich das Kriterium bei nächste Prüfung eingebe: Wie "*" & [Monat & oder Jahr nächste Prüfung] & "*" (oder ein anderes)
fragt er immer nach dem zu berechnenden Wert effIntervall

Kann man nicht zwei Berechnungen in einer Abfrage durchführen und dann Filtern? Gibt es doch eine Lösung? LG Jürgen
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am August 02, 2013, 11:01:36
Hi Jürgen

Zitat von: kingwambi am August 02, 2013, 09:52:34
Ein Problem hab ich gefunden
Kannst Du wie zuvor die db zur Verfügung stellen?

Zitat
Kann man nicht zwei Berechnungen in einer Abfrage durchführen und dann Filtern?
Sollte möglich sein.

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am August 02, 2013, 11:19:29
Hallo - anbei die DB. Ich musste jedoch zuerst eine rar erstellen und diese zippen, da ich mit zip alleine auf einmal nicht unter 200kb komme. LG

[Anhang gelöscht durch Administrator]
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am August 02, 2013, 11:49:45
Hi Jürgen,

bei .rar muss ich passen.

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am August 02, 2013, 13:34:07
So ich hoffe jetzt gehts

[Anhang gelöscht durch Administrator]
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am August 02, 2013, 17:44:53
Hi Jürgen,

muss wieder passen: Beim Versuch, die .mdb zu öffnen, erhalten ich auf verschiedenen Rechnern den Fehlerhinweis:
Fehlercode 0x80004005: Unbekannter Fehler

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am August 02, 2013, 18:13:44
So aber jetzt - ich habs auf nem anderen Rechner gemacht - sorry für die Umstände

[Anhang gelöscht durch Administrator]
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am August 02, 2013, 18:45:32
Hi,

probier mal:
nächste Prüfung: DatAdd([YMD];[Intervall]+[Intervalldiff];[Prüfdatum])
statt: nächste Prüfung: DatAdd([YMD];[effIntervall];[Prüfdatum])

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am August 03, 2013, 09:28:09
Hallo Harald - es funktioniert!! Vielen Dank - schönes WE noch!!
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am August 21, 2013, 09:09:09
Hallo Harald, ich wollte nun in einer Tabelle ein paar Felddatentypen abändern (von Long Integer auf Double - oder bei Text von 5 auf 10 Stellen). Jedoch erhalte ich beim speichern immer die Fehlermeldung zu viele Felder definiert. In einem Hilfetext habe ich gefunden, dass man die MaxLocksperFile erhöhen soll - dzt Wert 251c - hätte ich auf 999c gestellt. Keine Änderung. Hättest du einen Lösungsvorschlag? LG Jürgen
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am August 21, 2013, 09:23:23
Hi,

zur maximalen Anzahl von Feldern in einer Tabelle habe ich gefunden:
http://office.microsoft.com/de-de/access-help/access-2010-spezifikationen-HA010341462.aspx

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am August 23, 2013, 08:24:36
Hallo - ich wäre überall jedoch im grünen Bereich. Ich habe es nun so hingebracht, dass ich die Tabelle kopiert und dann gegen die Originaltabelle ersetzt habe. Ich hoffe, dass ich dies nicht öfter machen muss - eigentlich nicht die eleganteste Lösung aber hat geholfen. LG Jürgen
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am September 05, 2013, 11:00:51
Hallo Harald,

ich habe ein Problem bei der PDF Erstellung mittels Schleife. Ich verwende Replikate der Datenbank - deshalb habe ich auch IDs im Minusbereich - hierbei hat er Probleme. Wenn eine ID im Minusbereich liegt, so wirft er alle Seiten in ein PDF. Liegt die ID im positiven Bereich, so gibt er nur eine Seite in das PDF - so solls sein. Hast du eine Idee wie ich dies richtig stellen kann?

LG Jürgen - folgend der Code den ich verwende:



ZitatPrivate Sub PDF_erstellen_Click()

Dim Berichtsname As String
    Dim BerichtZusatz As String
    Dim BerichtZusatz2 As String
   
    Berichtsname = Me!Inventarnummer
    BerichtZusatz = Me!Kundennr2
    BerichtZusatz2 = Me!Prüfdatum
   
   
    ' ------------------------------------------------------------------
    ' neu
    If Nz(Datensatz_id_fuer_Bericht, 0) > 0 Then
        Me.Filter = "ID_Prüfprotokoll = " & Datensatz_id_fuer_Bericht
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
   
                 
    DoCmd.OutputTo acOutputForm, "frm_Kd_Dat_Prüfprotokoll_DVE", acFormatPDF _
                 , "D:\Protokolle\" & Berichtsname & "_" & BerichtZusatz & "_" & Format(BerichtZusatz2, "yyyymmdd") & ".pdf"
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am September 05, 2013, 11:06:42
Hi,

    Dim Berichtsname As String
    Dim BerichtZusatz As String
    Dim BerichtZusatz2 As String
   
    Berichtsname = Me!Inventarnummer
    BerichtZusatz = Me!Kundennr2
    BerichtZusatz2 = Me!Prüfdatum
   
   
    ' ------------------------------------------------------------------
    ' neu
    If Nz(Datensatz_id_fuer_Bericht, 0) <> 0 Then
        Me.Filter = "ID_Prüfprotokoll = " & Datensatz_id_fuer_Bericht
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
   
                 
    DoCmd.OutputTo acOutputForm, "frm_Kd_Dat_Prüfprotokoll_DVE", acFormatPDF _
                 , "D:\Protokolle\" & Berichtsname & "_" & BerichtZusatz & "_" & Format(BerichtZusatz2, "yyyymmdd") & ".pdf"

Vielleicht hilft der Austausch von > 0 in <> 0 bereits?

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am September 05, 2013, 11:35:11
Hallo - Danke - du bist der Beste! Das wars!

Bei der Einzel PDF Erstellung springt er immer von dem aktuellen Datensatz, den ich gerade drucke, zum Ersten im Formular. Gibt es auch hier eine Lösung, dass er beim aktuellen stehen bleibt?

Folgend der Code

ZitatPrivate Sub PDF_erstellen_Click()

Dim Berichtsname As String
    Dim BerichtZusatz As String
    Dim BerichtZusatz2 As String
   
    Berichtsname = Me!Inventarnummer
    BerichtZusatz = Me!Kundennr2
    BerichtZusatz2 = Me!Prüfdatum
   
   
    ' ------------------------------------------------------------------
    ' neu
    If Nz(Datensatz_id_fuer_Bericht, 0) > 0 Then
        Me.Filter = "ID_Prüfprotokoll = " & Datensatz_id_fuer_Bericht
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
   
                 
    DoCmd.OutputTo acOutputForm, "frm_Kd_Dat_Prüfprotokoll_KFM_DFM", acFormatPDF _
                 , "D:\" & Berichtsname & "_" & BerichtZusatz & "_" & Format(BerichtZusatz2, "yyyymmdd") & ".pdf"

    ' ------------------------------------------------------------------
    ' neu
    Me.Filter = ""
    Me.FilterOn = False
    ' ------------------------------------------------------------------
End Sub
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am September 05, 2013, 12:08:21
Hi,

vorstellbar sind mehrere Lösungswege:
Bitte als erstes ausprobieren:

Stell die Filterbedingung im Bericht in das Ereignis "Beim Öffnen:

Private Sub Report_Open(Cancel As Integer)
    If Nz(Datensatz_id_fuer_Bericht, 0) <> 0 Then
        Me.Filter = "ID_Prüfprotokoll = " & Datensatz_id_fuer_Bericht
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If


Wenn das nicht hilft, kommen ein paar weitere Zeilen für das Zurückspringen auf den alten Datensatz hinzu.

Harald
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am September 05, 2013, 12:46:52
Hallo - ich hätte es versucht - hat nicht geklappt. Ev hab ich auch was falsch gemacht. Wenn es für dich OK ist hätte ich eine Testdatei angehängt. Es geht darum wenn ich im Formular den PDF Knopf drücke soll er auf dem ausgewählten Datensatz stehen bleiben. Wäre super wenn du was finden würdest. Danke

[Anhang gelöscht durch Administrator]
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: bahasu am September 05, 2013, 13:37:07
Hi,

kein Fehler von Dir!

Ich hatte vergessen, dass Du keinen Bericht verwendest. Sorry.

In der Sub "PDF_erstellen_Click" sind zwei Zeilen hinzugekommen:
    ' diese Zeilen kamen am 05.09.2013 hinzu
    Me.RecordsetClone.FindFirst "ID_Prüfprotokoll = " & Datensatz_id_fuer_Bericht
    Me.Bookmark = Me.Form.RecordsetClone.Bookmark

Siehe Anhang.

Harald

[Anhang gelöscht durch Administrator]
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am September 05, 2013, 13:56:09
1000 Dank - es funktioniert  ;D- wie zu erwarten bei deiner Unterstützung. Schönen Tag noch - LG Jürgen
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Mai 14, 2014, 07:59:55
Guten Morgen Harald, könntest du mir helfen wie ich folgendes löse. Ich möchte, wenn ich im Eingabeformular auf den Button "Datensatz duplizieren" drücke die Meldung "Datensatz wurde erfolgreich dupliziert" erhalten. Ist dies möglich? Wenn ja wie setze ich dies um. Ich hätte wenn nötig als Anschauungshilfe eine Datenbank angehängt. Vielen Dank schon vorab.
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: MzKlMu am Mai 14, 2014, 09:06:40
Hallo,
das Datenmodell der DB ist eine mittlere Katastrophe.  ;D ;D
Die vielen Ja/Nein Felder in der Tabelle "tbl_Prüfprotokoll" sind für eine Datenbank im Grunde unbrauchbar. Ebenso falsch ist die Tabelle für die Geräte. Aufzählungsfelder (mit einer fortlaufenden Zahl hinten) verstoßen bereits gegen die 1.Normalform. Und die 3.Normalform sollte jede DB erreichen.
Bei beiden Tabellen fehlen noch weitere Tabellen zur Herstellung n:m Beziehungen.
Z.B. für die Geräte:

- tblGeräte (die reinen Gerätedaten)
- tblRast (32 Datensätze von Rast1 bis Rast16re, mit eigenem Primärschlüssel)
- tblRastWerte (mit Fremdschlüssel zu Gerät und FS zu Rast)

In ähnlicher Form ist auch die Tabelle für das Prüfprotokoll aufzubauen.
Auf Dauer wirst Du mit dieser DB nicht zufrieden sein, auch wenn es bis jetzt funktioniert.

Die Hinweise zum falschen Datenmodell gab es schon mal, hast Du aber offensichtlich ignoriert.
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Mai 14, 2014, 09:29:34
Hallo - es handelt sich hier nicht um die aktuell verwendete Datenbank - sondern nur um eine uralte Testdatenbank, welche ich aus dem Forum heruntergeladen habe, die den Button duplizieren enthält. Über eine Antwort zu meiner eigentlichen Frage würde ich mich freuen.
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: DF6GL am Mai 14, 2014, 09:39:10
Hallo,

Msgbox "Datensatz wurde erfolgreich dupliziert"

wo ist da das Problem...(bzgl. dieser Frage) ?
Titel: Re: DoCmd.OutputTo - 2 Optionen
Beitrag von: kingwambi am Mai 14, 2014, 09:55:42
Hallo - sorry ich kannte es eben noch nicht, darum die Frage. Wo ich es einfüge ist egal? - so funktionierts - passts aber auch an der stelle wo ich es gesetzt habe?

Private Sub Befehl166_Click()
On Error GoTo Err_Befehl166_Click


    DoCmd.RunCommand acCmdSelectRecord
    DoCmd.RunCommand acCmdCopy
    DoCmd.RunCommand acCmdRecordsGoToNew
    DoCmd.RunCommand acCmdSelectRecord
    DoCmd.RunCommand acCmdPaste
    MsgBox "Datensatz erfolgreich dupliziert"

Exit_Befehl166_Click:
    Exit Sub

Err_Befehl166_Click:
    MsgBox Err.Description
    Resume Exit_Befehl166_Click
   
End Sub