1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
Public Function valeurRequete(r As String, Optional i As Integer = 1) As String
'On Error GoTo erreur_valeurRequete ' bizarrement il rentre systématiquement dedans !!!
'si la requete rend plusieurs lignes, indiquez le numéro de ligne via l'argument optionel i
'dans la requete r, il est nécessaire de renommer le champ X en "champ" comme ceci: "SELECT X AS champ"
Dim adoRs As New ADODB.Recordset
Dim adoCon As New ADODB.Connection
adoCon.Provider = "Microsoft.Jet.oledb.4.0"
adoCon.ConnectionString = Application.CurrentDb.Name ' cette variable indique le chemin complet du fichier access courant
adoCon.Open
Set adoRs = New ADODB.Recordset
Set adoRs = adoCon.Execute(r)
'indice de parcours
Dim n As Integer
n = i
While Not adoRs.EOF And n > 0
'cas où la requete ne rend aucun résultat
If IsNull(adoRs!champ) Then
valeurRequete = ""
Else
valeurRequete = adoRs!champ 'on récupère la valeur du champ courant
End If
n = n - 1
adoRs.MoveNext 'tres important, sinon boucle infinie
Wend
' parfois Access se plaint que la base est en cours d'utilisation malgré le adoCon.close, alors j'essaye de decharger l'objet
Set adoRs = Nothing
adoCon.Close
Set adoCon = Nothing
'erreur_valeurRequete:
' parfois Access se plaint que la base est en cours d'utilisation malgré le adoCon.close, alors j'essaye de decharger l'objet
'MsgBox "Erreur dans valeurRequete: " & Err.Description & " / Requete: " & r & " / i = " & i
'adoCon.Close
'Set adoRs = Nothing
'Set adoCon = Nothing
'Unload adoRs
'Unload adoCon
'la valeur retournée doit etre stockée dans valeurRequete
End Function |
Partager