online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon Main vom 13.08.2022, 16:54 Options

Lösung

Access 2007 "validation rule" und "count" Funktion

Hallo!

Ich möchte gerne in meiner Access Datenbank mittels "validation rule" den Benutzer dazu zwingen ein Feld mit 4 verschiedenen Statustexten zu füllen (in diesem Fall "none", "weak", "good" und "strong").
Kann mir bitte jemand dabei helfen den entsprechenden Befehl dafür ausfindig zu machen?
Des weiteren möchte ich gerne mit der "count" Funktion in einer Abfrage die Häufigkeit des auftretens bestimmter Einträge von Zellen berechnen. Man sollte dann bspw. den Namen des eintrages sehen und die entsrechende Häufigkeit mit der er in einer Tabelle vokommt.
Anschließend würde ich gerne die Summe einer als "number" definierten Zelle berechnen, welche mit einem anderen Eintrag zusammenhängen (bspw. sie Summe aller Mitarbeiter die einem bestimmten Vorgesetzten unterstellt sind).

Ich bitte um euren Rat bei dieser Problemstellung.

Danke!
Gruß, Main


Antwort schreiben

Antwort 1 von Marie vom 14.08.2022, 00:32 Options

zu1:
Zitat:
Ich möchte gerne in meiner Access Datenbank mittels "validation rule" den Benutzer dazu zwingen ein Feld mit 4 verschiedenen Statustexten zu füllen (in diesem Fall "none", "weak", "good" und "strong").


Also auf deutsch heisst das Gültigkeitsregel. Du musst einfach in der Entwurfsansicht der Tabelle bei jedem Textfeld "Ist Nicht Null" in das Feld Gültigkeitsregel schreiben. Aber was verstehst Du unter Statustexten??? Hab ich jetzt doch was falsch verstanden?

zu 2:

Zitat:
Des weiteren möchte ich gerne mit der "count" Funktion in einer Abfrage die Häufigkeit des auftretens bestimmter Einträge von Zellen berechnen. Man sollte dann bspw. den Namen des eintrages sehen und die entsrechende Häufigkeit mit der er in einer Tabelle vokommt.


Auch hier bin ich nicht sicher, ob ich Dich richtig verstanden habe. Wenn Du alle Einträge gleichzeitig angezeigt haben möchtest, dann machst Du eine Kreuztabelle und nimmst Anzahl. Wenn nicht sag mal genauer was Du wo angezeigt haben möchtest? Ob Du nur einen Wert in einer MSGbox haben möchtest oder über eine Inputbox oder Parameterabfrage den Ausdruck selbst eingeben möchtest dessen Häufigkeit gezählt werden soll.

Das letzte kannst Du auch mit einer kreuztabelle erledigen

Gruß marie

Antwort 2 von Main vom 14.08.2022, 10:26 Options

Hallo Marie!

Ein paar Sachen habe ich mittlerweile durch einfaches ausprobiren herausgefunden. Ich hab bloß noch ein paar kleinere Probleme.
Ich möchte wie gesagt gerne die häufigkreit eines bestimmten Eintrages in einer Tabelle zählen. In meinem fall sieht die Sache so aus:
Tabelle: Commanders
Name
Vorname

Tabelle: Battles
Location
Commanders in service
Soldiers killed in action

Ich würde jetzt gerne die Namen aller Kommandeure anzeigen lassen und die Anzahl der Schlachten an denen sie teilgenommen haben, wo mehr als 1000 Soldaten gestorben sind. Jetzt weiß ich zwar wie ich die Kommandeure anzeigen lasse die an einer Schlacht mit ">1000 [Soldiers killed in action]" teilgenommen haben, ich krieg's nur nicht gebacken, dass mir die Abfrage bei den Kommandeuren, die in keiner solchen Schlacht gewirkt haben, eine 0 (Null) anzeigt.

Des weiteren müsste ich ein "form" erstellen (Ich glaube in der deutschen Access Version heißt es "Formular"), welches mir die Kommandeure anzeigt, und eine Liste mit den Schlachten an denen jeder einzellne teilgenommen hat. Ich krieg's nicht hin, weil ich immer nur den ersten Namen angezeigt bekomme und darunter eine Liste "ala Screenshot" mit allen Schlachten die in der "Battles" Tabelle drinstehen anstatt nur jene die dieser bestimmte Kommandeur gefochten hat.

Das mit den Statustexten hätte ich mir eher so vorgestellt, dass mann den Benutzer auf die Eingabe dieser vier Wörter ("none", "weak", "good" und "strong") beschränkt. Diese beschreiben die Verteidigungsstärke einer Region. Die Tabelle dafür sieht so aus:

Tabelle: Regions
Name
Capital
Population
Status of Defence (das ist dieses vier-Wege Feld)
Competitor


Ich bedanke mich für deine nette Hilfe und hoffe, dass meine Erklärung mehr Klarheit in die Sache bringt.

LG, Main

Antwort 3 von Marie vom 16.08.2022, 21:53 Options

Also ich blicke jetzt nicht wirklich mehr durch, weil Du drei Fragen auf einmal stellst. Belass es mal hier mit der ersten Frage und stell Frage 2 und drei bitte in getrennten Postings.

Zitat:
ich krieg's nur nicht gebacken, dass mir die Abfrage bei den Kommandeuren, die in keiner solchen Schlacht gewirkt haben, eine 0 (Null) anzeigt.


mit einer If Abfrage. Oder aber Du trägst eine 0 als Standard in die Tabelle ein. Poste mal deinen SQL Code der Abfrage hier rein, dann korigier ich Dir das. Also Ansicht SQL, dann kopierst Du den gesamten Code und stellst ihn als Code hier rein. Ferner musst Du mir noch sagen, ob Commanders in service und Soldiers killed in action Zahlenfelder oder Textfelder sind.

Gruß marie

Antwort 4 von Marie vom 16.08.2022, 22:04 OptionsLösung

Lösung
Zitat:
Das mit den Statustexten hätte ich mir eher so vorgestellt, dass mann den Benutzer auf die Eingabe dieser vier Wörter ("none", "weak", "good" und "strong") beschränkt. Diese beschreiben die Verteidigungsstärke einer Region. Die Tabelle dafür sieht so aus:


das ist auch ganz einfach, wenn in der gesamten Tabelle nur die vier Wörter vorkommen dürfen, dann schreibst Du in der Entwurfsansicht der Tabelle unter Gültigkeitsregel:

"none" Oder "weak" Oder "good" Oder "strong", dann kommt eine Fehlermeldung wenn jemand etwas anderes eintragen will. Dann kann aber auch kein Datensatz ohne Eintrag in dem Feld abgespeichert werden, es sei denn Du schreibst noch dahinter Oder Ist Null. Unter "Gültigkeitsmeldung schreibst Du dann den Text, der als meldung erscheinen soll, also zum Beispiel "Bitte nur "none", "weak", "good" oder "strong" eintragen.

gruß marie

Antwort 5 von Main vom 16.08.2022, 23:17 Options

Antwort zu 1:

SELECT Commanders.Name, Commanders.Surname, Count(Battles.Commanders.Value) AS CountOfCommanders_Value
FROM Commanders INNER JOIN Battles ON Commanders.Name = Battles.Commanders.Value
GROUP BY Commanders.Name, Commanders.Surname
HAVING (((Battles.[Soldiers killed in action])>1000));

Commanders in service und soldiers killed in action sind beides "Look up Wizard" Felder mit Bezug auf einer anderen Tabelle.

Antwort 6 von Main vom 16.08.2022, 23:21 Options

Anwort auf 2:

Problem gelöst! Danke für den guten Vorschlag! :)

Antwort 7 von Main vom 16.08.2022, 23:24 Options

Frage 3: Das Formular

Des weiteren müsste ich ein "form" erstellen (Ich glaube in der deutschen Access Version heißt es "Formular"), welches mir die Kommandeure anzeigt, und eine Liste mit den Schlachten an denen jeder einzellne teilgenommen hat. Ich krieg's nicht hin, weil ich immer nur den ersten Namen angezeigt bekomme und darunter eine Liste "a la Screenshot" mit allen Schlachten die in der "Battles" Tabelle drinstehen anstatt nur jene die dieser bestimmte Kommandeur gefochten hat.

Antwort 8 von Marie vom 17.08.2022, 13:51 Options

Zitat:
Ich würde jetzt gerne die Namen aller Kommandeure anzeigen lassen und die Anzahl der Schlachten an denen sie teilgenommen haben, wo mehr als 1000 Soldaten gestorben sind. Jetzt weiß ich zwar wie ich die Kommandeure anzeigen lasse die an einer Schlacht mit ">1000 [Soldiers killed in action]" teilgenommen haben, ich krieg's nur nicht gebacken, dass mir die Abfrage bei den Kommandeuren, die in keiner solchen Schlacht gewirkt haben, eine 0 (Null) anzeigt.


Das habe ich überhaupt nicht verstanden. Wo soll eine 0 angezeigt werden? Ich dachte Du willst nur die >1000, da kann doch nirgendwo eine 0 sein???

Und äh, helfe ich Dir da gerade ein Gemetzelspiel zu programmieren??? :-(

Antwort 9 von Marie vom 17.08.2022, 13:56 Options

zu 3 kann ich Dir auch keine Antwort geben, weil ich nicht weiss was Du gemacht hast und nicht genau was Du willst. Da müsstest Du schon genauer formulieren wie das Formular aussehen soll und was weshalb nicht funktioniert.

Gruß Marie

Antwort 10 von Main vom 17.08.2022, 15:13 Options

Zu 2:

Nene, keine Sorge, dass is nur ne historische Datenbank für ein Projekt an der Uni.
Also, das mit der 0 war so gemeint:
Wenn ich die Abfrage anschauhe, dann zeigt es mir nur jene Feldherren an die in einer Schlacht gewirkt haben, bei der es mehr als 1000 Gefallene gegeben hat (es wird dann die Anzahl dieser Schlachten neben dem Namen angezeit). Demensprechend zeigt es mir aber jene Feldherren die keine so hohen Verluste hatten nicht an. Hier käme jetzt die Null (0) ins Spiel. Ich muss notwendigerweise mir alle Feldherren anzeigen lassen (hat mir mein Prof. so vorgeschrieben). Da aber von 117 nur 87 in Schlachten mit mehr als 1000 Gefallenen mitgewirkt haben, ist meine Liste unvollständig und ich würde gerne neben den anderen 30 eine einfache 0 bei der Anzahl stehen haben.
Klar soweit?

Danke
Gruß, Main

Antwort 11 von Main vom 17.08.2022, 15:25 Options

Zu Formular:

Das mit dem Formular ist ein bisschen schwierig zu erklären. Der Wortlaut meines Professors lautet folgendermaßen:

"build a form to view commanders with the battles to which he (every single commander) participated. Lock the form to avoid only battle modification and commander deletion".

Jetzt habe arbeite ich mit zwei Tabellen:

Tabelle: Battles Tabelle: Commanders
Location Name
Armies in action Surname
Commanders Year of Birth
Year Rank
Enemy
Enemy defeated

Wenn ich jetzt aber "Name" und "Surname" von der "Commanders" Tabelle und "Location" von der Battles Tabelle als Anzeige verwende, bekomme ich als Ergebnis ein Formular, welches mir nur den ersten Namen der Commanders anzeigt und darunter eine Liste die aussieht wie ein Screenshot, jedoch mit Scrollbalken, mit allen Schlachten der "Battles" Tabelle.
Ich will aber nur die Schlachten in der Liste haben, die vom jeweiligen Feldherren geschlagen worden sind. Ich krieg's nicht hin.

Gruß, Main

Antwort 12 von Main vom 17.08.2022, 15:37 Options

Die Tabellen sollten eigentlich nicht so aussehen, ich schreib sie untereinander:

Tabelle: Battles
Location
Enemy
Armies in action
Commanders
Year
enemy defeated

Tabelle: Commanders
Name
Surname
Year of birth
Place of birth
Associated region
Rank

Antwort 13 von Marie vom 19.08.2022, 00:15 Options

Zitat:
Wenn ich die Abfrage anschauhe, dann zeigt es mir nur jene Feldherren an die in einer Schlacht gewirkt haben, bei der es mehr als 1000 Gefallene gegeben hat
Ja klar, so hattest Du es ja auch formuliert.

Ich habe jetzt mal vereinfacht eine einzige Tabelle namens Commanders erstellt und die zwei Felder Commandername und battles. Müsste natürlich anders heißen, macht ja nix. Dann hab ich eine Abfrage gemacht die das zwar tut was Du möchtest, hab aber noch nen Fehler drin, denn ich bekomme eine Abfrage. Aber trotzdem siehst Du ja, wie Du ansetzen musst, damit die Commanders < 1000 auch und mit 0 angezeigt werden.

SELECT commanders.commandername, Sum(commanders.battles) AS [Summe von battles], IIf([Summe von battles]>999,[Summe von battles],0) AS soldiers
FROM commanders
GROUP BY commanders.commandername, IIf([Summe von battles]>999,[Summe von battles],0)
ORDER BY commanders.commandername;


Sorry, bin jetzt zu faul zwei Tabellen anzulegen und so zu nennen wie Du, musst ja auch bissel selber machen :-))

gruß marie

Antwort 14 von Marie vom 19.08.2022, 00:26 Options

Das mit Deinem Formular hab ich immer noch nicht verstanden, kann aber auch an mir liegen heute.

Ich denke Du kriegst es nicht hin ein Unterformular einzubinden? Habe aber immer noch nicht kapiert ob Du pro Commander eine Seite haben musst oder alles in einer Liste. Aber Du solltest eh mal was selbst machen. Schau Dir bitte die Nordwind datenbank an, da sind solche beispiele mit Kunden und bestellungen. Dort ist das was Du suchst. Probier mal selbst und wenn Du dann noch nicht klarkommst schreibst di wie du es probiert hast und was nicht geklappt hat.

Vielleicht ist es auch nur das was Du suchst?

Zitat:

1. öffne das Hauptformular im Entwurfsmodus
2. aktiviere dein Unterformular
3. gehe jetzt im Eigenschaftsfenster auf den Raiter "Daten"
4. Jetzt müsstest du sehen: "Verknüpfen von.." und "Verknüpfen nach.."
5. gehe in eines der Eigenschaften und öffne den Verknüpfungsassitent (rechts die drei ...)
6. Jetzt musst du nur die Felder für deine Verknüpfung auswählen
7. und alles Bestätigen

Antwort 15 von Main vom 19.08.2022, 09:25 Options

Hallo Marie!

Danke für die Lösungsvorschläge! Ich werd dann mal versuchen ob ich das so hinbekomme!
Recht herzlichen Dank für die Hilfe!

LG, Main

Ähnliche Themen

Access 2007 Syntaxproblem
Konrad2  28.02.2009 - 138 Hits - 2 Antworten

Code am Access 2000 Funktuoniert nicht auf Access 2007
Gertrude  28.06.2010 - 149 Hits - 3 Antworten

Access 2007 Tabellenverknüpfung
TinTin  07.07.2010 - 246 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026