Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Laufende Nummer

Begonnen von pampel, März 14, 2016, 08:55:29

⏪ vorheriges - nächstes ⏩

pampel

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

DF6GL

Hallo,

die Funktion muss im Klassenmodul des Formulars stehen, in dem sie verwendet wird.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

OT
#3
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.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

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...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

pampel

Danke - klappt.


Gruß,

Stefan