1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

SQL-Abfragen in Access

Discussion in 'Office-Programme' started by BugsBunnyII, Nov 25, 2005.

Thread Status:
Not open for further replies.
  1. Servus miteinander,

    ich hoffe, mir kann jemand mit folgendem Problem in Access helfen:

    Ich möchte über Access eins SQL-Abfrage erstellen, die folgendes "leisten" soll:
    Und zwar soll die Select Abfrage diverse Attribute zählen (über COUNT) und anschließend von den gezählten Werten den größten auswerfen (MAX()).
    Mir ist klar, dass ich hier mit der Anweisung MAX ( COUNT(*) ) arbeiten muss. Unter Oracle funktioniert das ganze auch, nur eben nicht unter Access. :heul:
    Soviel ich weiß, muss es irgendwo eine Option geben, mit der ich einstellen kann, dass geschachtelte Aggregatfunktionen möglich sind.

    Würde mich wirklich freuen, wenn mir jemand sagen könnte, wie da am besten dran gehe.
     
  2. annette65

    annette65 Kbyte

    Hallo,
    so wirkliche Hilfe habe ich nicht, aber bei meiner Recherche
    vor einem Jahr, Provider mit Access-Datenbankmöglichkeiten zu finden, war die Ausbeute sehr mager, zu kostspielig oder mit zuvielen Einschränkungen verbunden.

    Dabei habe ich von den Providern mit SQL-Datenbanken immer wieder zu hören bekommen, dass ich meine Access-Formular-Sachen nicht unter SQL einrichten könne.

    Möglicherweise geht Access gar nicht mit SQL konform.

    Ich lasse mich aber auch gerne vom Gegenteil überzeugen,
    da ich seinerzeit dass Thema erst einmal abgeschrieben habe.

    Grüße von Annette.
     
  3. racoon0506

    racoon0506 Kbyte

    @BugsBunnyII:
    verstehe ich die Aufgabenstellung nicht so richtig.
    Count zählt die Tabelleneinträge (Datensätze), bei denen ein ggf. vorhandenes Kriterium zutrifft.
    Max ermittelt den Maximalwert eines Feldes....

    Max(Count) würde jetzt den Maximalwert eines gezählten Wertes entsprechen....den es aber nur einmal gibt. Das ergibt in Access (und für mich) keinen Sinn.

    btw: Erstelle eine neue Abfrage. Über Ansicht - SQL kannst du dann direkt in das SQL-Fenster gelangen und dein Statement eingeben. Ist wahrscheinlich einfacher zu handhaben, wenn der Aufbau der Abfrage komplexer wird, als die Entwurfsansicht.....
    (darin können dann auch Funktionen geschachtelt werden - eine spezielle Option gibt es AFAIK nicht!)

    @annette65:
    unter SQL wird da ohnehin nichts eingerichtet, schon gar keine Formulare...
    wahrscheinlich war hier gemeint, dass du deine Access-DB nicht (ohne weiteres) direkt auf dem Server ausführen kannst bzw. für Datenzugriffsseiten ein Server benötigt wird, der ASP unterstützt und somit zwingend ein Microsoft-Server sein muss.

    Access verwendet sehr wohl SQL, wenn auch einen eigenen Dialekt. Das ist aber bei fast allen RDMS so. Man findet überall leichte Abweichungen.....
    Nebenbei gibt es diverse ODBC-Treiber, die es ermöglichen, mit einer Access-Anwendung auf Datenbanken im Web zuzugreifen.
    Z.B. MyODBC für MySQL-Datenbanken. Dadurch ist es durchaus machbar, jedes beliebige Webpaket mit Datenbankunterstützung aus Access heraus zu bedienen. (Man benötigt nur die Schnittstelle zu den Tabellen.)

    Aber zugegeben: Die Anwendung muss sehr gut an die Gegebenheiten angepasst werden. Die verschiedenen SQL-Eigenheiten (gerade wenn verschiedene Systeme miteinander arbeiten sollen) können sonst zu Problemen führen.

    CU
     
  4. annette65

    annette65 Kbyte

    Das bedeutet, wenn man nicht zwingend muss, sollte man
    nicht auf´s Anpassen scharf sein?

    Empfiehlt sich My SQL generell für Datenbankanwendungen,
    weil viele Provider das anbieten oder gibt´s Geeigneterere?

    Grüße, Annette.
     
  5. racoon0506

    racoon0506 Kbyte

    Es muss halt sauber programmiert werden.
    Oder anders ausgedrückt: Je nach verwendetem Datenbanksystem und dem verwendeten GUI sollte man die aktuellsten Treiber für die Schnittstellen verwenden.

    MySQL wird zum einen aus Kostengründen, zum anderen wegen der Flexibilität verwendet.
    Es ist garantiert günstiger (wenn nicht generell sogar kostenlos) als MS-SQL-Server und arbeitet sowohl unter Unix/Linux, als auch unter Windows.

    Ausserdem kann es aus den verschiedensten Anwendungen heraus bedient und gepflegt werden. Da spielt es keine Rolle, ob es sich um eine Datenbankanwendung handelt, oder PHP-Webseiten.
    Mit einem SQL-Server (MS) ist man da an ASP (für Webseiten) gebunden, was wiederum auch nicht so verbreitet eingesetzt wird.

    ------- schnipp ------
    Aber das hat ja mit dem ursprünglichen Thema nichts mehr zu tun.
    ------- schnapp -----
     
  6. Matmun

    Matmun Kbyte

    So ganz klar ist mir die Fragestellung auch noch nicht!

    Beispiel?

    Tabelle mit

    Feld1 Feld2 Feld3
    5 8 10
    3 2 5
    11 3 2

    Dann würde er doch bei Count 3 rauskommen, egal bei welchem Feld. Deshalb wäre max doch da auch immer 3 oder? Oder zählst du mehrere verschiedene Tabellen? Vielleicht erklärst du dein Problem mal anschaulicher!
     
  7. clkr

    clkr Byte

    Salut

    Ich bin mir nicht ganz sicher, ob's nicht auch anders geht, aber meist erzwingt das Cursorfreie Mini-SQL von Access den "Marsch mit der Kirche ums Dorf" :

    Zwei Abfragen hintereinander, wobei die erste den COUNT(1) in eine temporäre Tabelle einsetzt und die zweite daraus das Aggregat bildet.

    Abfrage 1 (so ungefähr, habe momentan kein SQL-Vademecum zur Hand)

    INSERT COUNT(1) AS PROPERTY1 FROM TABLEA INTO TEMP

    Abfrage 2
    SELECT MAX([TEMP].[PROPERTY1])AS MAXIMALWERT FROM TEMP

    Sodann ggf aufräumen:

    Abfrage 3
    DROP TEMP

    Adieu
     
  8. racoon0506

    racoon0506 Kbyte

    es ist relativ wurscht, ob man das über eine temporäre Tabelle oder direkt macht. Count gibt nunmal nur einen Wert zurück! und dieser Wert ist auch der Maximalwert....

    Ohne zu wissen, was hier wirklich passieren soll, wird das nur ein Rätselraten.
    sogar die Kristallkugel zeigt nur Nebel......
     
  9. clkr

    clkr Byte

    Salut


    Ich habe ein bewußt plakatives, kleines, einfaches Beispiel gewählt. Wenns halt direkt nicht geht, aus welchen Gründen auch immer, dann wollte ich den Weg aufzeigen, wie man sich behelfen kann. Was mit irgendwelchen Datenbank-Treibern für MySQL-DaBa geht, muß deswegen noch lange nicht mit Abszeß gehen, oder? Und dazu braucht man auch die hinterletzten Details dieser vor uns schamhaft verschwiegenen Problematik nicht zu kennen. Ich jedenfalls nicht.

    Adieu
     
  10. Matmun

    Matmun Kbyte

    Solange sich das Häschen nicht mehr meldet kommen wir hier nicht weiter.

    Es wäre auch toll, wenn er einfach nur sagt, das Problem hat sich erledigt (fals das inzwischen so ist).
     
Thread Status:
Not open for further replies.

Share This Page