Seite 1 von 1

Makro für wiederkehrende Termine

Verfasst: So, 31.08.2008 14:34
von Neuling77
Hallo Baseler!

Als Einäugiger unter den Blinden habe ich mich dazu breitschlagen lassen, eine Datenbank zur Kunden-, Mitarbeiter- und Spenden-Verwaltung für einen Tafel-Laden (Abgabe von Lebensmitteln kurz vor Ablaufdatum an Bedürftige) zu erstellen. Da dies meine erste Base-Datenbank wird (rudimentäre Access-Erfahrungen vorhanden), habe ich in den letzten Tagen viel bei Euch im Forum, in den Anleitungen, FAQs und auf andere Seiten gestöbert, wie man ein solches Projekt am besten angeht. Viel hat sich mir von dort her erschlossen. Bei einigen Punkten habe ich aber keine Lösung finden können und stehe einfach auf dem Schlauch, was den Transfer von Inforamtionen auf meine Herausforderungen angeht. Hier wäre ich für Eure Hilfe sehr dankbar.

Eine der Herausforderungen sieht so aus: Der Laden öffnet wöchentlich; Kunden müssen wöchentlich erscheinen oder sich abmelden (damit das knappe Gut auch wirklich an die Frau kommt). Es gibt also drei Möglichkeiten: war da; war entschuldigt; war nicht da.
Bisher plane ich, diese Daten in einer Tabelle "Anwesenheiten" zu verwalten, die über die KundenID in Beziehung zur Tabelle "Kunden" steht. Hierzu (fürs erste) zwei Fragen:
1. Wie realisiere ich die Wahl zwischen ja/nein/entschuldigt? (Boolean wäre ja einfach gewesen, aber da fehlt mir halt sozusagen die "2".)
2. Wie kann ich es einrichten, dass diese Tabelle "selbständig" wöchentliche Termine hinzufügt? Ganz ideal wäre es, wenn Base jede Woche eine neue Spalte anlegen würde und die datenverarbeitende Helferin nach Abschluss eines Ausgabetages in einem Formular nur noch Häkchen setzen müsste.
3. Nach dreimaligem unentschuldigten Fehlen in Folge soll automatisch ein Brief an den Kunden gehen, in dem er gefragt wird, ob er Kunde bleiben möchte. Wie kann ich das abfragen?

Ich freue mich auch Anregungen, Tipps und vielleicht die ein oder andere "Smoking Gun". Vielen Dank für Eure Mühe!

Re: Makro für wiederkehrende Termine

Verfasst: So, 31.08.2008 17:26
von Barlee
Hallo Neuling77,

im folgenden auf die Schnelle ein paar Gedanken zu Deinem Anliegen:
1. Wie realisiere ich die Wahl zwischen ja/nein/entschuldigt? (Boolean wäre ja einfach gewesen, aber da fehlt mir halt sozusagen die "2".)
Du könntest eine separate Tabelle erstellen, die die möglichen Status bereitstellt. Also z.B.
Tabelle "Status"
Status_ID Status
1 ja
2 nein
3 entschuldigt

Dem Kunden (bzw. der KundenID) ordnest Du dann wöchentlich die jeweilige Status_ID zu.
2. Wie kann ich es einrichten, dass diese Tabelle "selbständig" wöchentliche Termine hinzufügt? Ganz ideal wäre es, wenn Base jede Woche eine neue Spalte anlegen würde und die datenverarbeitende Helferin nach Abschluss eines Ausgabetages in einem Formular nur noch Häkchen setzen müsste.
Wöchentlich eine neue Spalte anzulegen ist aus meiner Sicht nicht glücklich. Besser wären neue Zeilen. Und diese kann die DV Helferin durch einen Klick im Formular erzeugen. (Hinzufügen eines neuen Datensatzes). Mann kann die entsprechende Tabelle dann so einrichten, dass automatisch das aktuelle Datum (als wöchentlicher Termin) eingetragen wird. Das hatten wir z.B. hier: viewtopic.php?f=8&t=19400
Möchtest Du das Formular so gestalten, dass möglichst nur Häkchen gesetzt werden müssen, dann bräuchtest Du für die verschiedenen Status je eine Spalte, die Du dann enstprechend mit "true" bzw. "1" belegst. Die o.a. separate Tabelle würde dann entfallen.
3. N[ch dreimaligem unentschuldigten Fehlen in Folge soll automatisch ein Brief an den Kunden gehen, in dem er gefragt wird, ob er Kunde bleiben möchte. Wie kann ich das abfragen?
Das Wichtigste ist hier die Einschränkung auf die letzten drei Öffnungszeiten.
Die Abfrage ist über eine Kombination von Sortierung (nach Datum) und TOP(3) hinzukriegen.
Folgendes (vereinfachtes!) Beispiel verstehe bitte als Anregung, nicht als Komplettlösung!
Angenommen: Tabelle "Tab_Kunde" mit den Spalten ID, Vorname, Nachname, Öffnung, Ja, Nein, Entsch

Schritt1: Alle Datensätze aus der Kundentabelle werden zurückgegeben, die sich auf die letzten drei Öffnungszeiten beziehen.

Code: Alles auswählen

Select * from Tab_Kunde where Öffnung in (select TOP(3) Öffnung from Tab_Kunde order by Öffnung desc)
Schritt2: Über das Ergebnis zählt man dann alle Vorkommen von "true" bei "Nein" oder -im Falle einer separaten Statustabelle s.o.- die Anzahl von Status_ID = 2. Ist das Ergebnis für einen Kunden =3, dann Serienbrief

Also würde folgende Abfrage alle Kunden listen, die die letzten 3 Male nicht erschienen:

Code: Alles auswählen

 
Select a.Vorname, a.Nachname, count(a.Nein) as anzahl
From
(
Select * from Tab_Kunde where öffnung in (select TOP(3) öffnung from Tab_Kunde order by öffnung desc)
) a
group by a.Vorname, a.Nachname
having count(a.Nein) =  3

Gruß Barlee

Re: Makro für wiederkehrende Termine

Verfasst: Sa, 06.09.2008 14:27
von Neuling77
Barlee hat geschrieben:Besser wären neue Zeilen. Und diese kann die DV Helferin durch einen Klick im Formular erzeugen. (Hinzufügen eines neuen Datensatzes). Mann kann die entsprechende Tabelle dann so einrichten, dass automatisch das aktuelle Datum (als wöchentlicher Termin) eingetragen wird.
Vielen Dank für Deine Tipps! Ich stelle doch fest, dass es mir an manchen Punkten einfach am (logischen) Sachverstand fehlt, der nötig ist, um solche Lösungen zu finden. Aber ich arbeite dran.

Eine Verständnisfrage habe ich zu Deinem Vorschlag: Wenn ich pro Woche eine Zeile anlege, dann sortiere ich meine Kunden doch in Spalten ein. Damit liegt diese Tabelle sozusagen "quer" zur Tabelle "Kunden", oder? So viel nur zum Verständnis.
Jetzt meine Probleme hierbei:
Zum einen ganz prinzipiell: Verstehe ich Dich richtig, dass ich sinnvollerweise eine Tabelle mit den Spalten "Ausgabetag" (über den verlinkten Vorschlag automatisiert), "KundenID" (aus der Tabelle "Kunden"), "anwesend/abwesend/entschuldigt" (aus der von dir vorgeschlagenen Status-Tabelle), "KundenID", "anwesend/abwesend/entschuldigt", "KundenID", "anwesend/abwesend/entschuldigt" usw. anlege?
Zum anderen variiert der Kundenstamm, weil Person rausfallen (bspw. durch eben jenes angesprochene Fernbleiben) oder dazukommen. Zerzeit sind es 75, es könnten aber 120 werden oder auch 30. Eine Verringerung scheint mir nicht so das Problem darzustellen, aber was passiert, wenn die Kundenmenge zunimmt?

Vielen Dank für Deine Hilfe soweit. Ich freue mich auf Dein nächstes Statement.

Re: Makro für wiederkehrende Termine

Verfasst: Sa, 06.09.2008 18:45
von Barlee
Hallo Neuling77,
Wenn ich pro Woche eine Zeile anlege, dann sortiere ich meine Kunden doch in Spalten ein
Nein, Du sortierst die Kunden in genau eine Spalte ein. Ebenso wie den Status.
Verstehe ich Dich richtig, dass ich sinnvollerweise eine Tabelle mit den Spalten "Ausgabetag" (über den verlinkten Vorschlag automatisiert), "KundenID" (aus der Tabelle "Kunden"), "anwesend/abwesend/entschuldigt" (aus der von dir vorgeschlagenen Status-Tabelle), "KundenID", "anwesend/abwesend/entschuldigt", "KundenID", "anwesend/abwesend/entschuldigt" usw. anlege?
Nein, mein Vorschlag ging in die Richtung, dass Du eine Tabelle erstellst mit den Spalten
-Ausgabetag
-Kunden_ID
-Status (mit der jeweiligen Status_ID) ODER separat die Spalten (anwesend, abwesend, entschuldigt)

Diese wird dann pro Ausgabetag gefüllt. Jeder Kunde wird in einer ZEILE für den jeweiligen Ausgabetag erfasst.
Also in etwa:
Ausgabetag, Kunden_ID, Status
06-09-08, 12, 0
06-09-08, 1, 2
06-09-08, 4, 1
13-09-08, 4, 2
...

Denkbar ist auch, dass Du generell nur Einträge für Kunden vornimmst, wenn sie anwesend oder entschuldigt waren. Ein fehlender Datensatz für einen Kunden an einem Ausgabetag weist dann -logischerweise- auf Abwesenheit hin
Damit eine solche Abfrage funktioniert, müsste in der Kundentabelle dann allerdings auch das "Eintrittsdatum" des Kunden erfasst werden. Denn wenn Kunde Nr 44 erst seit 01-12-07 Kunde ist, dann ist er natürlich in der Zeit davor nicht abwesend gewesen, da er ja noch kein Kunde war.
Zum anderen variiert der Kundenstamm, weil Person rausfallen (bspw. durch eben jenes angesprochene Fernbleiben) oder dazukommen. Zerzeit sind es 75, es könnten aber 120 werden oder auch 30. Eine Verringerung scheint mir nicht so das Problem darzustellen, aber was passiert, wenn die Kundenmenge zunimmt?
Damit bringst Du selbst ein gutes Argument, keine neue SPALTEN bei Erweiterung des Kundenstamms anzulegen. Das hieße ja, Du müsstest immer die Struktur der Tabelle (durch Hinzufügen/Löschen von Spalten) ändern. Von so einer Monstertabelle bei evtl. 120 Kunden einmal abgesehen. Stattdessen legst Du in der Kundentabelle einen neuen Kunden mit der Kunden_ID an und kannst diese Kunden_ID dann in der o.a. Tabelle weiterverwenden. Du hättest demnach pro Ausgabetag bei 75 Kunden auch 75 Datensätze und bei 30 dann entsprechend weniger und bei 125 Kunden dann mehr.
Sinnvoll wäre vielleicht in der Kundentabelle noch eine Spalte "Aktiv", in der man "Ja" und "Nein" erfassen kann, um jetzige von ehemaligen Kunden zu unterscheiden. Denn für Auswertungen können auch diese Infos sinnvoll sein.

Gruß Barlee

Re: Makro für wiederkehrende Termine

Verfasst: Mo, 08.09.2008 17:25
von Neuling77
Hallo Barlee!

Vielen dank soweit für Deine wirklich wertvollen Hilfestellungen. Dass manches viel einfacher funktioniert, als ich es mir gedacht habe (anderes dafür wesentlich komplexer ist), mache ich mir so langsam begreiflich.
Barlee hat geschrieben:Nein, mein Vorschlag ging in die Richtung, dass Du eine Tabelle erstellst mit den Spalten
-Ausgabetag
-Kunden_ID
-Status (mit der jeweiligen Status_ID)
So erledigt und klappt prima. An der Usability muss ich noch ein wenig schrauben, aber das wird schon.
Damit eine solche Abfrage funktioniert, müsste in der Kundentabelle dann allerdings auch das "Eintrittsdatum" des Kunden erfasst werden. Denn wenn Kunde Nr 44 erst seit 01-12-07 Kunde ist, dann ist er natürlich in der Zeit davor nicht abwesend gewesen, da er ja noch kein Kunde war.
Das Feld hatte ich von vorne herein vorgesehen, um unschön hohe (und sachliche falsche) Hausnummern bei den Fehltagen zu vermeiden. Irgendwie freuts mich, dass ich da "richtig" gedacht habe, auch wenn ich noch keine Ahnung habe, wie ich das umsetzen werde. Kommt aber später.
Sinnvoll wäre vielleicht in der Kundentabelle noch eine Spalte "Aktiv", in der man "Ja" und "Nein" erfassen kann, um jetzige von ehemaligen Kunden zu unterscheiden. Denn für Auswertungen können auch diese Infos sinnvoll sein.
Ebenfalls bereits im Vorfeld eingebaut. Dieser Klick soll auch in jedem Fall von Hand erfolgen, selbst wenn Kunden einmal zu häufig gefehlt haben.

Eine ganz woanders beheimatete Frage beschäftigt mich akut vordringlich. In der Vorgängerversion der Datenbank, die ich eher testweise erstellt habe, um mich mit Grundfunktionen vertraut zu machen, habe ich die Anzahl der Personen pro Kunde (also bspw. 2 Erw., 3. Kinder = 5 Pers.) manuell eingetragen und konnte dann über die Verknüpfung der Personensumme mit einer Tabelle "Preise" ausrechnen lassen, wie viel Geld welche Familie als symbolische Gegenleistung über die Theke schieben muss. Nun ermittle ich die Haushaltsgröße aber in der neuen DB über eine Ansicht, in der ich die Anzahl der Kinder und die der Erwachsenen summiere. Dummerweise scheint man aber nur Tabellen, nicht jedoch Ansichten oder Abfragen verknüpfen zu können, so dass mir diese (vergleichsweise einfache) Verbindung zwischen Personenanzahl und Ausgabepreis nicht mehr zur Verfügung steht. (Und ohne die Tabellen verknüpft zu haben, kriege ich natürlich nur elendig lange Listen, in denen jedem Kunde jeder Preis zugewiesen wird. )
Wäre es hier am einfachsten, die Haushaltsgrößen über CASE WHEN dem Preis zuzuordnen; es sind ja überschaubare Möglichkeiten, wenn man davon ausgeht, dass Haushalte i. d. R. nicht über 10 Mitglieder haben? Andererseits nehme ich der DV-Mitarbeiterin so die Möglichkeit, nachträgliche Preisänderungen unkompliziert einzupflegen.

Weißt Du Rat? Es würde mich sehr freuen.

Gruß Neuling

Re: Makro für wiederkehrende Termine

Verfasst: Mo, 08.09.2008 20:12
von Barlee
Hallo Neuling,
Dummerweise scheint man aber nur Tabellen, nicht jedoch Ansichten oder Abfragen verknüpfen zu können, so dass mir diese (vergleichsweise einfache) Verbindung zwischen Personenanzahl und Ausgabepreis nicht mehr zur Verfügung steht. (Und ohne die Tabellen verknüpft zu haben, kriege ich natürlich nur elendig lange Listen, in denen jedem Kunde jeder Preis zugewiesen wird. )
Nein, das ist nicht so. Ansichten (Views) verhalten sich wie Tabellen, die Du ansprechen; somit abfragen und auch verknüpfen kannst. Hast Du aus einer Abfrage einen View erstellt, wird dieser dann auch unter "Tabellen" in Base dargestellt.
Mit anderen Worten: "die elendig langen Listen" sind vermeidbar.

Gruß Barlee

Re: Makro für wiederkehrende Termine

Verfasst: Di, 09.09.2008 19:06
von Neuling77
Ok, beruhigend zu lesen.

Aber dann mal für Dumme:
Wie erstelle ich aus einer Abfrage eine View? (In der normalen Entwurfsansicht werden mir nur Tabellen als Datenquellen aufgelistet, und über SQL-Eingabe gibts nen Error.)
Meine Views tauchen nicht unter den verknüpfbaren Tabellen auf (sonst hätte ich die Frage ja nicht gestellt). Wie kann ich sie trotzdem einbinden?

Vielen Dank für Deine Geduld!

Re: Makro für wiederkehrende Termine

Verfasst: Di, 09.09.2008 19:50
von Barlee
Hallo Neuling,
Wie erstelle ich aus einer Abfrage eine View?
In der Base Übersicht>> rechte Maustaste auf Abfrage >> Als Ansicht erstellen >> View erscheint unter "Tabellen"

[[uote]Meine Views tauchen nicht unter den verknüpfbaren Tabellen auf (sonst hätte ich die Frage ja nicht gestellt). Wie kann ich sie trotzdem einbinden?[/[uote]
Wo tauchen sie nicht auf? Wie gesagt, Du findest Views unter "Tabellen".

Gruß Barlee

Re: Makro für wiederkehrende Termine

Verfasst: Di, 09.09.2008 20:14
von Neuling77
Barlee hat geschrieben:Wo tauchen sie nicht auf? Wie gesagt, Du findest Views unter "Tabellen".
Unter Extras>Beziehungen... habe ich nur "echte" Tabellen zur Auswahl, keine Views.

Re: Makro für wiederkehrende Termine

Verfasst: Di, 09.09.2008 21:03
von Barlee
Hast Recht. Ist aber kein Problem. Entweder gibt man diese dann in purem SQL in der Abfrage an (z.B. ... Tab1.ID=Tab3.ID...)
oder, wenn Dir die Abfrage-Entwufsansicht lieber ist, über Einfügen>>Relation. Hier werden Views angezeigt.

Gruß Barlee

Re: Makro für wiederkehrende Termine

Verfasst: Di, 21.10.2008 22:17
von Neuling77
Juchu! Ich habs gelöst!

Vielen Dank Barlee für Deine Mühe! (Ich weiß, dass es bisweilen recht mühselig sein kann, Naivlingen wie mir zu helfen.)

Ein Problem am Rande war, dass folgender Code nicht das gewünschte Ergebnis erzielte, weil der TOP-Befehl anscheinend anders gestrickt ist und wirklich nur die Tops ausgibt, insofern er bis zur gewählten Anzahl hochzählt und dann alle weiteren Ergebnisse dazu nimmt, die ebenfalls dem TOP-Inhalt entsprechen, was bei mir zur Konsequenz hatte, dass ich - egal ob über "TOP(1)", "(2)" oder "(73)" immer nur den ersten Ausgabetag bekommen habe:
Barlee hat geschrieben:Schritt1: Alle Datensätze aus der Kundentabelle werden zurückgegeben, die sich auf die letzten drei Öffnungszeiten beziehen.

Code: Alles auswählen

Select * from Tab_Kunde where Öffnung in (select TOP(3) Öffnung from Tab_Kunde order by Öffnung desc)
Ich habs gelöst, indem ich in einer separaten View die "Öffnungen" ausgelesen und das TOP über diese View habe laufen lassen. Vielleicht nicht "dc" ("datenverarbeitungsmäßig correct"), aber es arbeitet.

Re: Makro für wiederkehrende Termine

Verfasst: So, 26.10.2008 18:53
von Barlee
Hallo Neuling77,

freut mich, wenn ich helfen konnte. Auch freut mich, dass Du Deine Aufgabe gelöst hast!

Nochmal zum TOP Befehl. Wie Du gesehen hast, führen viele Wege zum Ziel. Du hast Dich für einen View entschieden, auf den Du TOP "loslässt".
Alternativ kannst Du auch DISTINCT mit in die Abfrage einbinden. DISTINCT ignoriert doppelte Einträge und würde, auf die Spalte "Öffnung" angewendet, alle Öffungszeiten nur einmal ausgeben. Anschließend wird TOP für diese eingeschränkte Menge benutzt.

Code: Alles auswählen

Select * from [Kundentabelle] 
where Öffnung in (select TOP(3) Öffnung from (select distinct Öffnung from [Kundentabelle])order by öffnung desc)
Gruß Barlee

Re: Makro für wiederkehrende Termine

Verfasst: So, 26.10.2008 19:01
von Neuling77
Barlee hat geschrieben:Auch freut mich, dass Du Deine Aufgabe gelöst hast!
Hallo Barlee,

danke für den weiterführenden HInweis! Dein Verfahren wirkt irgendwie eleganter, keine Frage. Aber mir gehts ja wirklich nur um zuverlässige Ergebnisse.

Gelöst ist meine Aufgabe damit leider noch nicht, denn mir fehlt noch die Übergabe dieser Daten in den fällig werdenden Serienbrief. Ich denke, dass mein Problem dabei dem hier viewtopic.php?f=8&t=20339 geschilderten sehr nahe kommt und freue mich nach wie vor auf Hinweise, die mich der Lösung ein bisschen näher bringen.

Gruß
Neuling