Requête SQL Server 2008 dans VBA

Bonjour,

Après avoir commencé à m'intéresser à VBA, je suis en train de développer une interface entre un tableur Excel et une base de donnée stoquée sur un serveur SQL Server 2008 distant.

Le tout étant assez dynamque, il est possible que les requêtes générées retournent une table nulle dans SQL. Malheureusement, je ne sais pas comment "capturer" cette info.

Voici le code comme il est en ce moment :

Dim Cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim SQLStr As String
Dim Resultat As String
Dim Server_Name , Database_Name , User_ID , Password As String

[Définition de Server_Name , Database_Name , User_ID , Password]

Set Cn = New ADODB.Connection
Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & _
        ";Uid=" & User_ID & ";Pwd=" & Password & ";"

SQLStr = "[ma requête SQL]"

rs.Open SQLStr , Cn , adOpenStatic
Resultat = rs.Fields("[nom de la colonne que je cherche]")

rs.Close
Set rs = Nothing

Cn.Close
Set Cn = Nothing

L'erreur retournée est évidemment sur la ligne

Resultat = rsn.Fields("[nom de la colonne que je cherche]")

qui me dit :

Run-time error '3021'

Either BOF or EOF is True, or the current record has been deleted.

Requested operation requires a current record.

Je précise qu'il ne peut y avoir soit une seule ligne soit rien comme réponse à ma requête SQL et qu'elle est parfaitement fonctionnelle lorsqu'elle est insérée dans un query. La valeure recherchée dans le champs de la colonne nommée est un varchar(10), s'il existe. Finalement, une condition "IF" suivera ce code, où j'aurai besoin qu'un code s'execute si Resultat a capté une valeure (valeure qui sera utilisée plus loin dans le code) et un autre code si Resultat a "capté" un null (ou autre ?)

Si vous avez d'autres méthodes à utiliser pour tester l'existance d'un retour pour la commande SQL, je suis preneur aussi!

Merci pour toute piste et conseille!

dspot

Bonsoir,

la proriété EOF du recordset permet de savoir s'il y a un enregistrement.

Exemple complet d'utilisation d'un recordset

If oRS.EOF Then

MsgBox "Aucun enregistrement"

Else

'parcours de tous les résultats

While Not oRS.EOF

If IsNull(oRS.Fields("NomColonne").Value) Then

'gestion du NULL

MsgBox "Valeur nulle !"

Else

'affichage de la valeur

MsgBox oRS.Fields("NomColonne").Value

End If

oRS.MoveNext 'résultat suivant

Wend

End If

Bouben

Merci Bouben, c'est exactement ce que je cherchais à faire! Je vais tester ça demain.

ABE

dspot

Rechercher des sujets similaires à "requete sql server 2008 vba"