Supportnet / Forum / Datenbanken
GoTo Anweisung ! Was ist falsch?
Frage
Hallo,
ich suche jetzt schon ne zeitlang nach einem Fehler in einer GoTo Anweisung in VB.
Hier mal der Code
[code]
Private Sub Form_Load()
With Me
.Caption = "Buchung hinzufügen - Kasse"
End With
DoCmd.Maximize
Dim antw%
If Day(Date) = 1 Then GoTo Marke1
Else: GoTo Marke2
Marke1: antw = msgboX("Möchten Sie den voherigen Monat abschliessen", vbYesNo, "Vorigen Monat sperren?")
If antw = vbYes Then DoCmd.RunSQL "Update [Buchungen_Kasse] Set Status=1 Where status = 0"
If antw = vbYes Then msgboX "Voriger Monat wurde abgeschlossen", vbInformation, "Gesperrt!"
If antw = vbNo Then msgboX "Sie werden erneut dazu aufgefordert zu sperren", vbInformation, " "
GoTo Marke3
Marke2:
End Sub
[/code]
Er soll, sofern der 1 eines Monats eingetreten ist zur Sprungmarke1 (Marke1) springen und die dortigen IF Anweisungen ausführen.
Danach soll er zur Sprungmarke 2 (Marke2) springen und somit die Marke2 ausser acht lassen.
Wenn jetzt zB nicht der 1. eines Monats ist und das Formular wird geöffnet, soll er praktisch alles überspringen also zur Marke2 gehen.
Wenn jetzt an einem ersten tag eines Monats auf die MSGBOX mit der Frage "Möchten Sie den voherigen Monat abschliessen?" mit VBno geantwortet wird. Soll er am 2. usw erneut nachfragen.
Wie kann man das realisieren und warum führt er beim starten des Formulars die IF Anweisungen nicht aus (es passiert nichts, nur das Formular öffnet sich)
noch ein Problem :-)
[code]
[code]
Private Sub Form_Load()
With Me
.Caption = "Buchung hinzufügen - Kasse"
End With
DoCmd.Maximize
....
....
[/code]
Das ist das selbe Formular und sobald die IF Anweisungen mit drin stehen, öffne er das fenster nicht mehr maximiert und nennt es auch nicht mehr um.. Woran kann das wiederrum liegen=?
Vielen Dank schonmal
Christian
Antwort 1 von Pegel
Hey!
Also ich will dir ja nix böses, aber goto ist immer falsch!!!!
So was nimmt man einfach nicht!
Da wird der code total unübersichtlich!
Wenn überhaupt, dann goto error.
Aber das ist schon das höchste der Gefühle! Machs mit if - else if - else
MfG Pegel
Also ich will dir ja nix böses, aber goto ist immer falsch!!!!
So was nimmt man einfach nicht!
Da wird der code total unübersichtlich!
Wenn überhaupt, dann goto error.
Aber das ist schon das höchste der Gefühle! Machs mit if - else if - else
MfG Pegel
Antwort 2 von Teddy7
Hallo Christian !
Nur so auf Verdacht:
If Day(Date) = 1 Then GoTo Marke1
Else: GoTo Marke2
Ich würde keine Marke namens Else: verwenden, weil else ein reserviertes Wort ist.
If Day(Date) = 1 Then GoTo Marke1
GoTo Marke2
reicht auch.
Im Übrigen fehlt die Marke3.
Möglich, daß deshalb (auch wegen dem else) Compilationsfehler auftreten und die Befehle deshalb nicht ausgeführt werden.
Wenn Du´s gar nicht hinkriegst kannst Du mir den Teil der Datenbank mal zumailen - mit dem debugger sollte man den Fehler auf jeden Fall finden.
Gruß
Teddy
Nur so auf Verdacht:
If Day(Date) = 1 Then GoTo Marke1
Else: GoTo Marke2
Ich würde keine Marke namens Else: verwenden, weil else ein reserviertes Wort ist.
If Day(Date) = 1 Then GoTo Marke1
GoTo Marke2
reicht auch.
Im Übrigen fehlt die Marke3.
Möglich, daß deshalb (auch wegen dem else) Compilationsfehler auftreten und die Befehle deshalb nicht ausgeführt werden.
Wenn Du´s gar nicht hinkriegst kannst Du mir den Teil der Datenbank mal zumailen - mit dem debugger sollte man den Fehler auf jeden Fall finden.
Gruß
Teddy
Antwort 3 von Roadrunner90
Hallo Christian,
versuch es mal wenn der code bei "form_open" steht, hab ich auch schon erlebt, dass es unterschiedliches verhalten bei "open" und "load" gibt.
Für den Fall, dass am 1. des Monats kein Update gemacht wurde musst du dir einen Merker setzen und die 1. If Abfrage entsprechend erweitern
Gruß Rudolf
versuch es mal wenn der code bei "form_open" steht, hab ich auch schon erlebt, dass es unterschiedliches verhalten bei "open" und "load" gibt.
Für den Fall, dass am 1. des Monats kein Update gemacht wurde musst du dir einen Merker setzen und die 1. If Abfrage entsprechend erweitern
Gruß Rudolf
Antwort 4 von Christian
@ teddy7
das mit dem else macht er automatisch (das mit dem : dahinter)
das mit der marke 3 war ein tip fehler von mir. das soll marke 2 heissen.
@ roadrunner
das mit dem form_open funktioniert leider nicht. sobald ich den code da eintrage, öffnet sich das formular nicht mehr :-)
das ist zwar auch ne lösung aber nicht so die die ich mir vorgestellt hatte *gg*.
und könntest du mir ein beispiel für dei erweiterung der IF Klausel geben?
Vielen Dank
Christian
das mit dem else macht er automatisch (das mit dem : dahinter)
das mit der marke 3 war ein tip fehler von mir. das soll marke 2 heissen.
@ roadrunner
das mit dem form_open funktioniert leider nicht. sobald ich den code da eintrage, öffnet sich das formular nicht mehr :-)
das ist zwar auch ne lösung aber nicht so die die ich mir vorgestellt hatte *gg*.
und könntest du mir ein beispiel für dei erweiterung der IF Klausel geben?
Vielen Dank
Christian
Antwort 5 von Phantom_Fies
Ich verstehe die Vorgehensweise auch nicht so recht. Soll denn unter Marke2 noch was passieren oder nicht?
Sonst schreib doch einfach:
Warum es bei Form_Open Probleme geben soll, verstehe ich auch nicht. Ist das da oben dein einziger Code im Formular?
Wenn nicht, teil uns mal mit, was da sonst noch passiert.
Sonst schreib doch einfach:
If Day(Date) = 1 Then
Code unter Marke1
Else
Exit Sub
End If
Warum es bei Form_Open Probleme geben soll, verstehe ich auch nicht. Ist das da oben dein einziger Code im Formular?
Wenn nicht, teil uns mal mit, was da sonst noch passiert.
Antwort 6 von Christian
Das hier ist der vollständige Code.
Er weicht mittlerweile von dem oberen Code wieder ab, da ich das mit dem Day(Date) rausgenommen habe zu testzwecken.
Soll aber wieder eingefügt werden
hier der code so wie es funktioniert
Es muss also irgendwie an der Funtkion liegen, den Aktuellen Tag auszulesen .
Er weicht mittlerweile von dem oberen Code wieder ab, da ich das mit dem Day(Date) rausgenommen habe zu testzwecken.
Soll aber wieder eingefügt werden
hier der code so wie es funktioniert
Option Compare Database
Private Sub Form_Load()
Dim antw%
Dim abfrage%
DatePart (Date)
'If Day(Date) = 1 Then GoTo Marke1
'GoTo Marke2
abfrage = msgboX("Abfrage für Marken. (Yes)Marke 1 für weiter MSGBOXEN. Marke 2 für ende (NO)", vbYesNo)
If abfrage = vbYes Then GoTo Marke1
If abfrage = vbNo Then GoTo Marke2
Marke1:
antw = msgboX("Möchten Sie den voherigen Monat abschliessen", vbYesNo, "Vorigen Monat sperren?")
If antw = vbYes Then DoCmd.RunSQL "Update [Buchungen_Kasse] Set Status=1 Where status = 0"
If antw = vbYes Then msgboX "Voriger Monat wurde abgeschlossen", vbInformation, "Gesperrt!"
If antw = vbNo Then msgboX "Sie werden erneut dazu aufgefordert zu sperren", vbInformation, " "
GoTo Marke2
Marke2:
End Sub
Private Sub CB_KTO_NR_AfterUpdate()
T_SALDO = DLookup("SUM(BU_VAL)", "Buchungen_Kasse", "KTO_NR = " & CB_KTO_NR.Column(0))
End Sub
Private Sub Form_AfterUpdate()
T_SALDO = ""
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
Select Case BU_VAL
Case Is < 0
If CB_BUCHID.Column(2) = "Einnahme" Then
msgboX "Als Einnahme kann kein negativer Wert eingegeben werden!", 48, "Vorgang buchen"
Cancel = True
' oder alternativ: BU_VAL = BU_VAL * -1
End If
Case Is > 0
If CB_BUCHID.Column(2) = "Ausgabe" Then
If msgboX("Als Ausgabe kann kein negativer Wert eingegeben werden!" & Chr(13) & Chr(13) & "Soll der Wert negativ verbucht werden?", vbYesNo + vbQuestion + vbDefaultButton2, "Vorgang buchen") = vbYes Then
BU_VAL = BU_VAL * -1
Else
Cancel = True
End If
End If
Case 0
Cancel = True
End Select
End Sub
Private Sub Form_Current()
With Me
.Caption = "Buchung hinzufügen - Kasse"
End With
DoCmd.Maximize
On Error Resume Next
If BU_VAL = 0 Then
T_SALDO = ""
Else
T_SALDO = DLookup("SUM(BU_VAL)", "Buchungen_Kasse", "KTO_NR = " & CB_KTO_NR.Column(0))
End If
End Sub
Private Sub Befehl19_Click()
On Error GoTo Err_Befehl19_Click
DoCmd.GoToRecord , , acNewRec
Exit_Befehl19_Click:
Exit Sub
Err_Befehl19_Click:
msgboX Err.Description
Resume Exit_Befehl19_Click
End Sub
Private Sub Befehl20_Click()
On Error GoTo Err_Befehl20_Click
DoCmd.Close
Exit_Befehl20_Click:
Exit Sub
Err_Befehl20_Click:
msgboX Err.Description
Resume Exit_Befehl20_Click
End Sub
Es muss also irgendwie an der Funtkion liegen, den Aktuellen Tag auszulesen .
Antwort 7 von Phantom_Fies
Ich gehe mal davon aus, dass du die zusätzliche Msgbox nur zu Testzwecken eingebaut hast.
Du sagst, es liege an der Funktion Day(Date). Welcher Fehler tritt denn genau auf? Ein Kompilierungsfehler?
Mal rein von meinem bescheidenen Logikverständnis her: Du willst doch, wenn der Nutzer den Monat noch nicht abschließen will, erneut abfragen, ob der Monat gesperrt werden soll. Du fragst aber nur am ersten des Monats ab.
Also solltest du es folgendermaßen machen:
Dann brauchst du aber ein zweites Kriterium, weil du ja nicht weißt, ob der Nutzer den Monat schon abgeschlossen hat. Und woher weißt du, in welchem Monat du dich gerade befindest? In deiner Aktualisierungsabfrage änderst du doch den Status allgemein.
Ich würde eine komplett andere Lösung in Erwägung ziehen, z.B. ein Eingabeformular, in dem man diese Einstellungen machen kann. Mit Messageboxen und GoTo-Anweisungen kommst du meiner Meinung nach nicht weiter.
Du sagst, es liege an der Funktion Day(Date). Welcher Fehler tritt denn genau auf? Ein Kompilierungsfehler?
Mal rein von meinem bescheidenen Logikverständnis her: Du willst doch, wenn der Nutzer den Monat noch nicht abschließen will, erneut abfragen, ob der Monat gesperrt werden soll. Du fragst aber nur am ersten des Monats ab.
Also solltest du es folgendermaßen machen:
If Day(Date) = > 1 Then
antw = MsgBox("Möchten Sie den voherigen Monat abschliessen", vbYesNo, "Vorigen Monat sperren?")
If antw = vbYes Then DoCmd.RunSQL "Update [Buchungen_Kasse] Set Status=1 Where status = 0"
MsgBox "Voriger Monat wurde abgeschlossen", vbInformation, "Gesperrt!"
If antw = vbNo Then MsgBox "Sie werden erneut dazu aufgefordert zu sperren", vbInformation, " "
Else
Exit Sub
End If
Dann brauchst du aber ein zweites Kriterium, weil du ja nicht weißt, ob der Nutzer den Monat schon abgeschlossen hat. Und woher weißt du, in welchem Monat du dich gerade befindest? In deiner Aktualisierungsabfrage änderst du doch den Status allgemein.
Ich würde eine komplett andere Lösung in Erwägung ziehen, z.B. ein Eingabeformular, in dem man diese Einstellungen machen kann. Mit Messageboxen und GoTo-Anweisungen kommst du meiner Meinung nach nicht weiter.
Antwort 8 von Roadrunner90
Hallo Christian,
das mit dem Tag funktioniert ohne probleme. Aber sauber ist die Lösung so nicht, was machst du denn wenn am 1. keiner arbeitet?
Ich würde eine Tabelle anlegen mit Monat/Jahr und Kennzeichen für Monatsabschluss. Dann kannst du die Prüfung immer machen und die Abfrage für den Abschluss kommt solange bis das Kennzeichen auf "ja" steht.
Die Methode von PhantomFies führt dazu, dass die Abfrage bei jedem öffnen des Formulares kommt, muss ja wohl auch nicht sein.
das mit dem Tag funktioniert ohne probleme. Aber sauber ist die Lösung so nicht, was machst du denn wenn am 1. keiner arbeitet?
Ich würde eine Tabelle anlegen mit Monat/Jahr und Kennzeichen für Monatsabschluss. Dann kannst du die Prüfung immer machen und die Abfrage für den Abschluss kommt solange bis das Kennzeichen auf "ja" steht.
Die Methode von PhantomFies führt dazu, dass die Abfrage bei jedem öffnen des Formulares kommt, muss ja wohl auch nicht sein.
Antwort 9 von Christian
das mit der zusätzlichen msgbox ist richtig..
habe das mit dem datum jetzt auch zum laufen gebracht er fragt jetzt an jedem 1. eines monats nach.
Wenn keiner am 1. arbeitet dann bleibt der status noch auf 0. da hast du recht da muss ich mir nochwas einfallen lassen. Deine Lösung mit der Tabelle Roadrunner, sagt mir zu allerdings weiss ich noch nicht wie ich das realisieren soll :-)
Verstehe ich das richtig eine Tabelle mit den Feldern
Monat , Jahr und Status
Wie kann ich dann realisieren, dass er
1. automatisch die Tabelle die Felder Monat und Jahr füllt je´nach Buchung
und
2. fragt er dann nich auch bei jedem start des Formulars nach ob er es speichern soll?
Nach möglichkeit soll der MSGBOX Kram so selten wie möglich auftauchen.
Also sprich. der user soll am frühestens am 1. eines monats gefragt werden ob er die datensätze aus dem vormonat sperren soll.
Einen Tag später soll die MSGBOX erneut auftauchen sofern er nicht an dem vorigen tag schon bestätigt hat, dass die alten datensätze gesperrt werden sollen.
und so weiter...
Allerdings sollen auch dann wenn der User es ne ganze zeit lang auf Nicht sperren klickt und daten zusätzlich auch schon aus dem aktuellen monat eingibt nur die datensätze des vormonats geändert werden.
Ich hoffe das war jetzt verständlich ausgedrückt :-)
@ Phantom als 2. Kreterium könnte man doch das Feld status in der Tabelle Buchungen_Kasse mit hinzunehmen oder sehe ich das falsch?
Vielen Dank übrigens @ Teddy7, pHantom Fies und dich Roadrunner für eure Mühen
habe das mit dem datum jetzt auch zum laufen gebracht er fragt jetzt an jedem 1. eines monats nach.
Wenn keiner am 1. arbeitet dann bleibt der status noch auf 0. da hast du recht da muss ich mir nochwas einfallen lassen. Deine Lösung mit der Tabelle Roadrunner, sagt mir zu allerdings weiss ich noch nicht wie ich das realisieren soll :-)
Verstehe ich das richtig eine Tabelle mit den Feldern
Monat , Jahr und Status
Wie kann ich dann realisieren, dass er
1. automatisch die Tabelle die Felder Monat und Jahr füllt je´nach Buchung
und
2. fragt er dann nich auch bei jedem start des Formulars nach ob er es speichern soll?
Nach möglichkeit soll der MSGBOX Kram so selten wie möglich auftauchen.
Also sprich. der user soll am frühestens am 1. eines monats gefragt werden ob er die datensätze aus dem vormonat sperren soll.
Einen Tag später soll die MSGBOX erneut auftauchen sofern er nicht an dem vorigen tag schon bestätigt hat, dass die alten datensätze gesperrt werden sollen.
und so weiter...
Allerdings sollen auch dann wenn der User es ne ganze zeit lang auf Nicht sperren klickt und daten zusätzlich auch schon aus dem aktuellen monat eingibt nur die datensätze des vormonats geändert werden.
Ich hoffe das war jetzt verständlich ausgedrückt :-)
@ Phantom als 2. Kreterium könnte man doch das Feld status in der Tabelle Buchungen_Kasse mit hinzunehmen oder sehe ich das falsch?
Vielen Dank übrigens @ Teddy7, pHantom Fies und dich Roadrunner für eure Mühen
Antwort 10 von Roadrunner90
das ist ja das schöne mit der Tabelle, wenn du die füllst wenn das 1. mal der update gemacht wird, brauchst du nur noch beim öffnen des formulares den status prüfen. wenn schon upgedatet ist braucht auch keine msgbox mehr kommen.
Wenn du noch fragen hast, melde dich, dann bau ich dir am wochenende was zusammen
Wenn du noch fragen hast, melde dich, dann bau ich dir am wochenende was zusammen
Antwort 11 von Christian
es ist tatsächlich so :-) ich kriege es nicht hin..
ALso in der Tabelle Buchungen_Kasse befindet sich ja schon ein Feld namens BuDate (Buchungsdatum)
Dieses Feld hat den Datums werd der erstellung des Datensatzes (zB. 13.5.03)
Wie kann ich nun auf die Monatsspalte zugreifen?
Sprich es soll im VBA auf den Monat der Buchung zugegriffen werden.
Wenn wir zB Monat 06 haben dann soll er nur den monat 05 auswählen alle Datensätze sich raussuchen und dannvergleichen ob der status 0 oder 1 ist.
Sofern er 0 ist soll er die msgbox aufrufen in der der user gefragt wird ob die datensätze nun gesperrt werden sollen.
ist der status 1 soll die ganze prozedur übersprungen werden.
und erst wieder am 1. des nächsten monats (in dem fall 07) ausgeführt werden.
Verständlich? :-)
ALso in der Tabelle Buchungen_Kasse befindet sich ja schon ein Feld namens BuDate (Buchungsdatum)
Dieses Feld hat den Datums werd der erstellung des Datensatzes (zB. 13.5.03)
Wie kann ich nun auf die Monatsspalte zugreifen?
Sprich es soll im VBA auf den Monat der Buchung zugegriffen werden.
Wenn wir zB Monat 06 haben dann soll er nur den monat 05 auswählen alle Datensätze sich raussuchen und dannvergleichen ob der status 0 oder 1 ist.
Sofern er 0 ist soll er die msgbox aufrufen in der der user gefragt wird ob die datensätze nun gesperrt werden sollen.
ist der status 1 soll die ganze prozedur übersprungen werden.
und erst wieder am 1. des nächsten monats (in dem fall 07) ausgeführt werden.
Verständlich? :-)
Dim antw%
If Day(Date) = 1 Then GoTo Marke1
'If Day(Date) = 2 - 31 Then DoCmd.RunSQL "Select BuDate FROM Buchungen_Kasse Where BuDate = Month(Date) -1"
'If [Buchungen_Kasse].Status = 0 And [Buchungen_Kasse].BUDATE = "*.5.*" Then GoTo Marke2
If sql = sql & "[Buchungen_Kasse].Status = 1" Then GoTo Marke2
GoTo Marke3
Marke1:
DoCmd.SetWarnings False
antw = MsgBox("Möchten Sie den voherigen Monat abschliessen", vbYesNo, "Vorigen Monat sperren?")
If antw = vbYes Then DoCmd.RunSQL "Update [Buchungen_Kasse] Set Status=1 Where status = 0"
If antw = vbYes Then MsgBox "Voriger Monat wurde abgeschlossen", vbInformation, "Gesperrt!"
If antw = vbNo Then MsgBox "Sie werden erneut dazu aufgefordert zu sperren", vbInformation, " "
DoCmd.SetWarnings True
Marke2:
DoCmd.RunSQL "Update [buchungen_Kasse] Set Status = 1 Where Status = 0"
MsgBox "ausführungstest marke 2"
Marke3:
Antwort 12 von Roadrunner90
Hallo Christian,
so langsam wird es klar was du willst.
Hab nur leider im Moment keine Zeit - erst am Wocheende. Wenn du dann noch immer Lösungsbedarf hast, melde dich mal Samstag am späten Nachmittag bei mir. Schliesslich sind ja Probleme da um gelöst zu werden.
Gruß Rudolf
so langsam wird es klar was du willst.
Hab nur leider im Moment keine Zeit - erst am Wocheende. Wenn du dann noch immer Lösungsbedarf hast, melde dich mal Samstag am späten Nachmittag bei mir. Schliesslich sind ja Probleme da um gelöst zu werden.
Gruß Rudolf
Antwort 13 von CNachtigall
Vielen Dank für dein Angebot, wenn ich es nicht hinkriegen sollte bis dann, werde ich es vermutlich gerne in Anspruch nehmen..
Danke nochmAL
Danke nochmAL
Antwort 14 von JohnnyLoser
Hi Christian,
ich habe mir mal alle Tips durchgelesen. Nehmt's mir nicht übel, aber ich halte eine Zusatztabelle für eine praktikable, allerdings keine 100% sichere Alternative.
Was passiert, wenn durch irgendeinen blöden Zufall (Rechnerdatum verstellt, Absturz, etc.) die Tabelle den Eintrag erhält, daß der April 2003 abgeschlossen wurde, de facto ist er's aber nicht?
Ich denke, es macht mehr Sinn, beim Öffnen der Datenbank (AutoExec) die Tabelle nach Buchungen zu durchforsten, welche vor dem aktuellen Monat durchgeführt und nicht abgeschlossen wurden. (Jahr und Monat in Abfrage einbeziehen)
Das ganze kann natürlich mit ein paar Zeilen mehr noch so verfeinert werden, daß sobald eine Buchung gefunden wird, die älter als der Vormonat ist - was ja bei normaler Benutzung nicht vorkommen sollte -, bestimmte Anweisungen durchgeführt werden. Man kann ja nie wissen, vielleicht gab's eine Fehlbuchung, weil irgendjemand sein Rechnerdatum auf 2002 zurückgestellt hat.
Is nur so'n Gedanke
Johnny
ich habe mir mal alle Tips durchgelesen. Nehmt's mir nicht übel, aber ich halte eine Zusatztabelle für eine praktikable, allerdings keine 100% sichere Alternative.
Was passiert, wenn durch irgendeinen blöden Zufall (Rechnerdatum verstellt, Absturz, etc.) die Tabelle den Eintrag erhält, daß der April 2003 abgeschlossen wurde, de facto ist er's aber nicht?
Ich denke, es macht mehr Sinn, beim Öffnen der Datenbank (AutoExec) die Tabelle nach Buchungen zu durchforsten, welche vor dem aktuellen Monat durchgeführt und nicht abgeschlossen wurden. (Jahr und Monat in Abfrage einbeziehen)
ValSql = "SELECT BU_VAL FROM Tabelle WHERE Year(BU_VAL) & Month(BU_VAL) < Year(Date) & Month(Date) AND Abschluss = False"
Das ganze kann natürlich mit ein paar Zeilen mehr noch so verfeinert werden, daß sobald eine Buchung gefunden wird, die älter als der Vormonat ist - was ja bei normaler Benutzung nicht vorkommen sollte -, bestimmte Anweisungen durchgeführt werden. Man kann ja nie wissen, vielleicht gab's eine Fehlbuchung, weil irgendjemand sein Rechnerdatum auf 2002 zurückgestellt hat.
Is nur so'n Gedanke
Johnny
Antwort 15 von Christian
Hi Jonny
guter ansatz vielen Dank
Werde das mal testen.
guter ansatz vielen Dank
Werde das mal testen.
Antwort 16 von Christian
Habe das mal mit eingebaut..
er macht das alles einfach super
allerdings ruft er das Datum nicht aus der Buchungen_Kasse tabelle raus sondern er fordert den user dazu auf den aktuellen monat einzugeben das ist ja nciht gewünscht. Hier der Code
wie kriege ich das nun hin, dass er das Datum aus dem Feld BuDate der Tabelle buchungen_kasse holt und mit dem aktuellen datum vergleicht?
thx
er macht das alles einfach super
allerdings ruft er das Datum nicht aus der Buchungen_Kasse tabelle raus sondern er fordert den user dazu auf den aktuellen monat einzugeben das ist ja nciht gewünscht. Hier der Code
Dim antw%
If Day(Date) = 1 Then GoTo Marke1
'If Day(Date) = 2 - 31 Then DoCmd.RunSQL "Select BuDate FROM Buchungen_Kasse Where BuDate = Month(Date) -1"
ValSql = "SELECT BuDate FROM [Buchungen_Kasse] WHERE Month(BuDate) < & Month(Date) AND Status = 0"
If ValSql = Status = 0 Then GoTo Marke2
GoTo Marke3
Marke1:
DoCmd.SetWarnings False
antw = MsgBox("Möchten Sie den voherigen Monat abschliessen", vbYesNo, "Vorigen Monat sperren?")
If antw = vbYes Then DoCmd.RunSQL "Update [Buchungen_Kasse] Set Status=1 Where status = 0"
If antw = vbYes Then MsgBox "Voriger Monat wurde abgeschlossen", vbInformation, "Gesperrt!"
If antw = vbNo Then MsgBox "Sie werden erneut dazu aufgefordert zu sperren", vbInformation, " "
DoCmd.SetWarnings True
Marke2:
DoCmd.RunSQL "Update [buchungen_Kasse] Set Status = 1 Where Month(BuDate) < Month(Date) AND Status = 0"
MsgBox "ausführungstest marke 2"
Marke3: MsgBox "marke 3"
wie kriege ich das nun hin, dass er das Datum aus dem Feld BuDate der Tabelle buchungen_kasse holt und mit dem aktuellen datum vergleicht?
thx
Antwort 17 von JohnnyLoser
Hi Christian,
versuch's mal so:
Ich würde, wie gesagt, diese Routine in die Initialisierung der Datenbank einbauen.
a) Modul erstellen (Name z.B. "SpecialFunctions")
b) Prozedur erstellen (z.B. "ProgInit")
c) Makro "AutoExec" erstellen und in der ersten Zeile "AusführenCode" und die Funktion "ProgInit" aufrufen.
Beim Öffnen der Datenbank wird die Prozedur ausgeführt, dann dauert's nachher nicht mehr so lange, wenn das Formular geöffnet wird.
Gruß
Johnny
versuch's mal so:
Public Function ProgInit()
On Error Goto ProgInitErr
Dim db as Database, rs as Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT BuDate FROM Buchungen_Kasse WHERE Format([BuDate],'yyyymm') < Format(Date,'yyyymm') AND Status = False")
If rs.RecordCount < 1 Then
Exit Function
Else
If MsgBox("Möchten Sie den voherigen Monat abschliessen?", vbYesNo + vbQuestion, "Vorigen Monat sperren") = vbYes Then
db.Execute("UPDATE Buchungen_Kasse Set Status = True WHERE Format([BuDate],'yyyymm') < Format(Date,'yyyymm')")
Else
[mache jenes]
EndIf
EndIf
Exit Function
ProgInitErr:
MsgBox Str(Err) & ": " & Error, 48, "Fehler in Initialisierung"
Resume Next
End Function
Ich würde, wie gesagt, diese Routine in die Initialisierung der Datenbank einbauen.
a) Modul erstellen (Name z.B. "SpecialFunctions")
b) Prozedur erstellen (z.B. "ProgInit")
c) Makro "AutoExec" erstellen und in der ersten Zeile "AusführenCode" und die Funktion "ProgInit" aufrufen.
Beim Öffnen der Datenbank wird die Prozedur ausgeführt, dann dauert's nachher nicht mehr so lange, wenn das Formular geöffnet wird.
Gruß
Johnny
Antwort 18 von JohnnyLoser
Sorry, kleiner Fehler ist mir erst beim 2ten Lesen aufgefallen:
Hinter Date fehlen noch die Klammern, also:
Format(Date(),'yyyymm')
Gruß
Johnny
Hinter Date fehlen noch die Klammern, also:
Format(Date(),'yyyymm')
Gruß
Johnny
Antwort 19 von Christian
Hi Johny,
sobald ich deinen Code mit einfüge dann fragt er nicht am ersten den user.
Ebenso nicht an nachfolgenden tagen. er verändert auch den status im feld nicht.
Hast du ne Idee wie ich den oberen code
Dazu bringe das Datum aus der Tabelle zu lesen anstatt den User nach dem Parameterwert zu fragen?
Gruss und thx
Christian
sobald ich deinen Code mit einfüge dann fragt er nicht am ersten den user.
Ebenso nicht an nachfolgenden tagen. er verändert auch den status im feld nicht.
Hast du ne Idee wie ich den oberen code
Marke2:
DoCmd.RunSQL "Update [buchungen_Kasse] Set Status = 1 Where Month(BuDate) < Month(Date) AND Status = 0"
MsgBox "ausführungstest marke 2
Dazu bringe das Datum aus der Tabelle zu lesen anstatt den User nach dem Parameterwert zu fragen?
Gruss und thx
Christian
Antwort 20 von Christian
Danke habe es hinbekommen

