PDA

Vollständige Version anzeigen : Abfrage-Kriterium


Fredi
19.01.2003, 16:38
Hallo,
ich wolte mal fragen wie die Abfrage richtig lauten muß. Derzeit bekomme ich die fehlermeldung, dass die Werte nicht verglichen werden können wenn ich den Kriterienausdruck setze.
Es geht darum, dass ich Sachen, die ich nicht verliehen habe in einem Listenfeld anzeigen möchte. Hierzu nehme ich die tabelle mit den Gegenständen und vergleiche sie mit den entsprechenden daten in der tabelle wo die geliehenden sachen drin sind. Hier mal die Datensatzherkunft (Abfrage):

SELECT board_tbl.banr, board_tbl.boardNr, verleih_tbl.banr, verleih_tbl.b_datum, verleih_tbl.e_datum, * FROM board_tbl INNER JOIN verleih_tbl ON board_tbl.banr = verleih_tbl.banr WHERE (((board_tbl.boardNr)>=[b_datum] And (board_tbl.boardNr)<=[e_datum])) WITH OWNERACCESS OPTION;

und hier die SQL-Anweisung:
SELECT board_tbl.banr, board_tbl.boardNr, verleih_tbl.banr, verleih_tbl.b_datum, verleih_tbl.e_datum, *
FROM board_tbl INNER JOIN verleih_tbl ON board_tbl.banr = verleih_tbl.banr
WHERE (((board_tbl.boardNr)>=[b_datum] And (board_tbl.boardNr)<=[e_datum]))
WITH OWNERACCESS OPTION;

Kann mir da jemand weiterhelfen?

Fredi

MarioR
19.01.2003, 16:54
Hallo,

sind denn die Felder "boardNr", "b_datum" und "e_datum" vom gleichen Typ?

Fredi
19.01.2003, 17:14
Die beiden Datumfelder haben den Felddatentyp "Datum" und die Nummer hat "Zahl". Muß ich den Datum-Typ auf "Zahl" ändern?

Fredi

PS. Cooles Signum :-)

Fredi
19.01.2003, 18:35
Ich hab jetzt alles auf zahl. Im Formular bei den Datumeingabefelder hab ich als Format tt.mm.jj eingesetzt. Dann hab ich noch die eckigen Klammern um die Datumsfelder im kriterium entfernt. Jetzt sieht es so aus.

SELECT board_tbl.banr, verleih_tbl.banr, verleih_tbl.b_datum, verleih_tbl.e_datum, board_tbl.boardNr, * FROM board_tbl INNER JOIN verleih_tbl ON board_tbl.banr = verleih_tbl.banr WHERE (((board_tbl.boardNr)<="b_datum" And (board_tbl.boardNr)>="e_datum")) WITH OWNERACCESS OPTION;

Aber geht immer noch nicht. :(

Fredi

MarioR
19.01.2003, 19:21
Also erstmal müssen alle Felder vom gleichen Typ sein, entweder Zahl oder Datum.

Vom Problem her sind die Felder "b_datum" und "e_datum" sicher als Datumsfelder gedacht. Ich würde das nicht ändern - mach's also wieder rückgängig. Die eckigen Klammern brauchst Du bei Deinen Feldbezeichnungen zwar nicht unbedingt, schaden tun sie aber nicht. Die " sind auf jeden Fall verkehrt - nimm sie wieder raus. Sonst vergleicht Access nicht mehr den Inhalt der Felder, sondern die Feldnamen selbst.

Jetzt stellt sich die Frage, was im Feld "boardNr" gespeichert wird. Es muss ja irgendwas mit einem Datum zu tun haben, oder Dein Vergleich ist grundsätzlich verkehrt. Erklär's doch mal genauer, vielleicht mit Bsp.

Fredi
19.01.2003, 19:44
Eigentlich wollte ich nur die Boards in einem Listenfeld anzeigen, die noch nicht verliehen sind.
Ich habe eine Tabelle in der sind die Boards (u.a. eine Spalte mit den Boardnummern). In einer anderen Tabelle die verliehenden Boards mit Datum des Beginns und Ende des Verleihs sowie der Boardnummer.
Durch das Kriterium sollen nun nur die o. g. Boards angezeigt werden.
Diese Anführungszeichen macht der Abfrageeditor immer automatisch.
Als veranschaulichung kann ich dir die Datei schicken, ist aber A97. Nur ein Formular und 4 datensätze.

Gruß
Fredi

MarioR
19.01.2003, 20:04
Löschst Du die Einträge aus der "verleih_tbl" wieder raus, wenn die Boards zurückgegeben wurden?

Wenn Du's so machst, dann klicke in der Entwurfsansicht mit der rechten Maustaste auf die Verbindungslinie zwischen den Tabellen und wähle bei Verknüpfungseigenschaften den 2. Punkt aus. Dann ändert sich die Linie zum Pfeil, der von "board_tbl" zu "verleih_tbl" geht.
In die Spalte "verleih_tbl.banr" schreibst Du unter Kriterien <b>Ist Null</b> rein.
So werden alle Boards angezeigt, die nicht in "verleih_tbl" stehen.

Fredi
19.01.2003, 20:34
Hab ich gemacht, aber es wird kein datensatz angezeigt, obwohl noch boards in der Tabelle board drin sind. :(

Fredi

Fredi
19.01.2003, 20:55
Ups, also das mit dem Kriterium geht jetzt. Es werden auch die freien boards angezeigt.
Jetzt ist nur das Problem, dass das Listenfeld nicht aktualisiert wird, wenn ich danach das Board ausgewählt habe. Im Listenfeld ändert sich auch nichts, wenn ich zu einem anderen datensatz springe oder das Formular schließe.

Fredi

MarioR
19.01.2003, 21:06
Wenn Du jetzt ein Board verleihst (= auswählst?), erstellst Du ja sicher einen neuen DS in "verleih_tbl". Dann muss, zumindest beim erneuten Öffnen vom Formular, das Board aus dem Listenfeld raus sein.

Willst Du sofort das Listenfeld aktualisieren, musst Du die Datengrundlage aktualisieren, also die Abfrage neu ausführen. In VBA geht das so:

<b>Me.DeinListenfeld.Requery</b>

"DeinListenfeld" musst Du durch den Namen des Listenfeldes ersetzen.

Fredi
19.01.2003, 21:15
Ja, nach dem schließen ist das Listenfeld aktualisiert.
Wo geb ich das Requery ein? Unter "Nach Aktualisierung" im Kombifeld, ja?

Fredi

MarioR
20.01.2003, 05:55
Der Befehl muss ausgeführt werden, nachdem Du den DS in "verleih_tbl" angelegt hast. Also wahrscheinlich eher im Ereignis "Nach Aktualisierung" vom Formular.

Gast
20.01.2003, 07:30
Ja, genau. So hab ich es gemacht. Im Formular und dann "Nach Aktualisierung". Jetzt werden, wenn ich zum nächsten Datensatz springe, nur die freien Boards angezeigt.
Aber eins wäre noch sehr interessant. Jetzt werden ja alle Boards die ein datum zugewiesen worden ist, angezeigt.
Aber was ist, wenn ich wissen will wann ein Board wieder frei ist.
Also ich meine, man gibt jetzt einen Zeitraum ein mit Beginn und Ende des Verleihs und es erden die freien Boards zur auswahl angezeigt. Das konnte ich noch nicht realisieren. Hier sind so viele Beiträge zu Datumsberechnungen...

Fredi