Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: tianshiwen am Januar 23, 2025, 15:06:00

Titel: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: tianshiwen am Januar 23, 2025, 15:06:00
Hallo,

ich habe ein Problem mit meiner Datenbank mit dem ich nicht weiterkomme.

Es ist eine Datei für Besucher, in welcher die Besucher zusammen mit ihrem ausgegebenen Ausweisen eingetragen werden.
Hierzu habe ich eine Abfrage erstellt, welche anzeigt welche Ausweise noch zur Verfügung stehen, und die ausgegebenen Ausweise ausblendet.
Das funktioniert erstmal. Doch nach einigen Eingaben passiert es das die Abfrage plötzlich leer bleibt und nichts mehr anzeigt.

Leider kann ich nicht herausfinden an was es liegt. Ich meine, entweder funzt es, oder nicht. Warum erst nach einiger Zeit?

Anbei einmal ein Paar Bilder vom Aufbau und der Formel. Fall nötig kann ich auch die Datei gezippt anhängen wenn das weiterhilft. Wäre für Hilfe sehr dankbar, da ich wie gesagt nicht mehr weiterkomme.

Gruß Jürgen
Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: Knobbi38 am Januar 23, 2025, 15:13:42
Lade mal die DB hoch, die Bilder sagen nichts aus.
Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: tianshiwen am Januar 23, 2025, 15:36:17
Hallo,

hier die Datei.
Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: Bitsqueezer am Januar 23, 2025, 15:56:15
Hallo,

also die Abfrage funktioniert schon. Sie zeigt, wie gewünscht, nur die verbeleibenden Ausweise an.

Wenn Du mit "die Abfrage bleibt leer" eigentlich die Kombobox im Formular meinst, dann liegt das daran, daß die Kombobox einen vorher gewählten Eintrag nur dann anzeigt, wenn er in der Liste noch enthalten ist.

Der Dropdown zeigt ja, daß es weiterhin eine Liste der verbleibenden Ausweise gibt, aber da es dort den Ausweis nicht mehr gibt, der als ausgegeben markiert wurde, wird er in der Kombobox auch nicht mehr angezeigt (obwohl die ID weiterhin im Datensatz vorhanden ist).

Darüber hinaus wird die Liste auch nicht automatisch bei Datensatzwechsel aktualisiert. Wenn Du also Ausweise auswählst, bleibt der gewählte Eintrag in der Kombobox sichtbar, weil er noch nicht als ausgegeben ausgefiltert wird (weil die Kombobox nicht aktualisiert wird). Wenn Du F5 drückst, verschwindet dann auch dieser.

Man kann das lösen, indem man mit einer UNION-Abfrage die ID des Datensatzes der Abfrage hinzufügt, die in dem aktuellen Besucher-Eintrag vorhanden ist. Dann muß nach Auswahl bzw. bei GotFocus die Liste in der Kombobox aktualisiert werden.

Ich würde dementgegen einfach eine zweite Spalte neben den Ausweisnamen setzen, in der der Ausweisstatus angezeigt wird. Wenn der Status "verfügbar" ist, kann er ausgewählt werden, ansonsten kannst Du in BeforeUpdate der Kombobox "Cancel=True" setzen, wenn der Status etwas anderes ist, ggf. mit einer Meldung und einem Undo.
Die Liste muß so nicht dauernd aktualisiert werden und man vermeidet Hinzufügen der aktuellen ID mit UNION, die ja in einer Liste der verfügbaren Ausweise eigentlich nicht enthalten sein dürfte.

Du kannst dann auch die Liste so sortieren, daß alle verfügbaren Ausweise zuerst und dann nach Namen sortiert werden. So stehen die verfügbaren Ausweise gleich oben in der Liste.

Gruß

Christian
Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: tianshiwen am Januar 23, 2025, 16:13:39
Hallo Bitsqueezer,

danke erstmal für die Ausführliche Antwort.

Aber das ist nicht das eigentlich Problem. Das die Ausweise aus der Liste verschwinden wenn sie ausgegeben wurden soll ja so sein.

Das Problem ist das die Abfrage auf einmal komplett Leer bleibt. Das heißt ich habe gar keine Ausweise mehr zur Auswahl.

Ich habe mal zwei Bilder angehängt, damit du siehst was ich meine.
Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: Bitsqueezer am Januar 23, 2025, 16:18:46
Hallo,

dann solltest Du die Datei mal so hochladen, daß man das Problem nachvollziehen kann. In der hochgeladenen Datei ist das nicht zu sehen.

Gruß

Christian
Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: tianshiwen am Januar 23, 2025, 16:47:34
Geht leider nicht. Ich hab jetzt mal die Namen und Besucher aus der Original Datei gelöscht (wegen Datenschutz). Danach funzt der Filter wieder...  :o

Das ist es ja was ich mir nicht erklären kann. Das es einmal funzt und einmal nicht.
Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: Bitsqueezer am Januar 23, 2025, 19:36:35
Hallo,

es war auch nicht gemeint, daß Du die Originaldaten hochlädtst. Du sollst die Datenbank soweit mit Testdaten füllen, daß man nachvollziehen kann, was das Problem ist.

Gruß

Christian
Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: tianshiwen am Januar 24, 2025, 12:28:39
Hallo,

anbei mal die ältere Version der Datenbank MIT dem Fehler.
Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: Bitsqueezer am Januar 24, 2025, 14:32:25
Hallo,

also das ist weder das gleiche Datenmodell noch der gleiche Ausdruck...

Aber es zeigt sich wieder einmal: Wenn man die entsprechenden Daten dazu hat, findet man auch das Problem.

Wenn Du Deine Abfrage so umstellst:

SELECT AW.IDAusweis
  ,AW.Ausweis
FROM tblAusweise AS AW
WHERE AW.IDAusweis NOT IN
        (
            SELECT AD.IDAusweisF
            FROM tblAdmin AS AD
            WHERE AD.IDAusweisStatusF > 1
            AND AD.IDAusweisF IS NOT NULL
        )
AND     AW.IDAusweis NOT IN
        (
            SELECT FAW.IDAusweisF
            FROM tblFesteAusweise AS FAW
            WHERE FAW.IDAusweisStatusF IN (2,3)
            AND FAW.IDAusweisF IS NOT NULL           
        )

listet Deine Kombobox auch alle Einträge wieder wie gewünscht.

Das Problem: Es gibt genau einen Eintrag in "tblAdmin", in dem es keine IDAusweisF gibt, also NULL ist.
Operationen mit NULL ergeben NULL, also auch IN. Wenn man die Zeile mit "IS NOT NULL" ausschließt, dann funktioniert die Abfrage. Der Sicherheit wegen auch für die andere Tabelle eingefügt.

Hier zeigen sich dann die Schwächen des Datenmodells:

Da ein Ausweis zur gleichen Zeit nur einen Status haben kann, würde ich den Ausweisstatus in der Ausweistabelle vorhalten. In der Tabelle, in der der Ausweis mit Datum und Benutzer verwaltet wird, ist dann ein Ausweisstatus nicht mehr notwendig. Der Ausweisstatus für vergangene Ausleihen ist (für meine Begriffe) unwichtig.

Gruß

Christian
Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: tianshiwen am Januar 24, 2025, 15:39:52
Vielen Dank für die Hilfe  :)

auf die Idee mit dem Nullwert wäre ich nicht gekommen.

Das mit den getrennten Listen habe ich in der neuen Version berücksichtigt, deshalb ist das Datenmodel und die Abfrage auch anders. Aber klar, dass der Fehler hier auch auftritt wenn ich die Nullwerte zulasse.

Mit dem Datenmodell muss ich ein wenig weiter ausholen.

Die Problematik ist, das wir sehr viele Zeit Arbeiter haben, welche in den ersten vier Wochen täglich ihren Ausweis morgens bei uns abholen, und abends wieder abgeben müssen (Ausweisart "Zeitarbeit") wobei die Nummer ständig wechselt. Das sind die "Ausgegebenen" Ausweise.

Wenn sie dann länger als vier Wochen bei uns sind, bekommen sie dann so einen Ausweis ("Zeitarbeit) fest für etwa 9 Monate. Diese sind dann als "Feste Ausweise" eingetragen

Da viele auch bereits am ersten Tag aufhören, und teilweise den Ausweis mitnehmen, oder nach den 9 Monaten vergessen zurückzugeben, müssen wir anhand der Liste nachvollziehen wer wann welchen Ausweis bekommen hat.

Auch Besucher bekommen den Ausweis, und müssen ihn beim Verlassen wieder abgeben. Hier ist es das gleiche, das wir nachvollziehen können wer wann welchen Ausweis bekommen hat.


Außerdem müssen am Ende des Monats die Anzahl der Besucher weitergegeben werden.

Deswegen stehen mehrere gleich Ausweis ID mit verschiedenen Stati in der Tabelle.
Mit Status 1 wird mir dann z. B. angezeigt das der Ausweis wieder verfügbar ist, aber die Daten des Besuchers sind dennoch verfügbar.

Leider wüsste ich jetzt nicht wie ich das umsetzen könnte wenn ich den Status in die Ausweise selbst schreibe. Stehe da jetzt etwas auf dem Schlauch.


Gruß

Jürgen

Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: Knobbi38 am Januar 24, 2025, 16:47:20
Hallo Jürgen,

wie Christian schon sagte, ist dein Datenmodell nicht wirklich brauchbar und führt deshalb zu diesen "Inkonsistenzen". Die Ausweisart und dessen aktueller Status gehören in die Ausweistabelle in nicht verstreut irgendwo in irgendwelchen Tabellen.

Zitat... müssen wir anhand der Liste nachvollziehen wer wann welchen Ausweis bekommen hat.
So etwas kann man z.B. mit einem Buchungsjournal erledigen.

Gruß
Knobbi38
Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: Bitsqueezer am Januar 24, 2025, 22:58:33
Hallo,

ich habe Dir hier mal ein kleines Modell gemacht, basierend auf Deiner Datenbank.
Ausweisverwaltung3.zip

Du solltest Deinen Anhang oben entfernen, weil er auch Echtnamen enthält. Ich habe sie hier anonymisiert.

Statt x verschiedene Formulare zu verwenden, gibt es jetzt nur noch ein Formular mit Unterformular.

Das HFo zeigt die Liste aller Ausweise an.
Das UFo zeigt die Liste der Vorgänge an, die mit dem aktuellen Ausweis bislang gespeichert wurden. (Ich habe Deine Daten dazu importiert.)

Der Ausweisstatus zeigt sofort an, welche Ausweise Du ausgeben kannst oder welche vorhanden oder gesperrt oder fest vergeben sind. In letzterem Fall kann man den Namen desjenigen direkt in der Ausweisliste auswählen, denn ein Ausweis kann ja zeitgleich nur einem gehören. Ebenso ist hier das Datum/Uhrzeit hinterlegt, wann die Zuordnung stattgefunden hat. Die Daten stammen aus Deiner Tabelle "tblFesteAusweise".
Zusätzlich gibt es ein Feld "MaxZuordnungTage" - wenn Du festlegen willst, wieviele Tage ein Ausweis fest zugeordnet werden kann, statt fix 9 Monate. Damit könntest Du anhand des Zuweisungsdatums auflisten, welche Ausweise demnächst oder bereits überfällig sind, individuell einstellbar für jeden Ausweis. So kannst Du ebenso Dauerausweise oder Tagesausweise konfigurieren.
Eine Checkbox "Defekt" gibt es dann auch noch.

Das Unterformular ist so eingestellt, daß es nur das Anhängen neuer Zeilen erlaubt. Löschen oder Editieren bestehender Zeilen ist gesperrt.

Außerdem gibt es ein Form_AfterUpdate, das nach dem Speichern einer Zeile im Log den Status des Ausweises entsprechend aktualisiert.

Das ganze müßte umgekehrt natürlich auch gemacht werden, aber ein bißchen darfst Du auch noch selbst machen.
Also in Form_AfterUpdate des HFo, wenn der Status geändert wurde, muß ein neuer Eintrag im UFo (also eigentlich in der Tabelle "tblAusweisLog" per INSERT) hinzugefügt werden mit dem neuen Status.

Benutzer und Besuchsgrund müssen dort eingegeben werden, daher würde ich als Besuchsgrund z.B. sowas wie "Ausweisstatus-Update" einfügen und als Name der Name des Bearbeiters der Datenbank. Somit kann ein INSERT dann mit diesen beiden IDs durchgeführt werden. Im Log kann man dann sehen, wenn der Status im HFo geändert wurde.

Im Prinzip werden keine weiteren Funktionen (nachdem Du den INSERT eingebaut hast) mehr benötigt: Filtern kannst Du die Hauptliste mit der rechten Maustaste auf dem Feldinhalt, z.B. auf Status und "Vorhanden". Filter aufheben geht in der Fußleiste durch Anklicken von "Gefiltert".
Datensatznavigation und Anlegen neuer Datensätze im Datensatznavigator. Suchen über alle Felder im Suchfeld dort. Speichern über den Record-Selektor oder durch Verlassen einer Zeile oder eines Formulares.

Einfach zu bedienen, einfach zu warten, ohne Schnickschnack. Du kannst das ganze natürlich dann nach Belieben grafisch aufpeppen.

Deine jetzigen Daten erfassen nicht, wann ein Ausweis zurückgegeben wurde, was für das Log aber ebenso wichtig ist. "Vorhanden" ist dann eigentlich nicht der richtige Begriff, aber "Zurückgegeben" als Extra-Status macht auch keinen großen Sinn (außer Optik), weil der Ausweis dann ja verfügbar ist. Außer, Du willst die Vorgänge trennen und nach Rückgabe explizit auf Vorhanden setzen (was zwei Einträge im Log bedeutet).

Du kannst dann weitere Threshold-Felder wie "MaxZuordnungTage" einfügen in die Ausweistabelle, z.B. wieviele Tage vergehen müssen, bevor eine feste Zuweisung erfolgen soll. Damit kannst Du effektiv die Ausweise verwalten.

Die Anzahl der Besucher kannst Du nun aus dem Log ermitteln, durch Filterung nach Monat und den gewünschten Ausweisstatus und Besuchsgrund.

Das Log kann natürlich auch unabhängig vom HFo aufgerufen werden, wenn Du die Gesamtliste sehen willst.

So, und nun wieder runter vom Schlauch, wie soll man denn sonst Blümchen gießen...tss..

Gruß

Christian





Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: tianshiwen am Januar 27, 2025, 08:36:43
Hallo Christian,

vielen lieben Dank für deine Mühe. Das sieht dann doch schon etwas anders aus als bei mir.

Muss zugeben, in die Richtung hatte ich nicht gedacht.

Ich schaue es mir mal in Ruhe an.

LG

Jürgen

Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: Bitsqueezer am Januar 27, 2025, 12:06:11
Hallo Jürgen,

noch zu erwähnen: Viele der Abfragen in der Demodatenbank werden für die eigentliche Datenbank nicht gebraucht. Ich hatte sie gemacht, um Daten aus den alten Tabellen in die neuen zu übernehmen, habe sie aber dringelassen, für den Fall, daß Du sie vielleicht gebrauchen kannst.
Wirklich gebraucht werden vor allem die Abfragen mit FRM und CTL im Namen.

Aber das siehst Du dann schon... :)

Gruß

Christian
Titel: Re: Abfrage funktioniert nach mehreren Eingaben nicht mehr
Beitrag von: tianshiwen am Januar 27, 2025, 15:05:29
Hallo Christian.

Ja, das habe ich schon gesehen, z.B. das Anonymisieren  :-[

Sieht auf alle Fälle gut aus. Ich schaue mal was ich draus mache.

Vielen dank nochmal für deine Mühe  :)

LG

Jürgen.