Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Anfängerfrage - Parameter aus Listenfeld in Abfrage

Begonnen von coffeejunkie, Juli 02, 2020, 12:01:43

⏪ vorheriges - nächstes ⏩

coffeejunkie

Erst mal Hallo zusammen,

ich bin in Access neu und versuche eine Hardwareinventar Datenbank in Access 2016 (englisch) aufzubauen. Ich habe eine Tabelle für die verschiedenen Hardware Kategorien, z.b. Computer, Monitore, Mobiltelefone, usw. sowie eine Tabelle mit Benutzern. Dies in die entsprechende Hardware Tabelle aufzunehmen und den einzelnen Benutzern zuzuweisen klappt prima.
Nun möchte ich eine Abfrage erstellen, die mir alle freie Hardware anzeigt. Die Abfrage klappt auch, aber wenn ich nach den einzelnen Kategorien abfragen möchte, z.B. zeig mir alle freien Computer an, bekomme ich nur eine leere Liste angezeigt.
Für das Feld "Kategorie", welches in der Tabelle ein Listenfeld ist habe ich als Kriterium where [Category]"="Computer"
eingetragen, aber wie gesagt bekomme leider nur eine leere Liste.

Lass ich das Kriterium weg, bekomme ich all meine verschiedenen Kategorien angezeigt, was nicht gerade übersichtlich ist.

Habt Ihr eine Idee warum das nicht geht? Geht es überhaupt einen Listenfeld Wert zu übernehmen? Oder evt. diesen sogar als Parameter in die Abfrage einzubauen? Ala Abfrage starten - "Gibt die gewünschte Kategorie ein"

Vielen Dank für Tipps
Coffee

DF6GL

Hallo,

am besten zeigst Du uns einen Screnshot des Beziehungsfensters, wo alle Tabellen und Tabellenfeldnamen   ersichtlich sind..
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

coffeejunkie

Hallo,

na klar, anbei der Screenshot der Beziehungen der Tabellen. Es gibt noch zwei Tabellen mehr, die mit der Tabelle Benutzer verknüpft sind, aber hier nix zu Sache tun.

Sie dürfen in diesem Board keine Dateianhänge sehen.

Vielen Dank
Coffee

Beaker s.a.

@coffeejunkie
Vorab,
- im Feld "Category" muss die "CategoryID" stehen
- das Feld "ctlUsername" gehört nicht in "tbl_Assets",
die Beziehung muss dann von tbl_User.UserID zu tbl_Assets.UserID
gesetzt werden
dann solltest du mit (Luftcode) das gewünschte Ergebnis erzielen
SELECT A.ID, A.Model
FROM tbl_Assets AS A
WHERE USERID Is Null AND Catagory = Forms.DeinForm.DeineListe
Deine Liste basiert dabei auf der Tabelle "tbl_Asset Catagory"

Ich würde allerdings ein anderes Modell vorschlagen.
"tbl_Assets" und "tbl_User" würde ich über eine Zwischentabelle (n:m)
verbinden. Da kannst du dann weitere Felder unterbringen; - z.B. "in
Gebrauch seit" oder "-bis".

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

coffeejunkie

Hallo Ekkehard,

vielen Dank für die Hinweise. Das mit der Zwischentabelle und den Feldnamen macht Sinn.

Ich habe versucht das mal umzusetzen:
Sie dürfen in diesem Board keine Dateianhänge sehen.

Allerdings habe ich jetzt das Problem, dass neue Geräte (die gebe ich über ein Formular ein) zwar in der Tabelle Assets erscheinen, aber nicht in der neuen Tabelle Assets_User, ich befürchte ich muss das dann manuell einfügen, oder kann das automatisiert werden? Denn diese Info braucht ich für die Abfrage nach den freien Geräten.

Die Abfrage klappt endlich dank deiner Hilfe!!

Schon mal vielen Dank, so langsam wird das mit Access und mir noch was

Viele Grüße
Maike


Beaker s.a.

Hallo Maike,
Zitataber nicht in der neuen Tabelle Assets_User,
Das ist ja auch richtig. In die Zwischentabelle kommen sie ja nur,
wenn es einem User zugeordnet wird (in einem UFo im Form "Assets"
oder "User").
Die Abfrage auf nicht verwendete Assets sieht dann so aus
SELECT
    A.AssetID,
    A.Model
FROM tbl_Assets AS A
WHERE A.AssetID NOT IN (
        SELECT AU.AssetID
        FROM tbl_Asset_User AS AU
        )
Kannst du so direkt als DS-Herkunft eines Listfeldes auf dem
Form "Assets" verwenden. Dann siehst du auf einen Blick welche
Assets z.Zt.nicht verwendet werden. Oder als Filter für das Form
Me.Filter = "AssetID NOT IN (
        SELECT AU.AssetID
        FROM tbl_Asset_User AS AU
        )"
Wenn du in die tbl_Aset_User noch weitere Felder einbaust,
z.B. Datum von-bis, muss du die Unterabfrage noch entsprechend
filtern
... WHERE AssetID NOT IN (
        SELECT AU.AssetID
        FROM tbl_Asset_User AS AU
        WHERE Date() > AU.DatumVon
          AND
              Date() < AU.DatumBis
        )

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

coffeejunkie

Hallo Ekkehard,

vielen Dank! Funktioniert prima so. Da war ich irgendwie total vernagelt.

Klasse, wie schnell einem hier geholfen wird

Grüße
Maike

Beaker s.a.

Hallo Maike,
Freut mich, dass es geholfen hat.
Leider habe ich da einen Fehler mit der Datumsfilterung gemacht. Wie
gezeigt werden das Anfangs- und das Enddatum nicht berücksichtigt.
Besser also
... WHERE Date() >= AU.DatumVon
          AND
              Date() <= AU.DatumBis...
oder
... WHERE Date() BETWEEN AU.DatumVon
          AND AU.DatumBis ...

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)