Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/10/2011, 12h13   #1
Membre actif
 
Avatar de Peanut
 
Inscription : décembre 2003
Messages : 375
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 375
Points : 192
Points : 192
Par défaut Requête SQL sans résultat en VBA (ADO)

Bonjour,

j'ai un bête (?) code VBA qui effectue une requête en base.
Quand j'exécute le SELECT avec SQL Server j'ai bien un résultat, en revanche en VBA/ADO sous Excel, j'ai "<BOF ou EOF est égal à True ou l'enregistrement actuel a été supprimé. L'opération demandée nécessite un enregistrement actuel.>" si j'essaye de lire le résultat.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim cnn As New ADODB.Connection
cnn.Open "PROVIDER=SQLOLEDB;DATA SOURCE=" & bd & ";User ID= " & login & ";Password=" & mdp & ";Trusted_Connection=False"
 
    req_gr_id = "select GRP_ID from GROUPE where GRP_NOM = '" & entity & "'"
 
    Dim rs As New ADODB.Recordset
    If rs.State <> adStateClosed Then rs.Close
    rs.ActiveConnection = cnn
    rs.Open req_gr_id, cnn
    'rs.MoveFirst
 
    GrPeres = rs(0)
 
    rs.Close
D'ailleurs rs.RecordCount = -1 après exécution de cette requête.
Peanut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 12h49   #2
Expert Confirmé
 
Avatar de pc75
 
Inscription : septembre 2004
Messages : 2 805
Détails du profil
Informations personnelles :
Âge : 56
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2004
Messages : 2 805
Points : 3 003
Points : 3 003
Bonjour,

Et comme ça ?

Code :
1
2
 
req_gr_id = "select GRP_ID from GROUPE where GRP_NOM = 'entity'"
__________________
Par principe, je ne réponds pas aux messages URGENT.
Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu)
pc75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 15h29   #3
Membre actif
 
Avatar de Peanut
 
Inscription : décembre 2003
Messages : 375
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 375
Points : 192
Points : 192
Merci, mais c'était juste une mauvaise retranscription dans mon post en voulant simplifier, le problème n'est pas là. (j'ai corrigé le post)

J'ai essayé avec une autre requête, sur une autre table et une autre base, même erreur.

A noter que j'arrive dans le même programme, à appeler des procédures stockées sans problème (avec des cmd.Execute à la place des Recordset bien sûr).

J'ai essayé de replacer le Recordset par cmd.Execute du coup :
Code :
1
2
3
4
5
6
7
8
With cmd
        .ActiveConnection = cnn
        .CommandType = adCmdText
        .CommandText = "select GRP_ID from GROUPE where GRP_NOM ='" & entity & "'"
        .Execute
 
        GrPeres = .Parameters(0).Value
   End With
mais c'est pareil : 0 résultat, alors que si je fais un copier-coller du .CommandText pour l'exécuter dans SQLServer ça marche !

Donc je suppose que ce n'est pas un problème au niveau de la requête elle-même mais plutôt au niveau des paramètres de la connexion ???
Peanut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2011, 21h43   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 905
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 905
Points : 7 196
Points : 7 196
Bonjour,

As tu essayé en spécifiant le nom de la base
Code :
cnn.Open "PROVIDER=SQLOLEDB;DATA SOURCE=" & bd & "; DATABASE = MABASE ;User ID= " & login & ";Password=" & mdp & ";Trusted_Connection=False"
Ou dans la requête
Code :
.CommandText = "select GRP_ID from MABASE.dbo.GROUPE where GRP_NOM ='" & entity & "'"
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 09h19   #5
Membre chevronné
 
Inscription : octobre 2006
Messages : 541
Détails du profil
Informations personnelles :
Localisation : France, Ardèche (Rhône Alpes)

Informations forums :
Inscription : octobre 2006
Messages : 541
Points : 760
Points : 760
Bonjour

peut-^tre (...) supprimmer trusted connection

source
http://www.connectionstrings.com/sql-server#p6
__________________
Michel_M
Michel_M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 09h19   #6
Membre chevronné
 
Inscription : octobre 2006
Messages : 541
Détails du profil
Informations personnelles :
Localisation : France, Ardèche (Rhône Alpes)

Informations forums :
Inscription : octobre 2006
Messages : 541
Points : 760
Points : 760
Bonjour

peut-^tre (...) supprimer "trusted connection"

source
http://www.connectionstrings.com/sql-server#p6
__________________
Michel_M
Michel_M est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 11h16   #7
Membre actif
 
Avatar de Peanut
 
Inscription : décembre 2003
Messages : 375
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 375
Points : 192
Points : 192
Merci à vous 2, c'est la 2e réponse de jfontaine qui est la bonne : ma requête ne fonctionne que si j'indique base.dbo.table dans la requête. Le nom de la base dans la chaîne de connexion ne suffit pas (contrairement aux appels de procédures stockées bizarrement).

Et s'est greffé à ça un 2e problème que j'ai fait apparaître en essayant de comprendre le 1er :
j'avais ajouté un test "if rs.RecordCount > 0" pour ne pas planter le programme à chaque passage mails il retourne toujours -1 !
Du coup, même après correction du 1er problème, je ne récupérais jamais les résultats de mon SELECT.
D'après http://support.microsoft.com/kb/194973/en-us c'est un problème connu : j'ai donc ajouté "adOpenStatic" (même si je n'ai pas bien compris sa signification ) et ça fonctionne.
Peanut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 11h43   #8
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 905
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 905
Points : 7 196
Points : 7 196
Il me semble qu'avant le RecordCount il faut faire un MoveLast.
C'est a tester
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h32.


 
 
 
 
Partenaires

Hébergement Web