2013-08-11 4 views
0

J'essaie d'exécuter une instruction SQL à partir d'Excel en utilisant vba. Tout ce que j'ai besoin de faire est d'exécuter l'instruction select et d'utiliser les valeurs dans mes tableaux Array1 et Array2. Array1 et Array2 stockent la condition WHERE pour deux colonnes.Exécution d'une instruction SQL SELECT avec des valeurs provenant de différents tableaux - alors que le tableau n'est pas vide

par exemple.

for i=0 to UBOUND(Array1) 'UBOUND for Array2 will always be equal to UBOUND for Array1 

sql = "SELECT name, address, state, zip WHERE 
fname='" & Array1(i) & "' AND lname= '" & Array2(i) &"'" 
open rs.sql 
sheets(1).range("A1").CopyFromRecordset rs 

Next 

On dirait que cela ne semble pas fonctionner. Je pense que je n'utilise pas la boucle correctement. Quelqu'un pourrait-il suggérer ce que je fais mal ici?

Merci beaucoup d'avoir examiné la question.

Edit 1:

Paramètres de connexion:

Voici le code:

Dim cn As ADODB.Connection 
Dim rs As ADODB.Recordset 

Set cn = New ADODB.Connection 
Set rs = New ADODB.Recordset 


'database credentials 
Dim uName As String, uPass As String 

Dim strConnect As String 
strConnect = "Driver={SQL Server Native Client 10.0};" & "Server=[servername]" & "Database=[dbname] ;Uid=" & uname & ";Pwd=" & upass & ";trusted connection=yes" 


cn.ConnectionString = strConnect 
cn.Open 

for i=0 to UBOUND(Array1) 'UBOUND for Array2 will always be equal to UBOUND for Array1 

sql = "SELECT name, address, state, zip FROM XYZ WHERE 
fname='" & Array1(i) & "' AND lname= '" & Array2(i) &"'" 

With rs 
.ActiveConnection = cn 
.Open sql 
...[code to check for EOF/BOF, if not EOF or BOF then paste in pre defined cells] 


sheets(1).range("A1").CopyFromRecordset rs 

Next 


end with 
rs.close 
cn.close 
+0

Vous devez poster votre ** code ** réel. Le code que vous avez posté est invalide - il nécessite de nombreuses guillemets et il devrait y avoir un point avant 'CopyFromRecordset'. Même le UBOUND est incorrect sans crochets. –

+0

Merci, Andy d'avoir regardé ça. J'ai mentionné que c'est un exemple de code. Howvere, j'ai fait les modifications pour refléter le code qui est réellement dans le module. – vbalite

+0

Donc probablement vous recevez une erreur, peut-être à cette ligne 'rs.sql ouvert. Quel est le message d'erreur complet? –

Répondre

0

a finalement obtenu ma tête autour d'elle. Couple de choses - 1. Le tableau 1 était vide en raison d'une erreur de formule. Une fois que j'ai corrigé cela, j'ai pu lancer la requête. Deuxièmement, suivi la construction dans la boucle:

cn.open 
for i=lbound(array1) to rbound(array2) 
    sql="SELECT name, address, state, zip FROM XYZ WHERE fname='" & Array1(i) & "' AND lname= '" & Array2(i) &"'"" 
    rs.open sql, cn 
    sheets(1).range("A2").copyfromrecordset rs 
    rs.close 
next i 
cn.close 
Questions connexes