VBA-Access-erste RowSource zu finden, die lookup-Werte
VBA-noob hier (wie dieser Trauer),
In MS Access schrieb ich eine test-Funktion, die den Wert eines Datensatzes Basis, auf einigen Kriterien, die Sie übergeben.
Die Funktion scheint gut zu funktionieren, außer in Fällen, in denen eine Suche in der Spalte, die ich Suche.
Im Grunde könnte es die Rückkehr "19" und 19 korrespondiert mit einem anderen Tabellenwert.
Scheint es, dass die RowSource-von der Spalte ist, was Im nach so ich eine zweite Abfrage den Wert true.
Kann mir jemand zeigen in die richtige Richtung auf der Suche nach der Datensatzherkunft vorausgesetzt, ich kenne den Namen der Spalte und dann nutzen Sie, um den Wert Im nach?
Edit: Es scheint, dass ich nicht erklären, mich klar, Hier ist ein Bild von dem, was ich versucht zu bekommen programmatisch
- Nicht ganz sicher, ob ich verstehe Ihre Frage richtig, aber ich habe versucht deinen code & es funktioniert. Ich Frage mich, ob Ihr problem ist nicht, dass Ihr WÄHLEN Sie ist tatsächlich bringen wieder mehr als eine Zeile, und geben Sie einen anderen Wert, als Sie erwarten würden. Ihre
recordSet
wird nur gehen, um Ihnen den ersten Datensatz. Zu bewegen, um die nächste, die Sie verwenden würdenrecordSet.MoveNext
. Versuchen Sie, Ihr SELECT in einer Abfrage, und sehen, ob es wieder nur eine einzige Zeile. Wenn ja, erklären Sie das problem in ein wenig mehr Details. - Als seitliche Anmerkung - du wirst Schwierigkeiten haben, wenn es nicht irgendwelche Ergebnisse - so Sie wollen auch zu überprüfen, wie
If Not recordSet.EOF Then result = recordSet(column)
- Ich habe Bilder Hinzugefügt, um zu erklären, myslef mehr klar lol
- Die "RowSource", den Sie zeigen ist nur eine Abfrage zum füllen der combo-box zeigt, wenn Sie öffnen die Tabelle. Ich sehe nicht, wie die Datensatzherkunft wird Ihnen helfen, die richtigen Werte zurück, die aus Ihrer Funktion. In Ihrem
lookUpColumnValue
Funktion, nach der Zeilesql = "SELECT...
bitte versuchen Sie eine andere Linie:MsgBox sql
, und lassen Sie uns wissen, welche SQL-Anweisung zeigt, wenn Sie führen Sie den code. Auch, versuchen Sie, erstellen Sie eine neue Abfrage und ausführen, die SQL-Anweisung, und zeige uns die Ergebnisse. Ich denke, dass sollte helfen. - WÄHLEN SIE [WLAN - RAUM].[Main Platz der Kategorie] " AUS [FI - RAUM], WO [FI - RAUM].[Raum] = [parm1] ----- ich würde denken, dass ich brauchen würde, zu wissen, was die Zeile source ist so, dass, nachdem ich diese Abfrage ausführen und Holen Sie sich den numerischen Wert, ich kann dann führen Sie die Datensatzherkunft-Abfrage, um die string-Wert, der es sucht.
- Ich habe eine ähnliche Frage: stackoverflow.com/questions/50979048/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, dieses-ich glaube, dass ich endlich verstehen, warum Sie sich für die RowSource -- sorry, habe ich nicht "get" es auf den ersten. Das Feld, das Sie versuchen zu ziehen, ist ein Fremdschlüssel in einer Tabelle mit Beschreibungen.
Diese Funktion sollte funktionieren, da eine Allgemeine Lösung für alle diese Felder (vorausgesetzt, die RowSource immer den Primärschlüssel erste und die zweite Beschreibung). Wenn es keine Datensatzherkunft, es wird nur ziehen Sie den Wert des Feldes.
Es basiert auf dem ursprünglichen code, anstatt die änderungen, die von @ron, aber es sollte dich in die richtige Richtung. Sollten Sie beheben, damit es parametriert und ermöglichen variant-Datentypen, wie ron vermuten lässt (+1 ron)
Nebenbei, verwenden Sie das kaufmännische und-Zeichen (
&
) beitreten strings zusammen in VBA zu vermeiden, Dinge wie diese:abc = "1" + 1
, wo abc ist jetzt gleich 2 ist anstelle von "11" als man erwarten würde, wenn beide Elemente wurden bestimmt, um strings.lookUpValue
ist so etwas wie "Mike' s Room" - weil der Skalenstriche ('
). Ich will nicht mein edit-code mit, dass zu ändern, weil das wirklich seinen Beitrag & ich will nicht "stehlen" können.Wenn ich verstehe deine Frage richtig, ich denke über eine parameter-Abfrage wird Ihr problem lösen. Mit Parametern ist eine gute übung, da Sie Sie führen implizite Datentyp-Umwandlungen und auch verhindern, dass-injection-Angriffe.
Beachten Sie die folgende Funktion, ich habe die lookupValue um eine Variante geben, die Ihnen erlaubt, zu passieren, wird der Typ des Wertes an die Funktion.
BEARBEITEN