2009-04-21 6 views
1

Ich verwende Access 2007 Verbindung zu einer MS SQL-Datenbank über ODBC. Ich habe eine Tabelle ‚Basen‘ genannt es wie folgt aussieht:Ist diese Suchmethode in Access VBA möglich?

Name  ID  Site 
-------------------- 
Home  1  111 
Work  2  111 
Car  3  111 
Castle 4  111 
Store  1  222 
Rest  2  222 

Jetzt kommt der schwierige Teil ist, dass der einzige Teil dieser Tabelle, die Website ist wird es wissen.
Ich weiß, ich kann einen DLookup machen und den ersten Datensatz (Home, 1) bekommen und diese in Variablen speichern.
ABER ich muss irgendwie den nächsten Datensatz (Work, 2) holen und diese in anderen Variablen speichern und dann die Tabelle durchlaufen, bis ich jeden Datensatz habe, während der Standort 111 ist, in Variablen gespeichert.
Irgendwelche Ideen? Der Zweck davon ist, diese zurückgegebenen Werte als Zeichenfolgen zu speichern und sie schließlich in eine komplizierte Abfrage einzutragen.

+1

Ihre Methodik klingt falsch, d. H. Verfahrensmäßig, wenn Sie IMO nach einer Set-basierten Lösung suchen sollten. Indem Sie eine Ergebnismenge durchlaufen, Werte im Speicher abfragen und dann in eine zweite Abfrage stecken, versuchen Sie, dem Optimierer mitzuteilen, wie er seine Aufgabe erledigen soll. Besser, das Ganze in einer Abfrage zu tun (wenn auch eine komplexe für Sie, aber vertrauen Sie dem Optimierer). Tatsächlich klingt es so, als ob Sie versuchen, den INNER JOIN neu zu erfinden :) – onedaywhen

Antwort

4

Ich bin ein bisschen eingerostet, aber Sie sollten in der Lage sein, eine Abfrage wie zu tun.

SELECT * FROM Bases WHERE Site = 111 

Return dies zu einem Datensatz, dann einfach Schleife durch den Satzdatensatz von Elementen zu einem Array für die Lagerung und die zukünftige Verwendung hinzufügen, je nachdem, was Sie brauchen.

Wenn Sie sich mit Recordsets nicht auskennen, werfen Sie einen Blick auf at this article.

+2

Um ein Array aus einem Datensatz zu laden, sollten Sie die Methode GetRows() des Datensatzes verwenden. Dieser Link hat eine klare Beschreibung, wie es geht: http://www.apluskb.com/scripts/How_can_I_convert_a_answer391.html – HansUp

+0

@HansUp - Great one so gut! –

0

Wie onedaywhen vor mir sagte, ist das Durchlaufen einer Ergebnismenge zum Erstellen einer zweiten Abfrage nicht die optimale Lösung.

Ich weiß nicht, wie die zweite (komplizierte) Abfrage aussieht, aber können Sie so etwas nicht tun?

select * from OtherTable 
where Name in 
(
    select Name from Bases where Site = 111 
)