2016-07-20 17 views
1

Einfache Frage. Zum Beispiel habe ich einen Kunden, der 10 Bestellungen hat und jede Bestellung 6-10 Artikel enthält.MS Access vba Abfrage wo

Ich möchte eine VBA-Abfrage erstellen, die alle Artikel eines bestimmten Kunden anzeigen wird.

Meine Frage ist:

x = CustomerNum 
Query = "Select OrderNum from CustomerOrderT Where CustomerNum = " & x 
Set result = CurrentDb.OpenRecordset(Query) 

y = result!OrderNum 
'(there is a lot of orders on y) 

Query = "Select Product From OrderProducts Where OrderNum = " & y 
Set result = CurrentDb.OpenRecordset(Query) 

Das Problem ist, dass ich nur die Produkte der ersten Ordnung sehen, und ich kann nicht die Produkte aller Aufträge sehen, die ich auf der ersten Abfrage wählen. Brauchen Sie etwas Hilfe, um diese Situation zu behandeln. Vielen Dank.

+0

das ist, weil Sie nur die erste Reihenfolge erhalten, müssen Sie durchlaufen die zurückgegebenen Datensatz und durchlaufen jede Bestellnummer. – Sorceri

Antwort

1

Sie können nur eine einzelne Abfrage für alle Aufträge ausführen:

x = CustomerNum 
Query = " SELECT CustomerOrderT.CustomerNum, " & _ 
        CustomerOrderT.OrderNum, " & _ 
     "   OrderProducts.Product " & _ 
     " FROM CustomerOrderT INNER JOIN OrderProducts " & _ 
       ON CustomerOrderT.OrderNum = OrderProducts.OrderNum " & _ 
     " WHERE (((CustomerOrderT.CustomerNum)=" & x & ")) " & _ 
     "ORDER BY CustomerOrderT.OrderNum, " & _ 
     "   OrderProducts.Product;" 

Und dann Schleife über alle Datensätze, OrderNum

in jeder Änderung der Feststellung Aber Vorsicht SQL wie diese, wenn Sie bauen don Sie können nicht steuern, wie die Variable CustomerNum zugewiesen wird, wenn Sie sich für SQL-Injection-Angriffe öffnen.

+0

Excel VBA-Code hat fast keine Sicherheit, so dass SQL-Injection-Angriffe nicht vermieden werden können, VBA sogar Passwort geschützt kann leicht zugegriffen werden/gehackt werden. Man sollte es also nicht verwenden, wenn Sicherheitsbedenken bestehen. – caiohamamura

+2

Im Gegensatz dazu spielt es keine Rolle, ob der Code VBA ist oder ob das VBA-Projekt gesperrt ist, wenn Sie benutzerdefiniertes SQL für eine Datenbank ausführen, aber einem Benutzer erlauben, ein schädliches SQL-Snippet in einer Datenbank einzugeben Zelle oder InputBox, und das Snippet wird schließlich in eine SQL-Zeichenfolge eingefügt, dann haben Sie größere Probleme. – ThunderFrame

+0

Ich weiß, aber in Excel VBA ist es fast unmöglich zu vermeiden, dass ein böswilliger Benutzer SQL-String zu hacken, als (s) er den Code leicht ändern kann. Die einzige Lösung besteht darin, sich mit eingeschränkten Berechtigungen in der Datenbank anzumelden. Dann müssen Sie sich auch nicht um die SQL-Injection kümmern, da das Injizieren nur einen Fehler zurückgibt. – caiohamamura