Hallo zusammen,
ich bräucht mal wieder Eure Hilfe.
Ich möchte per Knopfdruck aus einem Formular heraus einen Bericht ausdrucken. Per WhereCondition filtert der mir den Bericht mit der richtigen Bestellnummer. Jetzt kann es aber schon mal vorkommen, dass ich zwei Datensätze mit der gleichen Bestellnummer habe. Genau dann, wenn es bei einer Bestellung zwei Liefertermine gibt.
Nun soll also in der WhereCondition auch noch nach dem richtigen Liefertermin geguckt werden. Bisher sieht das ganze so aus:
Private Sub Laufkarte_Click()
Me.Refresh
DoCmd.OpenReport "Laufkarte", acViewPreview, , _
"[HSP-Bestnr]='" & Me![HSP-Bestnr] & "'"
RunCommand acCmdPrint
End Sub
Den Code hab ich von Google und ich versteh den leider nicht richtig, da ich VBA bisher nur durch learning by doing und Google gelernt habe. Daher weiß ich garnicht, wieso der mir jetzt den Bericht mit der richtigen Bestellnummer ausspuckt, wenn da steht "[HSP-Bestnr]='" & Me![HSP-Bestnr] & "'". Habe mir also durch Google versucht zu helfen und folgendes probiert:
Private Sub Laufkarte_Click()
Me.Refresh
DoCmd.OpenReport "Laufkarte", acViewPreview, , _
"[HSP-Bestnr]='" & Me![HSP-Bestnr] & "'" & " AND [HSP-LT]='" & Me![HSP-LT] & "'"
RunCommand acCmdPrint
End Sub
Allerdings gibts dann eine Fehlermeldung. Weiß jm, wie es richtig geht? Oder kann mir vielleicht sogar jemand erklären, was VBA da genau macht? :)
Vielen Dank im Voraus!
Gruß,
Markus
Hallo,
Text muss immer in ' stehen und Datum in #
AND [HSP-LT]=#" & Me![HSP-LT] & "#"
Gruß
Johann
Hallo Johann,
erstmal vielen Dank für die Antwort. Leider funktioniert das aber auch nicht. Bekomme jetzt beim Ausführen einen Laufzeitfehler angezeigt.
Private Sub Laufkarte_Click()
Me.Refresh
DoCmd.OpenReport "Laufkarte", acViewPreview, , _
"[HSP-Bestnr]='" & Me![HSP-Bestnr] & "'" & " AND [HSP-LT]=#" & Me![HSP-LT] & "#"
RunCommand acCmdPrint
End Sub
Hallo,
welcher Laufzeitfehler?
Ist die HSP-Bestnr ein Textfeld oder ein Zahlenfeld? Beim Zahlenfeld müssen die ' weg.
Ps: Benutze niemals Sonderzeichen im Namen wie das - bei HSP-Bestnr.
Gruß
Johann
Hallo,
HSP-Bestnr ist ein Textfeld und HSP-LT ist selbstverständlich ein Datumsfeld. Den Code, wie ich ihn am Anfang hatte, also nur mit der HSP-Bestnr, hat ja auch wunderbar funktioniert.
Gruß, Markus
Hallo,
Sonder- und Leerzeichen zu vermeiden solltest Du ernst nehmen...
Es muss nicht nur ein Datumsausdruck in "#" stehen, sondern der Datumsausdruck muss in SQL entweder das USA- oder das ISO-Format aufweisen:
Private Sub Laufkarte_Click()
Me.Dirty=false
DoCmd.OpenReport "Laufkarte", acViewPreview, , _
"[HSP-Bestnr]='" & Me![HSP-Bestnr] & "' AND [HSP-LT]= " & Format(Me![HSP-LT], "\#yyyy-mm-dd\#")
RunCommand acCmdPrint
End Sub
Guten Morgen,
ja...ich würde das ja gerne ernst nehmen. Ist ja nicht so, als würde ich das absichtlich machen.
Problem ist nur, ich habe diese Datenbank vor gut 4 Jahren erstellt. Damals hatte ich null Ahnung von Access und VBA. Mittlerweile hat die Datenbank ca. 4000 Datensätze mit jeweils ca. 100 Spalten. Dazu einige Formulare, Abfragen und Berichte. Wenn ich jetzt Bezeichnungen verändere, muss ich die in allen Abfragen, Formularen etc. ändern.
Auf euren Rat hin, habe ich am Freitag noch HSP-Bestnr und HSP-LT in HSPBestnr und HSPLT geändert. Logischerweise wurde ich dann nach Werten dafür gefragt, als ich das Hauptformular geöffnet habe. Ich habe dann in allen Abfragen, Berichten und Formularen die Bezeichnungen angepasst und........er fragt mich trotzdem noch nach Werten für diese Felder. Keine Ahnung ob ich irgendwo was vergessen habe, aber eigentlich habe ich alle Felder 10mal durchgeschaut. Jetzt weiß ich auch nicht mehr weiter :(
Das ist komisch...ich habe den Datenbankdokumentierer über die komplette Datenbank laufen lassen, das ganze in eine Textdatei exportiert und nach HSP-LT gesucht. Es gibt keine Suchergebnisse und trotzdem fragt er mich jedes mal nach einem Wert für HSP-LT.
Hat jemand eine Rat für mich? ???
Hallo,
die Hinweise auf die Namensgebung war ja nur ein Hinweis. Unter den geschilederten Bedingungen wäre es besser gewesen, die Namen zu lassen. Irgentwo hast Du jetzt noch einen alten Namen. Z.B. Sortierungen, berechnete Felder in Abfragen/Formularen etc.
Wenn nichts hilft, nimm wieder die alten Namen. Die waren ja nicht Ursache für Dein Problem.
Zum Fehler:
Ich bin kein Freund der Datumsformatierungen, wenn man das Datum in eine Zahl umwandelt. lässt sich prima vergleichen.
Versuche es mal so:
Private Sub Laufkarte_Click()
Me.Dirty=false
DoCmd.OpenReport "Laufkarte", acViewPreview, , _
"[HSP-Bestnr]='" & Me![HSP-Bestnr] & "' AND [HSP-LT]= " & Int(Me![HSP-LT]))
RunCommand acCmdPrint
End Sub
Hallo!
[OT]
ZitatIch bin kein Freund der Datumsformatierungen, wenn man das Datum in eine Zahl umwandelt. lässt sich prima vergleichen.
Ich halte das Verwenden von Datumswerten als Zahl eher für Murks. ;)
Grund: Es hängt vom DBMS ab, welche Zahl welches Datum repäsentiert. Wenn du mit einer Zahl (welche per Access aus einem Datum erzeugt worden ist) eine Filterung auf eine ODBC-verknüpfte Tabelle vom MSSQL-Server durchführst, wirst du "falsche" Ergebnisse bekommen, da der MSSQL-Server mit einem anderen Datum bei 0 beginnt, als Access/Jet.
Formatiert man ein Datum ordentlich nach einem Datumsformat, ist dieses Problem beseitigt.
Außerdem ist es kein Mehraufwand, ob man ein Datum in eine Zahl konvertiert und diese Zahl für die SQL-Anweisung anpasst oder ob man gleich ein Datumsformat einstellt.
Man macht sich einmal eine Hilfsporzedur die aus einem Datum einen SQL-fähigen Text im passenden Format erstellt und muss sich später nicht mehr um die Formatierung kümmern.
Prinzip
statt
"[HSP-Bestnr]='" & Me![HSP-Bestnr] & "' AND [HSP-LT]= " & Int(Me![HSP-LT]))schreibt man dann:
"[HSP-Bestnr]=" & SqlTextFormat(Me![HSP-Bestnr]) & " AND [HSP-LT]= " & SqlDateFormat(Me![HSP-LT]))Anm.: SqlTextFormat oder ähnliches (Replace(Text, "'", "''")) würde ich auch immer zur Sicherheit einbauen, da ein Text eventuell (in diesem Fall vermutlich nicht) auch die '-Zeichen enthalten könnte.
Daher: gleich "richtig" machen, um später (bei einem möglichen Umstieg auf ein anderes DBMS) nicht unnötig auf Fehlersuche gehen zu müssen.
mfg
Josef
Hallo,
na wenn Josef das sagt, muss ich wohl umdenken.
Ich gebe hier ja auch Hinweise aus anderen Beiträgen weiter, die man im Laufe der Zeit so liest. Was ja nicht zwangsläufig richtig sein muss, zugegeben.
Ich habe mich an DonKarl (FAQ 6.8 ) orientiert, was aber auch nicht richtig sein muss.
Aber wie gesagt, wenn es Josef sagt ....
Ihm lasse ich auch den Murks durchgehen. ;D ;D
[OT]
Hallo!
Ich geb nur die Erfahrung meiner eigenen Problemsuche weiter, mit der ich selbst viel Zeit vergeudete, da ich auch einmal der Meinung war, dass eine Zahl als Datum viel praktischer ist. ;)
Ähnliches gilt übrigens auch bei -1/0 statt True/False als Filterwert für Ja/Nein-Felder. 0 funktioniert noch, bei -1 erhält man im MSSQL-Server kein Ergebnis, wenn man das auf Bit-Felder anwendet, da dort 1 als True gilt. Schreibt man allerdings in der SQL-Anweisung True statt -1, wird es richtig übersetzt.
ZitatIhm lasse ich auch den Murks durchgehen.
Puh! .. da hatte ich jetzt aber noch einmal Glück. :)
mfg
Josef