Très nouveau pour toute forme de code. Tentative d'exécuter un script dans VBA qui extraira des données d'une base de données d'accès à l'aide de SQL et les mettra dans un tableur Excel. Le code est similaire à ci-dessous. Fonctionne à blanc mais je ne sais pas comment utiliser les données qu'il extrait. Merci d'avance.
Sub Get_Data()
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL, strInput As String
strFile = "S:\Location.Database.accdb"
strCon = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & strFile
Set cn = CreateObject("ADODB.Connection")
cn.Open strCon
strInput = InputBox("Input Desired Name")
strSQL = "SELECT NAME, Location WHERE NAME =""'strInput'"";"
cn.Execute strSQL
cn.Close
Set cn = Nothing
End Sub
microsoft-excel
vba
sql
Toad62
la source
la source
Recordset
objet pour conserver les résultats de la requête. Notez que vous l'avez déclarérs
mais que vous ne l'utilisez nulle part dans votre code.Réponses:
Vous devez remplir votre objet recordset (c'est la variable rs que vous avez déclarée). J'ai changé le code ci-dessous pour faire exactement cela. Vous pouvez ensuite copier les résultats du jeu d’enregistrements directement dans une plage
RANGE.copyfromrecordset <yourrecordset>
ci-dessous. J’ajoute également le lieu où je vends les résultats dans SHeet1.Range ("A1"). Vous voudrez probablement changer cela. MODIFIÉ POUR AJOUTER: Vous venez de réaliser que vous utilisez une liaison tardive pour ADODB. J'ai ajusté le code pour qu'il fonctionne réellement.Vous pouvez considérer RecordSet (rs dans ce cas) comme une table virtuelle contenant les résultats du code SQL. Vous pouvez interagir avec RecordSet sur un enregistrement par enregistrement (avec rs.MoveFirst, MoveNext, MoveLast) et champ par champ (en itérant dans la collection rs.fields), ou vous pouvez simplement vider les résultats dans une plage.
la source
strSQL = "SELECT NAME, Location WHERE NAME =" & chr(34) & strInput & chr(34) & ";"
Lechr(34)
est un guillemet. Le&
concatène tout cela ensemble. Si Access requiert une simple citation autour du texte (je ne m'en souviens pas par coeur), alorschr(39)
c'est celui que vous souhaitez.