Access-o-Mania

Access-Forum (Deutsch/German) => Access-Hilfe => Thema gestartet von: macrodiverm am September 12, 2010, 16:25:35

Titel: Zahlenfeld addieren
Beitrag von: macrodiverm am September 12, 2010, 16:25:35
Hallo, ich habe bei meiner Datenbank ein Problem. Für einen Honorarausdruck benötige ich eine fortlaufende Nummer. Nun habe ich eine Tabelle erstellt mit nur einem Zahlenfeld. Dieses Feld soll immer, vor dem Aufruf des Honorars, um 1 addiert werden. Ich dachte, es könnte mit einem Makro funktionieren aber kann leider keinen geeigneten Befehl dafür finden. Kann mir dabei jemand helfen? Ich möchte aber keinen Autowert der sich immer automatisch um eines erhöht, da ich da ja immer einen neuen Datensatz schreiben muss. Wäre sicherlich auch mit einem Makro zu bewältigen aber meine erste "Vision" wäre mir lieber.
Also das Makro sollte folgendes tun: Tabelle öffnen, Feld um 1 addieren, Tabelle wieder schließen.
Also ganz einfach, wenn man es kann....

BITTE um RASCHE HILFE!!! DANKE!!!
Titel: Re: Zahlenfeld addieren
Beitrag von: macrodiverm am September 12, 2010, 16:28:53
ach ja, der aktuelle - neue - Wert sollte natürlich gespeichert werden um beim nächsten Aufruf die nächst höhere Zahl zu erhalten ...
Titel: Re: Zahlenfeld addieren
Beitrag von: macrodiverm am September 12, 2010, 16:55:25
Nun habe ich noch ein kleines Problem. Ich benötige für den Honorarausdruck aus einem Datumsfeld nur das Monat und das Jahr, wobei das Monat ausgeschrieben werden soll. Diesen Befehl würde ich in einem Bericht einbauen. Bitte um Hilfe! Danke!
Titel: Re: Zahlenfeld addieren
Beitrag von: DF6GL am September 12, 2010, 17:06:17
HAllo,



zu Wert um 1 erhöhen:

bleib beim Autowert, da ja genau dieses:  "der aktuelle - neue - Wert sollte natürlich gespeichert werden um beim nächsten Aufruf die nächst höhere Zahl zu erhalten ..."   so passiert.

Vergiss Makros...

Zum Datum im Bericht:

Erstelle ein Textfeld , das an das Datumsfeld gebunden is und dessen Eigenschaft "Format"  so eingestellt ist:

mmmm jjjj 
Titel: Re: Zahlenfeld addieren
Beitrag von: database am September 12, 2010, 17:32:05
Hallo,

wenn die fortlaufende Nummer am Bericht (der Honorarnote) erscheint solltest du besser den Zahlenwert aus der Tabelle lesen und um 1 erhöhen.
Beim Autowert ergibt sich das Problem mit der unterbrochenen Reihenfolge wenn ein DS gelöscht wird.

Mit untenstehender kleinen Funktion in einem Standardmodul KÖNNTEST du das Hochzählen bewerkstelligen


Public Function Hochzaehlen() As Long
    dim nummer as Long
    'Fortlaufende Nummer erzeugen
    If DCount("DeinZahlenfeld", "DeineTabelle") = 0 Then
       nummer= 1
    Else
       nummer= DMax("DeinZahlenfeld", "DeineTabelle") + 1
    End If

    'Fortlaufgende Nummer in der Tabelle speichern
    DoCmd.RunSQL ("INSERT INTO DeineTabelle(DeinZahlenfeld)Values(" & nummer & ")")  
    'Rückgabe
    Hochzaehlen = nummer
End Function


Aufrufen:

Dim lfdNummer as long
lfdNummer = Hochzaehlen

Alles natürlich noch ohne Fehlerbehandlung!

HTH
Peter
Titel: Re: Zahlenfeld addieren
Beitrag von: macrodiverm am September 12, 2010, 20:41:06
Hallo Peter!

vorerst herzlichen dank für deine hilfe. sieht ganz toll aus. da ich meine db nur im entwurfsmodus schreibe, kann ich mit diesen zeilen leider nichts anfangen. wie kann ich diese einbauen??? in einem makro? oder im quellcode der datenbank? schreibe leider keinen quellcode und daher mein "nichtwissen". wäre toll, wenn du mir wieder helfen könntest. DANKE
Titel: Re: Zahlenfeld addieren
Beitrag von: macrodiverm am September 12, 2010, 20:53:23
@ DF6GL:

Danke für die Hilfe für das Datum! Funktioniert einwandfrei!!! SUPER!! Dachte ich mir doch gleich, kann nur eine einfache Lösung sein. Habe viele kompl. Sachen probiert - ging aber nix!! haha!! Danke nochmal. Das mit dem Autowert gefällt mir nicht so, da ich ja dann immer einen neuen Datensatz schreiben muss, was ich eigentlich nicht will. soll ein Datensatz sein mit eben dem einen feld!
Titel: Re: Zahlenfeld addieren
Beitrag von: database am September 12, 2010, 21:03:57
Hallo,

wenn du mir verrätst, mit welcher Version von Access du das bewerkstelligen willst, erstelle ich dir ein kleines Beispiel.

Grüße
Titel: Re: Zahlenfeld addieren
Beitrag von: macrodiverm am September 12, 2010, 21:34:19
access 2007

habe das modul geschrieben und in meiner db gespeichert. wie kann ich aber nun das modul aufrufen - mit einem makro? habe die befehle in den makros gesucht - kann hier kein "öffnenmodul" finden?!?!?

wäre super wenn du mir da weiterhelfen könntest. danke
Titel: Re: Zahlenfeld addieren
Beitrag von: database am September 13, 2010, 08:18:29
Hallo,

es gibt einen Makrobefehl dazu ...  'AusführenCode'

Makros sind grauslich!  ;D

Beispiel mit VBA folgt am Abend!
Beispiel ist im Anhang zu finden.

Das frmEingabe erzeugt beim Laden einen neuen Datensatz.
Es gibt ein Feld in dem du das Datum erfassen kannst - angezeigt wird Monat und Jahr.
Es gibt ein Kombifeld, aus dem kannst du einen Artikel auswählen.
Klickst du auf den Button wirst du gefragt ob du die Honorarnote erstellen wisst - JA, dann wird die Nummer erzeugt und im Formular angezeigt.
Eine weitere Frage ... möchtest du die Honorarnote anzeigen - JA öffnet den Bericht rptHonorar.

Alles gaaaaanz einfach aufgebaut - dient ausschließlich der Demonstration

HTH

Peter

Grüße
Peter



[Anhang gelöscht durch Administrator]
Titel: Re: Zahlenfeld addieren
Beitrag von: macrodiverm am September 14, 2010, 08:39:09
hallo Peter!

Danke für deine Antwort. Nur, den Anhang kann ich nicht finden??? Also, nur kurz zu meiner DB. Ich rufe über ein Steuerelement einen Bericht auf. Dieser Bericht ist bereits fertig und in diesem Bericht möchte ua die Honorarnummer entnehmen. Also müsste ich in Zukunft ein Makro bzw. Modul aufrufen, dass zuerst die Nummer um 1 erhöht und dann den Bericht aufruft. So sollte es aussehen. Eine Frage ob nun eine neue Nummer vergeben werden soll ist nicht unbedingt erforderlich. Nun wäre es für mich wichtig, wie ich dann dieses Modul aufrufen kann. Ach ja, wie kann ich das Modul aus einen Makro aufrufen? Mit "AusführenCode"? Hab ich versucht, kann hier aber dann keinen weiteren Befehl finden, dass ich das Modul aufrufen kann. Bin ein Laie ... Dein Modul ...
Public Function Hochzaehlen() As Long    dim nummer as Long    'Fortlaufende Nummer erzeugen    If DCount("DeinZahlenfeld", "DeineTabelle") = 0 Then        nummer= 1    Else        nummer= DMax("DeinZahlenfeld", "DeineTabelle") + 1    End If    'Fortlaufgende Nummer in der Tabelle speichern    DoCmd.RunSQL ("INSERT INTO DeineTabelle(DeinZahlenfeld)Values(" & nummer & ")")      'Rückgabe     Hochzaehlen = nummerEnd Function
... sieht super aus und das möchte ich probieren!!! Habe das Modul geschrieben, in meiner DB gespeichert und möchte es eben nun aufrufen ... aber wie?? haha???
Wäre super wenn du mir da wieder weiterhelfen könntest.
DANKE!!!
Hans Peter
Titel: Re: Zahlenfeld addieren
Beitrag von: database am September 14, 2010, 08:42:42
Hallo,
das angefügte Beispiel siehst du unter meinem Beitrag, wenn du angemeldet bist!

siehe Bild im Anhang !

[Anhang gelöscht durch Administrator]
Titel: Re: Zahlenfeld addieren
Beitrag von: macrodiverm am September 15, 2010, 14:52:29
hi peter,

also dein beispiel funktioniert nicht ganz. es wird zwar die zahl addiert, aber leider in einem neuen datensatz. d.h. es wird immer ein neuer datensatz erstellt, das was ich eben nicht möchte. wäre super wenn du das lösen könntest.
habe dann noch eine frage zum aufruf... das aber dann am abend, da ich jetzt schnell fort muss.

danke aber nochmals
Titel: Re: Zahlenfeld addieren
Beitrag von: database am September 15, 2010, 20:49:14
Hallo,

es ist ein Unterschied ob etwas nicht funktioniert oder ob es nicht den Vorstellungen entspricht - von der Warte aus gesehen funktioniert mein Beispiel sehr gut :)

Ich habe dir jetzt eine neue Lösung erstellt - in 2 möglichen Varianten.
Wenn du nämlich in der Nummerntabelle keine neuen Datensätze haben willst, dann brauchst du ja die ganze Tabelle nicht!
Du kannst die letzte (höchste) Nummer ja auch aus der Tabelle 'tblHonorare' herauslesen, diese um 1 erhöhen und dann mit dem neuen Honorardatensatz in die Tabelle schreiben.
Dieses ist die Variante 2

Bei der Variante 1 habe ich jetzt die Lösung so angelegt, dass der allererste Honorardatensatz einen Eintrag in der Tabelle 'tblNummern' veranlasst, jeder weitere Honorardatensatz löst lediglich ein Update auf die Nummer aus, wobei diese um 1 erhöht wird.

Wie aber schon erwähnt brauchst du die Tabelle 'tblNummern' nicht wenn es ausschließlich darum geht, die Honorardatensätze zu nummerieren!
Beide Beispiele findest du im Anhang.

Hoffe nun haben wir alle Belange für's Erste abgedeckt ?  ;D

Grüße
Peter

[Anhang gelöscht durch Administrator]
Titel: Re: Zahlenfeld addieren
Beitrag von: macrodiverm am September 16, 2010, 13:28:21
hallo Peter,

vorerst vielen dank für dein bemühen.

werde im laufe des tages deine vorschläge probieren. hoffentlich klappen sie dann in meiner db.

aber nun noch etwas anderes.

bei läuft das derzeit so ab.
ich rufe mit einem "schaltfläche" einen bericht (die honorarnote) auf. in diesem bericht werden eben ua die honrarnummer geschrieben und div. datensätze werden addiert für das honorar.

so, nun, mit deiner hilfe, sollte es ungefähr so aussehen.
aufruf des moduls mit - vermutlich - einer "schaltfläche" welche die honorarnummer um eines addiert und zurückspeichert. dann sollte das modul meinen oa bericht aufrufen. das wärs. klingt einfach, ist einfach, aber für mich zu schwer - haha.
ich werde es heute versuchen zu lösen, denke aber, ich werde es nicht schaffen. na mal sehen.
aber vielleicht könntest du mir dabei helfen.

zur info für dieses modul:
tabellenname: fortlaufendeNummer
feld:                 fortlnr
berichtname:   klientenstamm bericht - honorarnote

also würde es so benötigen, dass ich eben auf eine "schaltfläche" drücke und im endefekt für dann der bericht aufgerufen werden. der bericht benötigt die abfrage "klientenstamm bericht - honorarnote".

so, hoffe du verstehst das?? haha

danke nochmals für deine hilfe, werde mich dann auch irgendwie erkenntlich zeigen!!?? wenn möglich??? wohne nähe wiener neustadt!

hans peter
Titel: Re: Zahlenfeld addieren
Beitrag von: database am September 16, 2010, 15:02:00
Hallo,

ich bau dir das in das Beispiel mit deinen Namen und Bezeichnungen ein - am Abend...

Erkenntlich zeigen brauchst du dich nicht, hier kostet die Hilfe und / oder Tipps nichts!
Wenn du was Gutes tun willst, überweise ein paar Euro ans St. Anna Kinderspital.  ;)
Titel: Re: Zahlenfeld addieren
Beitrag von: database am September 16, 2010, 19:15:28
Hallo Hans Peter,

im Anhang findest du die geänderte Version1 mit deinem Tabellennamen, deinem Feldnamen und deinem Berichtsnamen.

Meinen Vorschlag auf die Zähltabelle zu verzichten bist du leider nicht eingegangen  :-\
Im Sinne einer vernünftigen und auch RICHTIGEN Datenhaltung wäre das aber dringend anzuraten.

Die entsprechenden Codes kopierst du dann aus meinem Beispiel in dein Formular bzw. das Modul aus meinem Beispiel in deine Datenbank.
Sollte alles laufen - zumindest hätte es bei mir schon mal geklappt.  ;D

HTH

Peter

[Anhang gelöscht durch Administrator]
Titel: Re: Zahlenfeld addieren
Beitrag von: macrodiverm am September 19, 2010, 00:20:25
Hallo Peter!

Also, SUPER, Version 1 funktioniert einwandfrei!!!!

Aber nun habe ich eben das Problem wie vorher beschrieben. Eben den Aufruf dieses Moduls und den Aufruf des Berichtes.

Danke nochmals und ich hoffe bald von dir wieder lesen zu können.

Hans Peter
Titel: Re: Zahlenfeld addieren
Beitrag von: database am September 19, 2010, 09:00:08
Guten Morgen,

ZitatAber nun habe ich eben das Problem wie vorher beschrieben. Eben den Aufruf dieses Moduls und den Aufruf des Berichtes.

...verstehe ich nicht ganz, da ja auch dieses in meinem Beispiel gelöst ist.
Du brauchst lediglich einen Button in dem Formular erstellen, von dem aus du den Bericht aufrufen möchtest bzw. in dem du die Honorarnote erstellst.
Im Ereignis 'Beim Klicken' (Im Formularentwurf, Eigenschaften des Button, Ereignisse) wählst du im Dropdown des Ereignisses den Eintrag [Ereignisprozedur] und klickst auf die drei Punkte.
Der VB-Editor öffnet sich und du befindest dich in der Prozedur    NameDeinesButton_Cklick()
Und hierhin kopierst du diesen Code:


Dim HNummer As Long

    If IsNull(Me.txtNummer) Then    'Wenn die Honorarnote schon erstellt wurde ...

        If MsgBox("Möchten Sie die Honorarnote erstellen?", vbYesNo, "Honorarnote") = vbYes Then
            HNummer = Hochzaehlen   'Variante 1 - Nummer erzeugen und in die Tabelle eintragen
            Me.txtNummer = HNummer  'Nummer am Formular anzeigen
            If MsgBox("die Honorarnote wurde erstellt." & vbCrLf & _
                          "Möchten Sie die Honorarnote anzeigen?", vbYesNo, "Honorarnote") = vbYes Then
                'Die Dateneingabe aktualisieren
                DoCmd.Requery ""
                DoCmd.GoToRecord , , acLast
                'Den Bericht mit der neuen Nummer öffnen
                DoCmd.OpenReport "klientenstamm bericht-honorarnote", acViewPreview, , "[HonoNummer]=" & Me.txtNummer
            End If
        End If
    Else
        '...den Bericht mit der aktuellen Nummer öffnen
        DoCmd.OpenReport "klientenstamm bericht-honorarnote", acViewPreview, , "[HonoNummer]=" & Me.txtNummer
    End If


Vorausgesetzt ist natürlich dass DEIN Feld mit der Nummer so wie im Code ---  txtNummer --- heißt.
Wenn dieses einen anderen Namen hat, musst den halt im Code auf den Namen ändern, den du verwendest.

Das sollte doch kein Problem darstellen - und wenn doch dann lasse es mich wissen.   ;)

Grüße

Peter
Titel: Re: Zahlenfeld addieren
Beitrag von: macrodiverm am September 21, 2010, 13:49:52
hallo peter, super, werde das am abend gleich mal probieren .... danke nochmals! werde mich nach dem versuch wieder melden! ... ist eine gute idee mit dem st. anna kinderspital!! werde ich machen!

lg
hans peter
Titel: Re: Zahlenfeld addieren
Beitrag von: macrodiverm am September 21, 2010, 22:12:34
SUPER!!

Es funktioniert!!! Herzlichen Dank!!!

Habe deinen Code etwas an meine DB angepasst und nun läuft es genau so wie ich es mir vorgestellt habe. Schaltfläche drücken, Nummer wird um 1 addiert, Bericht wird aufgerufen!!!! SEHR GUT!!!

Kenne mich zwar bei dem Code nicht ganz aus, habe ihn etwas abgeändert und es funktioniert und das ist toll!!

Danke nochmals!!!

Sollte wieder etwas sein, dann werde ich mich an dich wenden - haha!!! Wennst erlaubst?!?!

Also .... lg
Hans Peter