Archiv verlassen und diese Seite im Standarddesign anzeigen : Access
Unregistered
2002-01-07, 10:24:41
Hi ihrs.
Ich bin ein ziemlicher Access neuling und mit programmcode kenn ich mich fast garnicht aus.
Daher die Frage , und am besten wärs ihr sagt mir gleich die einfachste Lösung
Also, ich hab ne Abfrage auf eine Tabelle in die Ereignisse zugehörig zu REchnern eingetragen werden.
Diese Rechner stehn also mehrmals darin, nun brauche ich die möglichkeit in der Abfrage auszuwerten, welcher Rechner am häufigsten bzw. wie häufig jeder Rechner in der Tabelle vorkommt.
Könnt ihr da weiterhelfen?
thx
Razor
2002-01-07, 11:17:54
Wenn Deien Daten aus mehreren Tabellen bestehen, dann ist's etwas komplizierter:
Lege hier eine Tablle 'Rechner' zugrunde (eindeutiger Schlüssel RechnerNr) und eine Tabelle 'Ereignisse' (eindeutiger Schlüssel EreignisNr, 'Rechner'-Bezug dann RechnerNr)
SELECT Rechner.RechnerNr, Rechner.RechnerName, Count(Ereignisse.EreignisNr) AS [Anzahl der Ereignisse pro Rechner]
FROM Rechner INNER JOIN Ereignisse ON Rechner.RechnerNr = Ereignisse.RechnerNr
GROUP BY Rechner.RechnerNr, Rechner.RechnerName;
Wenn es aber nur eine Tabelle ist dann folgendes:
Lege hier die Tabelle 'Ereignisse' zugrunde (eindeutiger Schlüssel EreignisNr, eindeutiger Bezeichner 'Rechner')
SELECT Ereignisse.Rechner, Count(Ereignisse.EreignisNr) AS [Anzahl der Ereigniss pro Rechner]
FROM Ereignisse
GROUP BY Ereignisse.Rechner;
Hoffe geholfen zu haben !
;-)
Razor
Unregistered
2002-01-07, 12:49:39
Originally posted by Razor
Wenn Deien Daten aus mehreren Tabellen bestehen, dann ist's etwas komplizierter:
Lege hier eine Tablle 'Rechner' zugrunde (eindeutiger Schlüssel RechnerNr) und eine Tabelle 'Ereignisse' (eindeutiger Schlüssel EreignisNr, 'Rechner'-Bezug dann RechnerNr)
SELECT Rechner.RechnerNr, Rechner.RechnerName, Count(Ereignisse.EreignisNr) AS [Anzahl der Ereignisse pro Rechner]
FROM Rechner INNER JOIN Ereignisse ON Rechner.RechnerNr = Ereignisse.RechnerNr
GROUP BY Rechner.RechnerNr, Rechner.RechnerName;
Wenn es aber nur eine Tabelle ist dann folgendes:
Lege hier die Tabelle 'Ereignisse' zugrunde (eindeutiger Schlüssel EreignisNr, eindeutiger Bezeichner 'Rechner')
SELECT Ereignisse.Rechner, Count(Ereignisse.EreignisNr) AS [Anzahl der Ereigniss pro Rechner]
FROM Ereignisse
GROUP BY Ereignisse.Rechner;
Hoffe geholfen zu haben !
;-)
Razor
vielen dank, ich konnte es leider noch nciht ausporbieren aber die 2.lösung sieht gut, aus.
Ich habe leider nur eine Abfrage!daraus habe ich aber jetzt die Tabelle EReignisse erstellt.
Anders geht es nicht da ich nicht weiß worauf die abfrage genau zugreift, das produkt wurd undokumentiert von jemand anders entworfen.
deine lösung müsste aber eigentlich gehn, nur hänge ich an einem problem, ich kann die ereignisnummer nicht als primärschlüssel nehmen, da sie eventuell doppelt vorkommen kann, da das ereignis sich ändern kann ,also der status kann wechseln und so wird der rechner mit dieser ereignisnummer mit 2 verschiedenen stati aufegeführt.
Allerdings wird bei jeder änderung die uhrzeit mitgelogt, und im feld datum (formatbeispiel: 06.01.2002 17:42:57) eingetragen. wäre es eventuell möglich, entweder den primärschlüssel anders zu belegen oder aber die frühere der beiden möglichen meldungen beim erstellen der tabelle einfach zu löschen??? Leider bin ich eben nicht sehr fit was das programmieren angeht, aber deine 2. lösung oben fand ich recht verständlich...
hoffe du kannt mir nocheinmal helfen.
danke schonmal
schönen Gruß
der wolf
Unregistered
2002-01-07, 14:21:31
so ich habs jetzt einigermaßen hingekriegt, frag mich net wie, hab im 3dcenter forum etwas programmcode bekommen und dann gedeichselt wies eben ging.
habe aus diversen gründen eine neue datenbank erstellt, das ging auf keinenfall anders, aus rein physikalischen gründen ;)
also, ich hab in der alten datenbank ne abfrage gemacht die in der neuen datenbank die tabelle ereignisse erstellt.
daraus erfrage ich nun in einer abfrage die anzal wie oft welcher rechner vorkommt, das funzt einwandfrei :)
dasselbe gilt für den status mit welchem er vorkommt, funzt auch. habe also 2 abfragen dafür.
tjo nun brauch ich aber einen bericht in dem praktisch alles drinsteht.
und zwar..
die 20 rechner die am häufigsten vorkommen , darin muss enthalten sein mit welchen alarmen sie vorkommen und auch andere felder die in der tabelle stehn, wie z.b. betriebssystem etc.
zusätzlich muss enthalten sein welche stati am häufigsten vorkamen, völlig unabhängig vom rechner...
ohman, und berichte kann ich überhaupnet harr......
dabei hatte ich das alles so schön in ein formular gepackt
:( mit lauter unterformularen, aber das gefällt meinem chef net der will nen bericht...hm.....fallsde da noch irgendwie durchblickst und nen tipp geben kannst dann tus :)
bye
Unregistered
2002-01-07, 15:16:21
so
ich hab jetzt den bericht per button direkt aus dem formular gemacht. is ja schön easy, aber dabei gibts wie imma probs, z.b. sind die Daten die im Unterformular stehn immer etwas nach links verschoben was total doof aussieht, wohlgemerkt nur im Bericht ist das so, im formular siehts normal aus.
Ausserdem hab ich keine ahnung wie ich da jetzt ein logo oder so einfügen kann, der bericht soll schliesslich ein schönes designt haben. muss ich das im button mitgebgen oder erstellt der den jedesmal so wie ich den ebricht einmal gefertigt habe?
Unregistered
2002-01-08, 09:26:25
jetzt hab ich noch eine Frage und zwar, erstmal noch zum Formular, bzw. der abfrage worauf es basiert.
wie kann ich einrichten dass nur die 1. 20, also die 20 Rechner mit den meisten Datensätzen angezeigt werden. muss ich das in der abfrage machen oder geht das noch im formular bzw. sogar im bericht?
danke
schönen Gruß
der wolf
Razor
2002-01-08, 11:20:15
Oye Wolf, das sind aber 'ne Menge Fragen...
;-)
Also dann versuche ich das mal.
Ad1: Doppelte Stati vermeiden
Du hättest die Abfrage einfach nur auf den Initial-Status eingrenzen müssen. Das Ganze hätte dann wie folgt ausgesehen:
SELECT Ereignisse.RechnerNr, Count(Ereignisse.EreignisNr) AS [Anzahl der Ereignisse pro Rechner mit Status 1]
FROM Ereignisse
WHERE (Ereignisse.Status=1)
GROUP BY Ereignisse.RechnerNr;
Ad2: Nur Stati zählen
Im Prinzip funzt das genauso, wie bei den Rechner und sieht so aus:
SELECT Ereignisse.StatusNr, Count(Ereignisse.EreignisNr) AS [Anzahl der Ereignisse pro Status]
FROM Ereignisse
GROUP BY Ereignisse.StatusNr;
Ad3: Auswerten dieser Abfrage
Der Button im Formular (ich vermute einen Formularbasierten Auto-Bericht ;-), ist leider gänlich ungeeignet, da dieser automatisch Formatiert wird und somit in seiner Gestaltung kaum oder gar nicht beeinflußbar ist...
Es gibt da eigentlich 2 Lösungen.
Lösung 1 (Ad3):
Du erstellst einen neuen Bericht (mit Berichtskopf etc.) und ziehst Deine Unterfromulare direkt in diesen Bericht (hört sich merkwürdig an, funktioniert baer ganz hervorragend ;-). Ist sicher der einfachere Weg, aber leider auch etwas 'unschön', da man wohl nicht so ganz die Gestaltung hinbekommt, die man haben möchte. Kommen wir also zur Lösung 2...
Lösung 2 (Ad3):
Du erstellst für jede Abfrage (oben Ad1 und Ad2) einen eigenen bericht ohne den Berichtskopf etc. Die beiden neuen Berichte enthalten also die beiden Teildarstellunmgen ("Ereignisse pro Rechner mit Status 1" und "Ereignisse pro Status"). Nun erstellst Du einen dritten Bericht, der dann den Briefkopf etc enthält. In diesen ziehst Du nun einfach die beiden anderen berichte hinen und so entsteht (wie bei den Formularen ja auch) eine Haupt-/Unterberichts-Konstruktion, die Du nach belieben in seiner Darstellung verändern kannst...
Ad4: nur die ersten Datensätz anzeigen
Damit nur eine bestimmte Anzahl von Datensätzen angezeigt wird, benutzt man das Schlüsselwort TOP. Da Du aber sicher auch eine Reihenfolge hinterlegen willst, also zum Beispiel "nur die ersten 20 Rechner mit den meisten Ereignissen" darstellen möchtes, brauchst Du zusätzlich noch eine Sortierungsklausel, die mit ORDER BY beschrieben wird.
Wo Du das letztendlich machst, ist zeimlich egal, da sich auch Berichte oder Formulare letztendlich via Abfrage auf die Daten beziehen (siehe 'Datenherkunft' bzw. 'RecordSource' in den Formular- bzw. Berichts-Eigenschaften).
Insofern beziehen wir uns einfach auf die vorgenannten Abfrage und erstellen nun neue Abfragen. Die alten Abgfragen nenne ich hier einfach 'qryAd1' und 'qryAd2'...
Hier nun auf das Beispiel Ad1 bezogen:
SELECT TOP 20 qryAd1.Rechner, qryAd1.[Anzahl der Ereignisse pro Rechner mit Status 1]
FROM qryAd1
ORDER BY qryAd1.[Anzahl der Ereignisse pro Rechner mit Status 1] DESC;
Das 'TOP 20' gibt an, daß nur die ersten 20 Datensätze ausgegeben werden, die 'ORDER BY'-Klausel sagt dann noch, wie die zugrunde liegenden Daten sortiert werden sollen (woraus sich dann ja auch eine TOP20 im eigenlichen Sinne ergibt ;-). Das 'DESC' gibt an, daß absteigend sortiert werden soll, somit also die höchsten Werte zuerst erscheinen...
Bei der Status-Zählung macht die Ausgabe nur der ersten Datensätze wahrscheinlich keinen Sinn, aber die Reihenfolge ist wichtig und vielleicht sollen ja auch nur die ersten 5 Stati ausgegeben werden. Ein diesbezügliches Beispiel also hier:
SELECT TOP 5 qryAd2.Status, qryAd2.[Anzahl der Ereignisse pro Status]
FROM qryAd2
ORDER BY qryAd2.Status;
Diese neuen Abfragen kannst Du übrigens als neue Abfragen speichern, oder wenn sie eben nur in einem Bericht oder einem Formular gebraucht werden, auch direkt in der 'Datenherkunft' des Objektes (also dem Bericht bzw. dem Formular) selber...
-
Ich hoffe, daß Dir die Zusammenhänge nun klarer geworden sind und ich Dir helfen konnte...
Sicher kannst Du aus den hier gezeigten Beispielen auch für Dich passende Konstruktionen herleiten. Wenn nicht, melde Dich einfach nochmal !
;-)
Bis dann und much fun !
Razor
Unregistered
2002-01-08, 12:15:03
hi razor,
vielen dank für deine lange antwort.
die top 20 hab ich schon rausgefunden :)
ansonsten warste ne gute hilfe thx.
übrigens, den bericht per button einfach automatisch auf das formular zu machen ist garnicht so schlecht, denn danach kannst du das format auch beliebeg gestalten , er wird jedesmal in dem format und mit den farben,bildern etc. wieder erstellt werden die du einmal einstellt hast.der bericht wird sozusagen nur um daten ergänzt wenn er neu gemacht wird aber dein einmal gestaltetes layout bleibt.
bye
der wolf
Razor
2002-01-08, 21:42:55
Na da hat doch was, wolf...
;-)
Dann mal viel Spaß damit !
Razor
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.