Neuigkeiten:

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

Mobiles Hauptmenü

Darstellung eines Queries im Forumular

Begonnen von DonMarco, März 09, 2018, 14:35:08

⏪ vorheriges - nächstes ⏩

DonMarco

Hallo,

ich habe ein Formular in Access erstellt, dass an eine Abfrage gebunden ist.
Dieses soll nach Eingabe eines Suchwortes (Seriennummer) die dazugehörigen Daten darunter anzeigen:

Wenn ich den Suchenbutton dann klicke, öffnet sich jedoch die Abfrage (und zeigt mit interessanterweise eine leere Tabelle an, anstatt das Ergebnis). Das Problem ist für mich aber aktuell erst einmal, dass die Daten nicht im Formular, sondern im Query angezeigt werden.
Das Formular heisst CheckForm. Der Button im Bild heißt SearchSerialNo. Der Button sucht mit dem Makro "OpenQuery" / Es gibt aber kein RunQuery... :-(
Und das SQL der Abfrage lautet:
SELECT Assets_ALT.STREETADDRESS, Assets_ALT.FLOOR, Assets_ALT.ROOM, Assets_ALT.DEPARTMENT, Assets_ALT.ITC_NAME, Assets_ALT.ASSET_USER_NAME, Assets_ALT.PERSONID, Assets_ALT.COMPUTER_NAME, Assets_ALT.CATEGORY, Assets_ALT.MANUFACTURER, Assets_ALT.PRODUCT, Assets_ALT.MODELL, Assets_ALT.SERIALNUM, Assets_ALT.MAC_ADDRESS
FROM Assets_ALT
WHERE (((Assets_ALT.SERIALNUM)=[Formulare]![CheckForm]![SearchSerialNo]));


Später soll der User diese Daten dann prüfen (Haken klicken) und dann abspeichern können. Aber das hebe ich mir auf für den Moment, ab dem die Daten angezeigt werden...

DF6GL

Hallo,


da liegt ein Missverständnis vor.

Der Button sucht mit dem Makro "OpenQuery" / Es gibt aber kein RunQuery... :-(

Dies öffnet eine Abfrage (wie Du selber merkst)  als solche und hat mit der Anzeige in einem Form nichts zu tun.


Eine mögliche Lösung:

Schreib in die Datenherkunft des Form den Namen der (gespeicherten) Abfrage. Entferne in der Abfrage die Where-Condition ( Kriterium).
(Alternativ kann aber auch gleich der Tabellenname eingesetzt werden.)

Für den Button erzeugst Du eine Ereignisprozedur für dessen Klickereignis  (Auf die rechts stehenden Pünktchen in der Ereigniszeile "Beim Klicken" klicken, danach evtl. "Ereignisprozedur" wählen.

Sobald der VBA-Editor sich öffnet, kommt folgender Code in die vorbereitete Prozedur:



'Private Sub SearchSerialNo_Click()   ' schon generiert
Me.Filter = "SERIALNUM= '" & Me![SearchSerialNo] & "'"
Me.Filteron = True
'End Sub    'schon generiert

 
Hier ist angenommen, dass "SERIALNUM" den Datentyp TEXT in der zugrundeliegenden Tabelle aufweist.

Ist der Datentyp ZAHL (LONG, bzw. INTEGER)  , dann entfallen die Hochkommata.



DonMarco

Danke, dass macht fast genau das was ich wollte!
Jetzt funktioniert es endlich... :-D

Ich habe eine kleine Änderung gemacht. Die Aktion wird nun bei "Beim Verlassen" des Inputs ausgeführt.
Das führt aber aktuell dazu, dass wenn ich das Feld verlasse, der Inhalt immer markiert wird und ich nirgendwo anders hinklicken darf. Liegt das an der Filterung oder dass OnExit noch einen Fokusverlust zulassen muss?

VBA sieht aktuell so aus (ich hab das Textfeld umbenannt in inputSearchSerialNo, um den Namingconventions zu folgen, was ich vorher noch nicht gemacht hatte):
Option Compare Database

Private Sub inputSearchSerialNo_Exit(Cancel As Integer)
Me.Filter = "SERIALNUM = '" & Me![inputSearchSerialNo] & "'"
Me.FilterOn = True
End Sub



Wenn ich das habe, dann wird das Formular noch mit einem Update versehen und soll in die Datenbank zurückschreiben, wenn was geändert wird bzw. die Checkbuttons kommen dann in die Datenbank. Ich hoffe das funktioniert ohne Probleme. :-)

Lachtaube

Verwende besser das Nach Aktualisierung Ereignis - dann sollte auch das Betätigen der Eingabetaste nach Texteingabe genügen, um das Filterkriterium anzuwenden.
Grüße von der (⌒▽⌒)