Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Kombinationsfeld und VBA !

Begonnen von asiat, Januar 15, 2011, 16:39:49

⏪ vorheriges - nächstes ⏩

asiat

Hallo !!!

Allgemeinfrage

Ich Habe eine Tabelle und ein Formular.
Im Furmular Ein Kombifeld und ein Textfeld, Wenn ich was in Kombifeld eintippe dann soll während ich eintippe schon geprüft werden ob der Wert in der Tabelle forhanden ist, wenn ja dann soll Kombifeld aufgeklappt werden.
und wenn ich was aus dem kombifeld auswähle dann soll das was ich ausgewählt habe soll im Textfeld stehen.
Ich bin nur soweit:

Private Sub Kombifeld_Change()

Me.Kombifeld.RowSource = "SELECT Spalte FROM tabelle WHERE spalte =" & Me.Kombifeld.text

End Sub
und dann?

database

Hallo,

Annahme du hast eine Tabelle tblPersonen mit den Feldern PersonID, Vorname, Nachname

Du hast ein Formular 'frmPersonal' und darauf ein Kombifeld 'cboPerson' und ein Textfeld 'txtAuswahl'

Das Kombifeld bezieht seine Daten aus der Tabelle tblPersonen' mit der SQL

SELECT PersonalID, Nachname FROM tblPersonen;

definiert ist das Kombi mit 2 Spalten, gebundene Spalte 1, Spaltenbreite 0cm;4cm

Ins Ereignis AfterUpdate des Kombifeldes schreibst du folgeneden Code:


Private Sub cboNamen_AfterUpdate()

   Me.txtAuswahl = Me.cboNamen.Column(1)

End Sub


Damit wir der ausgewählte Text vom Kombifeld ins Textfeld übertragen.

Code aus dem Change Ereignis schmeißt du raus, der ist für die Fische!

Kombifelder verfügen über die Eigenschaft, dass sie sich selbst vervollständigen während der Eingabe,
daher muss nicht bei jedem Tastendruck (Change-Ereignis) nachgesehen werden ob der geschriebene Text in einem Tabellenfgeld enthalten ist.

Wird was eingegeben, das noch nicht in der Liste gestanden hat, tritt das Ereignis 'Bei Nicht In Liste' ein, wenn die Kombifeldeigenschaft 'Nur Listeneinträge' auf Nein' eingestellt ist.
Näheres zu diesem Ereignis (NotInList) bitte in der OH nachlesen.

HTH

asiat

OH ! Sorry habe vergessen zu erwähnen das es um einen Ungebundenen Formular handelt.
und was ich meinte mit Change ist
wenn ich was eintippe was in der Tabelle schon forhanden ist soll Combobox aufgeklapt werden

database

#3
Hi,

das ist vollkomen Wurscht ob das Formular gebunden oder ungebunden ist, das ändert NICHTS an dem was ich geschrieben habe.  ;)
Bei gebundenen Feldern steht in der Eigenschaft 'Steuerelementinhalt' eben dann der Name des gebundenen Tabellenfeldes drin...

Auch wenn es ein ungebundenes Formular ist, kann das Kombifeld seine DATENHERKUNFT aus einer Tabelle/Abfrage beziehen und bleibt trotzdem UNGEBUNDEN (Eigenschaft 'Steuerelementinhalt' ist leer)!

Zitatsoll Combobox aufgeklapt werden
wenn du 'H' eingibst und es gäbe z.B. einen Eintrag mit 'Hugo' dann wird dieser AUTOMATISCH ins Feld eingetragen und aktualisiert bei jedem weiteren Tastendruck - wozu dann aufklappen?

asiat

ich möchte das combobox aufgeklappt wird und nicht vervollständigt

database

Naja, ...

Zitatwährend ich eintippe schon geprüft werden ob der Wert in der Tabelle forhanden ist, wenn ja dann soll Kombifeld aufgeklappt werden
und was soll passieren wenn der Wert NICHT vorhanden ist?

database

So,

wie auch immer....

Voraussetzung dass das Kombifeld so erstellt wurde wie ich im vorherigen Posting beschrieben habe!


Private Sub cboNamen_Change()

    If DLookup("PersonalID", "tblPersonen", "Nachname LIKE '" & Me!cboNamen.Text & "*'") Then
        Me!cboNamen.Dropdown
    Else
        'Mach was anderes
    End If

End Sub


...bitte - jetzt klappt's halt auf.
Das Vervollständigen bleibt trotzdem bestehen außer du stellst es in den Eigenschaften ab ...  Daten ... Automatisch ergänzen ---> Nein

HTH

asiat

ja, es funktioniert...danke

jetzt die Frage, warum funktioniert das?

im meine ich verstehe DLookup Funktion nicht so ganz.
was,wie,woher
so wie ich das sehe überprüft das ding algemein ob die Tabelle einen Bestimmten wert hat oder nicht, ist das richtig?

database

Hi,

Zitatso wie ich das sehe überprüft das ding algemein ob die Tabelle einen Bestimmten wert hat oder nicht
Nein - überprüft ob in einem bestimmten Feld einer Tabelle ein bestimmter Wert vorhanden ist und liefert einen definierten Wert aus einem Tabellenfeld zurück

DLookup ist eine der sogenannten Domänenfunktionen.

Mit Hilfe der Domänenfunktionen ist es möglich einfache Abfragen gegen eine 'Domäne' also eine tabelle oder Abfrage zu senden.

Der Aufbau der DLookup ist wie folgt:

Dlookup(" hier steht in welchem Feld der Domäne nachzusehen ist" , " wie heisst die Domäne in der das Feld zum Nachsehen steht" , " Welches Vergleichskriterium soll angewendet werden?")

In deinem Fall wird bei jedem Tastendruck - in der Regel entscheidet der erste schon über Sein oder Nicht Sein - der Textinhalt des Kombifeldes festgestellt.
Dieser festgestellte Wert z.B. "F" wird mit einem Stern versehen - "F*" und dann wird in dem im Vergleichskriterium angegebenen Feld nachgesehen ob eine Entsprechnung gefunden werden kann.
Deine DLookup ist so aufgebaut, dass sie im Entsprechungsfall den Primärschlüssel der Domäne liefert.
Dadurch dass die Funktion in einer Bedingung eingebettet ist (If ... Then ... Else) liefert sie je nach Erfüllung True oder False zurück.

Im True Fall (es wurde eine Entsprechung gefunden) - klappt die Liste auf cboNamen.DropDown

Alles klar?

asiat

ach so, mit der Domäne wird einfach die Tabelle gemeint...  :-\ doofes MS
und DLookup kann nur True oder False ausgeben?

oma

Hallo asiat,

nichts für ungut - wir werden dir weiter helfen.

Aber mein Rat - du solltest dich einmal mit den elementares Grundlagen von Access beschäftigen.
Es gibt viele gute Fachliteratur - dann kannst du das doofe MS auch besser kennenlernen.


Gruß Oma
nichts ist fertig!

asiat

ich beschäftige mich seit 3 Woche mit access/VBA,  ich lese Microsoft Press Bücher, finde die eigentlich ganz gut...einige sachen versteht man sofort, andere  halt nicht.

database

Na guten Morgen,

Zitateinige sachen versteht man sofort, andere  halt nicht
sehe da aber die doofe Seite von MS eigentlich auch nicht  8)

ZitatEs gibt viele gute Fachliteratur
UND die Online-Hilfe in der z.B. die DLookup-Fun ktion so detailliert beschreiben ist, dass sie eigentlich wirklich JEDE(R) verstehen MUSS.  ;D

ZitatDLookup kann nur True oder False ausgeben
Nein, so ist das nicht, sie kann schon Feldwerte auch ausgeben - in deinem Fall aber liefert sie innerhalb der If ... Then ... Else Wahr oder Falsch zurück.
Du musst meine Erklärungen, wenn du sie anforderst, schon genau lesen!  :-\