Hallo zusammen,
in einer DB habe ich eine Abfrage, die Daten aus drei Tabellen verküpft. Alle haben ein eindeutiges Autowert-Schlüsselfeld.
Nun möchte ich gerne in dem Formular, das die Datensätze der Abfrage ausgibt, eine laufende Nummer vor den Datensätzen ausgeben.
Unter http://www.donkarl.com/?FAQ3.11 habe ich einen ersten Ansatz gefunden, diese bezieht sich aber auf nur eine Tabelle, ich habe aber drei.
Das Problem: die Datensätze, die mit der laufenden Nunmmer versehen werden sollen, sind in einem "Unter-Unterformular" mit folgendem '(schamatischen) Aufbau (hoffe, es wird klar, wie ich das meine)
Formular_1
...|
...|Register_1
...|Register_2
.......|
.......|Formular_2
...........|
...........|Unterformular mit den Datensätzen, diemit lfd. Nr. versehen werden sollen
...|Register_3
...|Register_4
...|Register_5
Formular_1 und Formular_2 stehen in keinem datentechnischen Zusammenhang, Formular_2 und das Unterformular haben eine 1:n-Beziehung.
http://www.donkarl.com/?FAQ4.39 zeigt einen Weg auf, wie man das mit der AbsolutePosition-Eigenschaft des DAO-Recordsets bewerkstelligen kann. Allerdings gibt es bei der Verwendung einen Laufzeitfehler:
"Fehler beim Kompilieren: Unzulässige Verwendung des Schlüsselworts Me"
in der Zeile
Me.RecordsetClone.Bookmark = Me.Bookmark
Die Funktion FctNr() habe ich im Module-Ordner des VBA-Projekts gespeichert.
Woran kann das liegen?
Danke für Hinweise.
Gruß,
Stefan
Hallo,
die Funktion muss im Klassenmodul des Formulars stehen, in dem sie verwendet wird.
Oder Du übergibst eine Formular-Referenz an die Function, die Du dann auch für andere Formulare verwenden kannst.
In der Function einen Parameter einfügen: ByRef frm as Form
Dann in der Function "Me." durch "frm." ersetzen
Referenz in deinem Fall: Forms!Formular1!UFoControl1.Form!Formular2!UFoControl.Form. Je nach dem von wo (F1, F2, UFo) die Function aufgerufen wird kann man den Ausdruck wahrscheinlich auch verkürzen
hth
gruss ekkehard
Hallo,
@Beaker s.a.
etwas OT und bzgl. http://www.ms-office-forum.net/forum/showthread.php?t=331102
Vorschlag als Einzeiler ;)
Public Function KWausDatum( _
ByVal XDatum As Variant) As Long
'habe leider vergessen bei wem ich die abgeschrieben habe
'''' Dim X As Long
'''' Dim Y As Long
'''' Dim z As Long
''''''' If IsNull(XDatum) Then XDatum = Date
''''''X = Year(XDatum)
''''''Y = Month(XDatum)
''''''z = DatePart("ww", XDatum, vbMonday, vbFirstFourDays)
'''''If Y = 12 And z < 40 Then X = X + 1
'''''If Y = 1 And z > 10 Then X = X - 1
''''''KWausDatum = Val(Right("00" & z, 2))
'''''#' & "\" & Right("0000" & X, 4)
KWausDatum = DatePart("ww", nz(XDatum,Date) , vbMonday, vbFirstFourDays)
End Function
Und zusätzlich auf die korrekten Datentypen in der zugrundeliegenden Abfrage geachtet werden muss.
Hallo Franz,
Danke, aber soweit waren wir im zitierten Forum auch schon.
Hat aber leider keine Änderung gebracht.
Wegen Datentypen sollte alles ok sein; - das relevante Feld ist vom Typ Date. Werde morgen aber Mal versuchen die Function von Rückgabe als Integer auf Variant umzustellen. Lt. OH gibt DatePart einen Variant zurück.
gruss ekkehard
Hallo,
will hier das Thema nicht weiter führen...
Noch noch dies:
--Umstellen auf Variant bringt m. M. nichts....
-- Setze die Funktion in die Select-Liste des SQL-Strings ein (als zusätzliches Feld), entferne sie aus dem Kriterium und führe die Abfrage aus. Kontrolliere dann, ob bei jedem DS eine korrekte KW angezeigt wird.
-- Möglicherweise gibt es gar keinen DS mit Kombination aus Jahr 2015 und KW 53 ....
-- Der SQL-String der verwendeten Abfrage ist (mir) unbekannt.
Das soll es aber jetzt hier genug sein...
Hallo Franz,
Zitatwill hier das Thema nicht weiter führen...
Das soll es aber jetzt hier genug sein...
Will es aber trotzdem nicht unbeantwortet lassen. Vielleicht ist die Forenleitung ja so nett und verschiebt unser OT in einen neuen Thread.
Zitat--Umstellen auf Variant bringt m. M. nichts....
Stimmt, habe ich probiert.
Zitat-- Setze die Funktion in die Select-Liste des SQL-Strings ein (als zusätzliches Feld), entferne sie aus dem Kriterium und führe die Abfrage aus. Kontrolliere dann, ob bei jedem DS eine korrekte KW angezeigt wird.
Habe ich auch schon probiert, - keine Änderung.
Zitat-- Möglicherweise gibt es gar keinen DS mit Kombination aus Jahr 2015 und KW 53 ....
Das spielt keine Rolle, wenn die DS-Gruppe leer ist bleibt eben auch das UFo leer.
Zitat-- Der SQL-String der verwendeten Abfrage ist (mir) unbekannt.
Steht im anderen Forum, jetzt allerdings ergänzt um das neue Feld KW.
Danke für deine Bemühungen.
gruss ekkehard
Danke - klappt.
Gruß,
Stefan