collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 60
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13996
  • stats Beiträge insgesamt: 66787
  • stats Themen insgesamt: 9006
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Verzwickte Abfrage, bei der ich nicht weiß, wie ich sie formulieren soll  (Gelesen 1048 mal)

Offline DarkBahamut

  • Newbie
  • Beiträge: 2
Hallo liebe Community. Bisher war ich immer nur als stiller Leser hier auf dieser Plattform (und auch anderen) unterwegs. Nun weiß ich jedoch wirklich nicht mehr weiter, und bin auch nicht wirklich sicher unter welchem Begriff ich mein Problem im Internet finden kann. Ich versuche es mal so detailliert wie möglich zu beschreiben:

Ich habe eine Datenbank mit verschiedenen Videoaufnahmen. Jede Aufnahme kann mit 1-9 Kameras gefilmt worden sein, die allesamt eine feste Position haben. Um nun die Information über die benutzten Kameras UND auch deren Positionen in der Datenbank abzuspeichern habe ich folgendes gemacht: Jeder der Kamera hat einen gewissen Wert. Addiert man alle zusammen erhält man sowohl Die Info wie viele Kameras an waren, wie auch in welcher Kombination.

Cam1 hat den Wert 1
Cam2 hat den Wert 2
Cam3 hat den Wert 4
Cam4 hat den Wert 8
Cam5 hat den Wert 16, usw.
(Ich weiß nicht, ob es dafür einen Fachausdruck gibt... aber vielleicht kennt ihn ja jemand.)

Sind z.B. Kamera 1 und 2 gelaufen, gäbe es im dazugehörigen Datenfeld die Zahl 3, laufen alle 9 Kameras, komme ich auf 511.
Das Ganze funktioniert sehr gut.

Nun aber mein Problem. Ich möchte eine Query mit VBA gestalten. Dazu klicke ich die Kameras in einem grafischen Interface an, die unbedingt gelaufen sein müssen. Access soll mir nun Datensätze liefern, die die gewünschten Kamerapositionen beinhalten. Allerdings weiß ich nicht, wie ich das technisch umsetzen soll.

Ich habe schon 2 Regeln aufgestellt, die erfüllt sein müssen, damit es klappt. Wie ich diese in Access abfragen soll, weiß ich jedoch nicht.

Wenn ANFRAGE die Summe der gesuchten Kameras ist und DAT_ZAHL die zu vergleichende Zahl im Datensatz gilt:

1) ANFRAGE >= DAT_ZAHL
2) DAT_ZAHL - ANFRAGE muss 0 oder ein Wert der Kameras sein (1,2, 4, 8, 16, 32, 64, 128 oder 256)

Access soll mit Datensätze anzeigen, für die beide Bedingungen erfüllt sind, dann wäre ich glücklich! Müsste ich nur zwei Zahlenwerte miteinander vergleichen und verrechnen wäre ja alles kein Problem, aber ich Muss ja Wert1 aus der Anfrage je einem Wert2 aus den Datzensätzen verrechnen und dann nur die anzeigen, für die das ganze zutrifft.

So ich hoffe, dass irgendjemand nachvollziehen kann, was ich zu erklären versuche. Noch schöner wäre es natürlich, falls da jemand Tipss auf Lager hat, wie ich das ganze nun umsetzen kann.

Cheers,
DarkBahamut

P.S. Falls jemand ne Idee hat, wie ich mein Problem besser benennen kann, änder ich sehr gerne den Titel des Threads.
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7317
Hallo,
sind die Kameras einem Ereignis zugeordnet ?
Also einer bestimmte Aktion oder was auch immer da aufgenommen wird .

Zitat
über die benutzten Kameras UND auch deren Positionen
Was ist da mit Positionen gemeint ? Der Standort der Kamera ?
Sind das allgemeine Positionsnamen oder wechseln diese Positionsnamen ?

Erkläre das Vorhaben mal genauer, ich würde das nämlich grundsätzlich anders lösen. Mehr datenbankkonform. In einer Datenbankspalte legt man eine Information ab, aber die Zahl beinhaltet ja mehr als eine Info. Aber für einen Vorschlag bräuchte ich da noch weitere Infos.
Gruß
Klaus
 

Offline DarkBahamut

  • Newbie
  • Beiträge: 2
Es sind Kameras an einem Auto.
Jede Kamera hat eine feste - nicht veränderliche Position, die immer den gleichen Zahlenwert zugewiesen bekommt. Somit lassen sich AN/AUS Status jeder Kamera in jeder Kombination eindeutig in einen einfach Zahlenwert übertragen und umgekehrt. (siehe Bilder)

 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7317
Hallo,
die ersten beiden Fragen sind nicht beantwortet.
Mit andern Worten, ich wollte wissen, ob da bestimmte Ereignisse aufgenommen werden.
Zitat
Somit lassen sich AN/AUS Status jeder Kamera in jeder Kombination eindeutig in einen einfach Zahlenwert übertragen und umgekehrt. (siehe Bilder)
Aber dass das datenbankkonform ist, darf bezweifelt werden.
Man könnte sich da auch eine 1:n Beziehung mit einer extra Tabelle vorstellen, bei der in dieser Tabelle nur die Kameras eingtragen werden die beteiligt sind. Auswahl per Kombifeld. Also wenn 3 Kameras laufen sind das 3 Datensätze mit der ID der Kamera.
Zitat
Access soll mir nun Datensätze liefern, die die gewünschten Kamerapositionen beinhalten.
Das dürfte dann eine einfach Auswahlabfrage werden mit der ID der gesuchten Kamera als Kriterium.
Gruß
Klaus
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1261
Du kannst zwar das Bitset abfragen und manipulieren (ADO hat auch Operatoren, die bitweise arbeiten: BAND, BOR - DAO jedoch nicht). In einer relationalen Datenbank, fährt man besser mit einer m:n-Beziehung, um Zustände der Objekte festzuhalten.

Trotzdem hier ein Beispiel aus dem VBA-Direktbereich:'prüfe Kameras in Wert 13

? (13 And 2^0) = 2^0
True 'Kamera 1 an

? (13 And 2^1) = 2^1
False 'Kamera 2 aus

? (13 And 2^2) = 2^2
True 'Kamera 3 an

? (13 And 2^3) = 2^3
True 'Kamera 4 an

? (13 And 2^4) = 2^4
False 'Kamera 5 aus
Grüße von der (⌒▽⌒)
 

Offline markus888

  • Access-Profi
  • **
  • Beiträge: 198
Ich finde eine Lösung mit BitMask grundsätzlich vorteilhaft, wenn es um beliebige Kombinationen geht.
Vor allem kann man auch sagen. Kamera 1 + 3 müssen an sein. Kamera 2 muss aus sein. Dass läßt sich genauso einfach abfragen (Value AND 7) = 5.

LG M
« Letzte Änderung: Januar 23, 2018, 21:54:48 von markus888 »
10 Jahre Access
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7317
Hallo,
warum so kompliziert für diese einfache Aufgabe.
Da die Kameras festen Postionen zugeodnet sind, sehe ich da auch keine n:m Beziehung, sondern eine einfache 1:n Beziehung. Dabei werden die aktiven Kameras als je ein Datensatz in der n-Tabelle erfasst.
So kann auf einfache Art bestimmt werden welche Kameras im Einsatz waren und umgekehrt.
Und so was:
Zitat
Access soll mir nun Datensätze liefern, die die gewünschten Kamerapositionen beinhalten.
wird dann wirklich zum Kinderspiel.
Gruß
Klaus
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1261
Das ist richtig - ein einfacher An/Aus Zustand ist natürlich zunächst einmal nur eine 1:n-Beziehung, die aber zu einer m:n-Beziehung ausbaufähig ist. :)

@Markus,

aus der Sichtweise eines Programmierers hast Du Recht, unterliegst aber der Einschränkung von maximal 32 Items auf 32-Bit Systemen. In einem relationalen Datenmodell würden jedoch die Beziehungen verschleiert sein und das DB-System kann sie demzufolge auch nicht nutzen. Und wie schon vorher gesagt, funktionieren die Bit-Operationen in Jet-/Access-SQL nur, wenn ANSI-92 kompatible Syntax in der DB aktiviert ist.SELECT 28 Band 7 AS X1,
       23 Band 7 AS X2,
       13 Band 7 AS X3;
Grüße von der (⌒▽⌒)
 

Offline markus888

  • Access-Profi
  • **
  • Beiträge: 198
Das ist richtig - ein einfacher An/Aus Zustand ist natürlich zunächst einmal nur eine 1:n-Beziehung, die aber zu einer m:n-Beziehung ausbaufähig ist.

Das wäre für mich dann eine Neudefinition von 1:n.
1:n heißt für mich die einer Seite kann mit mehreren Elementen auf der N Seite verbunden sein.
Auf der N Seite hat jedes Element nur ein Element der einer Seite, so dass man auf der N Seite den Fremdschlüssel einfügen kann.
Bei m:n hingegen, kann jedes Element auf jeder Seite mit mehreren Elementen in Verbindung stehen.

Zitat
Jede Aufnahme kann mit 1-9 Kameras gefilmt worden sein.
entspricht wohl keines Falls 1:n

Zitat
unterliegst aber der Einschränkung von maximal 32 Items auf 32-Bit Systemen. In einem relationalen Datenmodell würden jedoch die Beziehungen verschleiert sein und das DB-System kann sie demzufolge auch nicht nutzen. Und wie schon vorher gesagt, funktionieren die Bit-Operationen in Jet-/Access-SQL nur, wenn ANSI-92 kompatible Syntax in der DB aktiviert ist.

Jedes Modell hat Vor- und Nachteile. Ich meine es geht nur darum in welchem Kontext welche Vorteile überwiegen. Bei einem Access Backend mit 32 Bit, lasse ich die Aussage fast gelten. Nicht jedoch bei einem anderen Datenbanksystem. Bei Access Backend kann man auch noch eine UDF einsetzen, da gibt es dann die Möglichkeit Dezimal einzusetzen und bis zu 93 Bit zu nutzen. Allerdings müsste man die Funktion für den Bit Vergleich selbst schreiben (habe ich mal zum Spaß gemacht). Aber bei 9 Kameras stellt sich die Frage eh nicht. Ich verwende gerne diese Bitmasken, weil ich bei einem ADO Clientcursor damit Daten im Frontend (natürlich mit einem selbst geschriebenen Filter) direkt filtern kann.
« Letzte Änderung: Januar 24, 2018, 11:32:35 von markus888 »
10 Jahre Access
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1261
@Markus,

* mit ausbaufähig meine ich das Hinzufügen eines weiteren Fremdschlüssels zur Tabelle.
* in einer relationalen Datenbank könnte man auf die naheliegende Idee kommen, Details jeder der 9 Kameras in einer Tabelle zu festzuhalten und in einer AufnahmeKamera-Tabelle Detaildatensätze für jede an einer Aufnahme (Details, wie Zeitpunkt, Objekt, etc. wären in einer gleichnamigen Tabelle festgehalten) beteiligten Kameras anzulegen (eine klassische m:n-Beziehung).

** Die selbe Information der Kamera-Aufnahmen kann inhaltlich in nur einem Datensatz durch ein Bitfeld wiedergegeben werden - nur greifen dann eben keine klassischen SQL-Standards mehr, und man tangiert Gebiete, die von NoSQL-Datenbanken besser beherrscht werden, ohne für jede Einzelanforderung individuell eine UDF oder Stored Procedure verfassen zu müssen.
Grüße von der (⌒▽⌒)