Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Xoar am Mai 31, 2011, 22:13:15

Titel: DLookup nimmt falschen Wert aus Abfrage...
Beitrag von: Xoar am Mai 31, 2011, 22:13:15
Moin nochmals,

hab nen komisches Problem, ich hab mir ne Abfrage mit Distinct gemacht, wo die Datensätze gezählt werden OHNE Duplikate
SELECT DISTINCTROW Count(qryDienstplan.Nachname) AS AnzahlvonNachname
FROM qryDienstplan
WHERE (((qryDienstplan.Fahrzeug) Not In ("X - Freischicht","krank","Urlaub","Überstunden")));


klappt auch wunderbar.
Nun aber das Problem, ich befülle in VBA ein Textfeld mit dem Wert aus der Abfrage
                                           Textfeld                               Feldname                       Abfragename
Form_frmDienstplanAusdruck.Wist.Value = DLookup("AnzahlvonNachname", "qryIstWachstaerkeDienstplan")
Da zählt er aber die Duplikate mit....

wieso das?

Grüße :)

Titel: Re: DLookup nimmt falschen Wert aus Abfrage...
Beitrag von: ebs17 am Juni 01, 2011, 01:14:41
SELECT DISTINCTROW Count(qryDienstplan.Nachname) AS AnzahlvonNachname
FROM qryDienstplan
WHERE (((qryDienstplan.Fahrzeug) Not In ("X - Freischicht","krank","Urlaub","Überstunden")));

Da steht man und staunt. Ein simples Count erzeugt einen Datensatz, da benötigt man kein DISTINCT oder DISTINCTROW. Woher bitte können Duplikate kommen?

Ein DLookup wiederum "zählt" nicht, sondern nimmt den Wert eines (zufälligen) Datensatzes der gewählten Abfrage, der dem gewählten Kriterium entspricht.

Daher würde ich das Problem nicht komisch nennen (Komik ...  Anlass zum Lachen), sondern besorgniserregend, es sei denn, Du wärst nicht sicher, ob die gezeigte Abfrage und die verwendete Domäne im DLookup das Gleiche meinen.

MfGA
ebs
Titel: Re: DLookup nimmt falschen Wert aus Abfrage...
Beitrag von: database am Juni 02, 2011, 17:23:18
Hallo,

bist du ganz sicher, dass die Where-Klausel stimmt?
WHERE (((qryDienstplan.Fahrzeug) Not In ("X - Freischicht","krank","Urlaub","Überstunden")));

Möglicherweise sehe ich das etwas zu eng, aber - ein Fahrzeug "krank", oder auf "Urlaub" ... ? :-\
Kann es vielleicht sein, dass du die Where-Klausel auf ein anderes Feld der Abfrage 'qryDienstplan' setzen wolltest?
Titel: Re: DLookup nimmt falschen Wert aus Abfrage...
Beitrag von: Xoar am Juni 02, 2011, 19:44:57
Hi, ja die where Klausel stimmt. Ich führe die Felder "X - Freischicht","krank","Urlaub","Überstunden" nur als Fahrzeug, damit ich sie ohne weitere Umstände in meinem Dienstplan unterbringen kann. Blöd mal eben so zu erklären, passt aufjedenfall^^

[edit]

also sehr seltsam.
Hab in VBA folgenden Code
DoCmd.OpenQuery "qryIstWachstaerkeDienstplan"    'nur mal um zu schauen was dort im Ergebnisfeld steht
Form_frmDienstplanAusdruck.Wist.Value = DLookup("imDienst", "qryIstWachstaerkeDienstplan")

Also schreibt er mir in meinem Feld Wist den Wert, der normalerweise in der qryIstWachstaerkeDienstplan steht.  In der Abfrage gibt es nur eine Spalte mit einem Wert.
Hab das Ergebnisfeld mal in "imDienst" umbenannt.

Sobald ein Mitarbeiter zwei Fahrzeuge besetzt, soll er ja nur einmal gezählt werden. In der Abfrage die sich öffnet, funktioniert das auch, ABER in dem Feld "Wist" wird er trotzdem in der Summe zweimal angezeigt.

Wie geht das, der nimmt noch über DLookup den Wert aus der Abfrage wo dann z.B. 13 steht, anzeigen tut er aber 14.           o.O
aktuell ist sie ja auch, da sie ja unmittelbar vor Zuweisung nochmal geöffnet wird und damit auch aktualisiert wird.
Titel: Re: DLookup nimmt falschen Wert aus Abfrage...
Beitrag von: Xoar am Juni 02, 2011, 20:55:23
kann das sein, dass die Abfrage irgendwie im Ausgabeergebnisfeld filtert (sprich die doppelten Einträge nur einfach zählt) aber intern, worüber dann DLookup zugreift, das nicht macht?

Kann mir sonst nicht vorstellen wie das zustande kommt.

Hab das Problem nun über eine Zwischenabfrage gelöst. Einmal ne Abfrage wo halt über Distinct, keine Duplikate angezeigt werden, und eine zweite die nun diese Datensätze zählt.
Titel: Re: DLookup nimmt falschen Wert aus Abfrage...
Beitrag von: database am Juni 03, 2011, 08:24:01
Hallo,

ZitatEinmal ne Abfrage wo halt über Distinct, keine Duplikate angezeigt werden

....das sollte die Abfrage 'qryDienstplan' sein, wenn du diese nicht für andere Zwecke benötigst.

Danach KÖNNTEST du weiter so vorgehen:


Dim rst as DAO.Recordset

Set rst = CurrentDb.OpenRecordset("SELECT Count(qryDienstplan.Nachname) AS AnzahlvonNachname " & _
                               "FROM qryDienstplan " & _
                               "WHERE (((qryDienstplan.Fahrzeug) Not In ('X - Freischicht','krank','Urlaub','Überstunden')));")


Form_frmDienstplanAusdruck!Wist = rst!AnzahlVonNachname

SET rst = Nothing


Sollte eigentlich richtig zählen können
Titel: Re: DLookup nimmt falschen Wert aus Abfrage...
Beitrag von: Xoar am Juni 03, 2011, 10:10:22
Danke für den Code, ich werds mal nachher testen :)