Hallo,
ersteinmal ich bin ganz neu hier, also nicht böse sein wenn irgendwo Fehler.. Ich arbeite momentan an einer Mitgliederdatenbank, in der unter anderem die Beiträge erfasst werden sollen. Hier gibt es mehrere Felder. Einmal Mitglied seit, ab hier sollen dann die Beiträge jeweils erfasst werden. Monatlich und in Tabellenform. So wenn ich nun eine Zeile im Formular fertig habe, erscheint ja darunter eine neue Zeile, wie bekomme ich es nun hin, das dort gleich bei "Beitrag für Monat" Das vorherige Datum sprich Monat und Jahr plus ein Monat hinzu addiert steht.
Bin schon einmal für jede Antwort Dankbar.
Arbeite übrigends mit Access2010
Hi,
unten aufgeführtes Beispiel in a2003.
Im Formular gibt es beim Ereignis "Beim Anzeigen" die Zeile:
Me.Buchung_Monat_Jahr.DefaultValue = Chr(34) & DateAdd("m", 1, DMax("Buchung_Monat_Jahr", "T1")) & Chr(34)
Sie addiert zum maximalen Datum aus dem Feld "Buchung_Monat_Jahr" einen Monat und setzt dieses Ergebnis als Default ein.
"T1" ist der Name der Tabelle.
Und dann gibt es noch:
Private Sub Form_Open(Cancel As Integer)
Me.Buchung_Monat_Jahr.Format = "mm.yyyy"
End Sub
Das legt das Format der Datumsanzeige fest. Ich habe aus Vereinfachungsgründen ein Datumsfeld genommen, um die Rechnerei beim Monats-/Jahreswechsel mir zu ersparen.
Harald
[Anhang gelöscht durch Administrator]
Ersteinmal Danke für die Lösung.
Wäre es auch möglich, das man in einem Formular eine Tabelle hat, in einem anderen Eingabefeld ein Startdatum angibt und dann in der "Tabelle" im Formular für jeden Monat bis zum jetzigen eine neue Zeile erstellt wird. Der aktuelle Monat sollte ganz oben stehen. Bei jedem Öffnen des Formulars soll das alles dann natürlich aktualisier/ergänzt werden.
Ein Dank schon einmal im vorraus. Aber meine Kenntnisse sind nicht die besten bin gerade am Anfang.
Zitat von: Chris SZ am Januar 25, 2012, 21:57:48
Wäre es auch möglich,
ja
Zitat von: Chris SZ am Januar 25, 2012, 21:57:48
das man in einem Formular eine Tabelle hat, in einem anderen Eingabefeld ein Startdatum angibt
Ist dieses Eingabefeld gebunden (also in der Tabelle drin) oder ungebunden?
Zitat von: Chris SZ am Januar 25, 2012, 21:57:48
und dann in der "Tabelle" im Formular für jeden Monat bis zum jetzigen eine neue Zeile erstellt wird. Der
Soll die "neue Zeile" nur den ermittelten Inhalt (Monat+Jahr) enthalten oder ist das eine Tabelle, die in Bezug zu einem darüberliegenden Hauptformular steht? Dann steht wohl auch ein Verknüpfungs-ID zur Diskussion. {Mir fehlen Angaben zur Datenstruktur}
Zitat von: Chris SZ am Januar 25, 2012, 21:57:48
aktuelle Monat sollte ganz oben stehen.
Das sollte noch der einfachste Teil sein.
Zitat von: Chris SZ am Januar 25, 2012, 21:57:48
Bei jedem Öffnen des Formulars soll das alles dann natürlich aktualisier/ergänzt werden.
Was kann denn alles passieren, das etwas aktualisiert werden muß?
Harald
Also das Startdatum wird in einem Extra Eingabefeld eingegeben. Sozusagen als Vertrags Anfang. Und ist im Hauptformular angegeben.
Also Habe mir das so vor gestellt oben als Hauptformular halt Name, mit einer ID, etc. und dann ein Unterformular. In Tabellenform. Hier soll in jeder Zeile Monat und Jahr stehen also für den Monatlichen Beitrag, dann ein Haken um es als Bezahlt zu markieren, und eine Tabellenspalte für das Zahlungsdatum also das heutige Datum.
Und öffne ich das Formular nun im August, sollen die Monate vom Startdatum bis August angezeigt werden, öffne ich es nun im September wieder die Monate vom Startdatum bis September usw.
Hoffe du kannst mit den Informationen schon was Anfangen.
Gruß
Chris
Hi,
kannst Du eine abgespeckte Datenbank zur Verfügung stellen?
Hätte den Vorteil, die Tabellen und Formulare schon mal zu sehen.
Wenn das geht, aber bitte im a2003-Format, da ich es mir nur ungern antue, mit ACCDB zu arbeiten.
Meine obige Frage nach dem Aktualisieren hatte als Hintergrund:
Ist es vorstellbar, dass ein so ermittelter Soll-Buchungswert auch mal - warum auch immer - gelöscht , geändert wird?
Wie sollte der "Automatismus" greifen: per Mausklick oder automatisch beim Programmstart?
Wenn so vollautomatisch, wird eine womöglich zuvor gelöschte Zeile wieder neu erstellt. Soll/darf das sein?
Muß es unbedingt einen "Haken" geben als Zeichen für bezahlt?
Wenn Du ein Buchungsdatum eingegeben hast, ist das doch schon auswertbar. (Geht in Richtung redundante Daten!)
Harald
Mit einer 2003 Vesion wird schwer mir steht nur 2010 zur verfügung. Und beim Abspeichern in ner 2003 Version gabs letztens Probleme. Wenn du sagen würdest du würdest damit klar kommen dann mache ich es so nochmal.
Nein der Wert sollte nicht gelöscht und nicht geändert werden.
Der Automatismus am besten beim Programmstart.
Da keine gelöscht werden sollte wird auch keine neu erstellt.
Das mit dem Haken habe ich so noch nicht gesehen. Bin da relativ offen. Aso der Haken ist kein Muss.
Gruß
Chris
Zitat von: Chris SZ am Januar 26, 2012, 19:52:41
Mit einer 2003 Vesion wird schwer mir steht nur 2010 zur verfügung
N'abend
Wenn mein a2007 die a2010-Datenbank lesen kann, dann zur Not auch das.
Werde aber frühestens am Wochenende Zeit haben.
Harald
So hier dann mal eine gekürzte Version der Datenbank. Das Feld Vertragsbeginn soll der erste Monat sein von dem aus Hoch gezählt wird.
Schonmal danke fürs Anschauen.
Gruß
Chris
[Anhang gelöscht durch Administrator]
Hallo,
heisser Tipp (vermutlich schon tausendmal erwähnt):
Sorg als Allererstes für brauchbare (fehlervermeidende) Benamsung der Tabellen-, Feld- und Formularnamen.
Entferne/vermeide DRINGEND Leer- und Sonderzeichen in den Namen , wie auch reservierte Wörter.
Ansonsten etwa so im Formular "Barzahlung/Überweisung"
Private Sub Form_Current()
Dim M As Long
If DCount("*", "Barzahlung/Überweisung", "Vertragsnummer= " & Me.Parent![Mitglieds-ID]) = 0 Then
Me![Beitrag für Monat].DefaultValue = """" & Format(Me.Parent!Vertragsbeginn, "dd.mm.yyyy") & """"
Else
Me![Beitrag für Monat].DefaultValue = """" & Format(DateAdd("m", 1, Nz(DMax("[Beitrag für Monat]", "Barzahlung/Überweisung", "Vertragsnummer = " & Me.Parent![Mitglieds-ID]), Date)), "dd.mm.yyyy") & """"
End If
End Sub
Danke ersteinmal für deine Mühe. Das ist nun so wie ich es oben beschrieben habe und funktioniert auch einband frei, den Ratschlag mit ändern der Namen habe ich mir zu Herzen genommen und auch schon umgesetzt.
Jedoch kam ja noch eine Frage nach einer erweiterung. Das die Tabelle im Formular sich mit dem öffnen des Formulars oder auch von Access automatisch bis zum jetzigen Monat erweitert. Hat da jemand eine Idee wie man das Bewerkstelligen kann?
Lieben Gruß
Hallo,
"dumme" Frage: warum??
Es ist ungeschickt, Datensätze "im Voraus" und auf Verdacht anzulegen...
ZitatEs ist ungeschickt, Datensätze "im Voraus" und auf Verdacht anzulegen...
Bei Stammdaten auf jeden Fall. Hilfstabellen bieten dagegen Möglichkeiten, um auf aufwändiges und evtl. fehlerbehaftetes VBA zu verzichten.
Beispiel:
- Hilfstabelle, die die Monatsersten fortlaufend und in einem ausreichenden Zeitraum enthält. Eine Anzeigeformatierung kann passend gewählt werden.
- Datenherkunft des Formulars:
SELECT H.Monatserster, S. Wert
FROM Hilfstabelle AS H LEFT JOIN Stammdatentabelle AS S
ON H.Monatserster = S.Monatserster
WHERE H.Monatserster < Date()Mit Ausfüllen eines Wertes der Stammdatentabelle (Wert) wird der Monatserste in die Stammdatentabelle übernommen => Dummydatensatz wird zum Stammdatensatz.
MfGA
ebs
Hi,
also es geht darum das ich ne Abfrage machen will wer für den Monat noch keinen Beitrag entrichtet hat. Allerdings gibt die ja keine Werte raus, wenn der Monat noch nicht vorhanden ist. Daher hätte ich halt gerne die Automatische erweiterung.
Weiß vielleicht jemand eine Lösung?
Gruß
Hallo,
dann erzeug eine Hilftabelle (die alle "Monatsersten" eines "übersehbaren" Zeitraumes enthält , wie ebs17 es schon erwähnt hat) und erzeuge eine Abfrage wie hier beschrieben:
http://www.donkarl.com/?FAQ3.16
Wie meint ihr das mit einer Hilfstabelle? Könnt ihr mir das mal erläutern höre das zum ersten mal.
Eine Stammdatentabelle (Bestandteil des eigenen Datenmodells) enthält wie gesagt Stammdaten: Kunden, Artikel, Preise, Adressen usw. Dort sollten nur reale Einträge vorkommen.
Hilfstabellen dagegen stellen bspw. Daten zur Verfügung, die man in Abfragen und Berechnungen (auch verschiedenen) verwenden kann. Solche Hilfstabellen können auch schön unnormalisiert sein sowie Berechnungsergebnisse enthalten. Klassisches Beispiel für eine solche Hilfstabelle ist eine Kalendertabelle, wo man in einer Spalte das laufende Datum führt und in weiteren Spalten Informationen wie Wochentagsname, Kalenderwoche, Quartal, IstFeiertag, IstWochenEnde uva.
Diese zusätzlichen Daten kann man zwar laufend immer wieder neu berechnen. Da ein Kalender sich aber nicht ändert, genügt auch eine einmalige Berechnung. Das letzteres auch funktioniert, zeigt die Praxis, wo es auch Kalender aus Papier gibt.
Wenn man solche Daten aus indizierten Feldern einer solchen Hilfstabelle in eigene Abfragen einbezieht, wird man deutlich performantere Abfragen erstellen können als wenn man Berechnungen in Abfragen ausführt und dann solche Ausdrücke weiter filtern, gruppieren, aggregieren, sortieren muss (Stichwort Indexnutzung).
Zusätzlich erhält man aus solch einer Hilfstabelle "fehlende" Infomationen und kann damit arbeiten, wie die weiter oben gezeigte Abfrage zeigt.
In Deinem Fall ist die gemeinte Hilfstabelle eine abgemagerte Kalendertabelle und besteht aus einem Feld (ich nannte es Monatserster) vom Typ DateTime. Da hinein kommen fortlaufend die Datumswerte 01.01.2012, 01.02.2012, 01.03.2012, ... je nach benötigtem Zeitraum.
Monatserster deshalb, weil man per DateAdd einfach neue Werte erzeugen kann und weil man per Formatierung beliebige Datums-Ausdrücke erzeugen kann (mmm, yyyy-mm u.a.).
Eine spezielle und hochinteressante Variante zeigt Nouba. Hier ist die Hilfstabelle eine einfache Zahlentabelle (vielfach wiedernutzbar): SQL-Rezepte (http://www.office-loesung.de/ftopic108646_0_0_asc.php)
MfGA
ebs
So habe die Tabelle nun so angelegt wie mein erster Gedanke war, ohne Hilfstabelle. Sondern mit dem Code von DF6GL. Ersteinmal danke dafür.
Nun möchte ich eine Abfrage erstellen, damit ich auf Knopfdruck alle offenen Beiträge bekomme. Daher möchte ich abfragen ob der Datensatz schon vorhanden ist sprich im März der Februar schon da ist und ob bezahlt wurde. Wie Kann ich diese Beiden Kriterien zusammen abfragen?
Und wie kann es hin bekommen, das die Abfrage erst ab dem Vertragsbeginn anfängt auszuwerten?
Hoffe hier kann mir auch noch einmal aus der Klemme geholfen werden. Der Rest steht zum größten Teil schon.
Gruß
Hallo,
wollte nun doch die Abfrage mittels Hilfstabelle machen. Habe auch eine Hilfstabelle erstellt, und er zeigt mir auch bei der Abfrage die offenen Beiträge an, aber leider nur für Monate wo keiner bezahlt hat. Ist es möglich, das er die Abfrage mit Hilfstabelle für jeden einzelnen durch führt?
und ist es möglich das er mir dann erst die Monate anzeigt die hinter dem "Vertragsbeginn" liegen?
Hoffe hier kann mir nochmal weiter geholfen werden.
Die Antwort auf Deine Fragen lautet: Ja.
Du müsstest für jeden "Einzelnen" einen Kalender aus einem Kreuzprodukt zwischen dem "Einzelnen" und der Hilfstabelle erzeugen und diese resultierende Abfrage (statt der Hilfstabelle in oberen Beispiel) mit der Stammdatentabelle abgleichen. Filterungen zur gezielten Senkung der Datenmenge sind nicht nur möglich, sondern sehr sinnvoll.
Ein Beispiel will ich an der Stelle nicht erstellen, weil ich keine Vorstellung von Deinen Tabellen und Abfragen habe. Überdies hast Du sicher bemerkt, dass sich die Aufgabenstellung geändert hat: Vortragen von leeren Datensätzen und Ermitteln von nicht bezahlten Beiträgen (was auch tief in die Vergangenheit gehen kann) sind verschiedene Vorgänge.
MfGA
ebs
Und wie erstelle ich das Kreuzprodukt? und vor allem wie bekomme ich es dann hin, das er mir mit einem einzigen ausführen alle offenen beiträge für alle Mitglieder anzeigt und nicht nur für eins?
ZitatUnd wie erstelle ich das Kreuzprodukt?
Das ist das Einfachste, was es bei SQL gibt: Man verwendet zwei oder mehr Tabellen und verwendet keinerlei Einschränkungen per JOIN oder WHERE-Klausel. Daraus ergibt sich dann eine Datensatzanzahl, die dem Produkt der Datensatzzahlen der verwendeten Tabellen entspricht: Alles wird mit allem kombiniert.
SELECT H.Monatserster, D.Einzelner
FROM Hilfstabelle H, DeineTabelle DMfGA
ebs
So nun habe ich das Problem gelöst, ein dickes Danke an alle die mir geholfen haben und genug Geduld mit mir hatten.