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
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. –
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
Donc probablement vous recevez une erreur, peut-être à cette ligne 'rs.sql ouvert. Quel est le message d'erreur complet? –