2009-07-14 18 views
0

Ich entwickle ein VBA-Formular für Mitarbeiter-Datenbank, in dem es ein Suchkriterium für Benutzer-ID und Mitarbeiter mit der Benutzer-ID in einem List-Box-Steuerelement angezeigt wird, die aus einer einzigen Tabelle kommtFüllen Sie Listenfeld aus einer Tabelle in Vba

ich brauche ein Listenfeld mit Wert aus einer Tabelle zu füllen nach einem Wert in einem Textfeld, das als Suchfeld handeln (zB: Benutzer-ID)

Bitte helfen Sie mir, wie dies zu tun

+0

Von den Tags handelt es sich um Access - ist das korrekt? Welche Version von Access? Welche Art von Backend? – YogoZuno

+0

Access 2003 und Zugriffstabellen ist das Back-End – SmartestVEGA

+0

Siehe: http://StackOverflow.com/Questions/1123664/How-Can-i-Call-the-Below-Function-to-Populate-My-Access-Form-list -control – Fionnuala

Antwort

2

Ihre Frage ist schwer zu beantworten, weil sie von einigen Dingen wie Datentypen des Suchfelds usw. abhängt. Diese Antwort wird also auf einigen anderen vage vage sein f diese Punkte ...

Zunächst müssen Sie Ihre Listbox mit Suchkriterien erstellen, die auf dem Formular für den Suchwert aussehen und entsprechend filtern.

Sie tun dies, indem Sie die RowSource-Eigenschaft der Listbox festlegen. Hier ist ein Beispiel für eine rowsource einer Listbox, der für seinen Filterwert für eine Textbox auf ein Formular aussieht ...

SELECT tblAgencies.AgencyID, tblAgencies.OrganizationName 
FROM tblAgencies 
WHERE (((tblAgencies.OrganizationName) 
      Like "*" & nz([Forms]![frmMainMenu2]![txtSearchAgencies],"") & "*")) 
ORDER BY tblAgencies.OrganizationName; 

Der wichtigste Teil ist die Like ... Linie. Ein paar Dinge darüber ... Beachten Sie, dass die Abfrage für einige Kriterien auf das Formular schaut. Das sehen Sie im Teilbereich [Forms]! [FrmMainMenu2]! [TxtSearchAgencies] der Abfrage. Es gibt also ein Such-Textfeld auf frmMainMenu2, das txtSearchAgentances genannt wird.

Beachten Sie auch, dass ich NZ-Funktion verwende, um sicherzustellen, dass der Blick auf dieses Textfeld mindestens eine leere Zeichenfolge zurückgibt. Beachten Sie schließlich, dass der Like-Operator mit Platzhalterzeichen an beiden Enden verwendet wird, damit der Benutzer einen Teilstring eingeben kann.

Endlich ... neben Ihrem Suchfeld eine Befehlsschaltfläche setzen, um den Filter/die Suche auszuführen. Alles, was es tun muss, ist REQUEREY die Listbox wie folgt ...

Me.lstAgenturen.Requery.

Sie könnten auch Requery am OnChange-Ereignis versuchen, das während der Eingabe filtern würde. Aber wenn Ihre Abfrage langsam ist, funktioniert dies möglicherweise nicht gut.

Seth

+0

Ich würde sehr wahrscheinlich die rowsource mit einem festverdrahteten Wert für OrganizationName zuweisen. Wenn Sie requery müssen, warum nicht einfach eine sauberere RowSource-Eigenschaft (d. H., ohne Kontrollreferenzen) und ordnen Sie sie einfach im selben Event neu, an dem Sie erneut angefragt werden. –

+0

David, ich verstehe deine Frage nicht ... könntest du ein bisschen erklären. Seth –

0

Angenommen, Sie haben eine Tabelle TABLE1 haben, die Felder, Mitarbeiter Benutzer-ID hat. Sie sollten ein Formular erstellen, das eine Combobox (mit dem Namen boxid) und ein Textfeld (mit dem Namen EdtEmployee) hat. Definieren Sie einen rowsource Wert von Combobox wie

SELECT table1.userid FROM table1 WHERE employee like EdtEmployee & "*"; 

Dann wie diese

Private Sub EdtEmployee_LostFocus() 
BoxId.Requery 
End Sub 

Ich hoffe, ein Lost-Focus-Ereignis eines Textfeldes definieren funktioniert dies für Sie

0

ich mit mik zustimmen. Ich würde einfach ein AfterUpdate-Event anstelle des LostFocus verwenden, das ich noch nicht benutzt habe.

Verwandte Themen