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
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
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