IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Problème avec le message : "une opération en plusieurs étapes a généré des erreurs"


Sujet :

VB 6 et antérieur

  1. #1
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut Problème avec le message : "une opération en plusieurs étapes a généré des erreurs"
    Bonjour

    Je dévéloppe une application sous vb6 et Mysql 5. J'ai le message d'erreur suivant
    une opération en plusieurs étapes a généré des erreurs. Vérifiez chaque valeur d'état
    lorsque le code ci-après est exécuté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim rs As New ADODB.Recordset
    Dim SqlStat As String
     
    SqlStat = "SELECT STATISTIQUES.region, STATISTIQUES.Nom_Region, Sum(STATISTIQUES.Nbre) AS Total, Sum(STATISTIQUES.prix) AS SommeDeprix From STATISTIQUES GROUP BY STATISTIQUES.region, STATISTIQUES.Nom_Region"
     
    rs.Source = SqlStat
    Set rs.ActiveConnection = cnx
    rs.CursorLocation = adUseClient
    rs.Open
    STATISTIQUES est une vue que j'ai crée sous Mysql. Je n'arrive ni à connaître l'origine du problème ni à trouver comment la corriger. Alors si quelqu'un peut m'aider, ça me ferait énormement plaisir.
    Merci d'avance pour vos apports.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Bonjour,

    as-tu essayé ta requête directement sous MySQL (en mode de commandes) ? cela te retournera peut-être un numéro d'erreur

  3. #3
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    En fait, la requête marche nickel sous Mysql, je l'ai testé maintes fois avec phpMyadmin et SQL Manager 2005 For Mysql.

  4. #4
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    Alors, il te reste une solution : construire ta requête petit à petit tu verras à partir de quel ajout de bout de SQL l'erreur se produit !

    Solution un peu barbare, je sais, mais qui a l'avantage de te permettre de t'en sortir assez rapidement

  5. #5
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Khany, je viens de suivre tes recommandations. J'ai constaté que c'est l'instruction
    Sum(STATISTIQUES.Nbre) AS Total, Sum(STATISTIQUES.prix) AS SommeDeprix
    qui génère l'erreur. Quand je l'enlève de la requête, ça marche. Mais je ne peux pas l'envlever car j'en vraiment besoin. J'avoue que je ne comprends pas du tout pourquoi ça plante à ce niveau.

  6. #6
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    tu n'as pas éventuellement un de tes champs que tu veux "sommer" à Null ?

    sinon, l'erreur provient de code SQL pur donc, peut-être l'explication se trouve-t-elle dans les forums, FAQ ou cours SQL

  7. #7
    Membre habitué Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Points : 197
    Points
    197
    Par défaut
    tu n'as pas éventuellement un de tes champs que tu veux "sommer" à Null ?
    +1
    Très souvent le SGBD retourne un résultat correct, mais assujetti d'un warning (indiquant que les valeurs nulles ont été ignorées).
    L'utilisation de ISNULL() dans l'aggrégat SUM() suffit à résoudre le problème.

  8. #8
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    L'utilisation de ISNULL() dans l'aggrégat SUM() suffit à résoudre le problème
    .
    Cela revient-il à écrire la requête comme suit ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sum( ISNULL(STATISTIQUES.Nbre)) AS Total, Sum( ISNULL(STATISTIQUES.prix)) AS SommeDeprix
    Autre remarque, même si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.CursorLocation = adUseClient
    , le recordcount me retourne -1. Bizarre . J'avoue que je suis un peu perdu. Alors merci encore une fois pour vos apports.

  9. #9
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    -1 signifie qu'il ne trouve aucun enregistrement !

  10. #10
    Membre habitué Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par callo
    Cela revient-il à écrire la requête comme suit ?...
    Non, la syntaxe de ISNULL() est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ISNULL ( check_expression , replacement_value )
    C'est tiré de l'aide Transact-SQL, mais je pense que c'est du SQL standard.

    Citation Envoyé par khany
    -1 signifie qu'il ne trouve aucun enregistrement !
    Non c'est 0 quand il n'y en a pas. -1 c'est quand il est incapable de déterminer le nombre d'enregistrements (erreur dans la requête).

  11. #11
    Membre actif
    Avatar de repié
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    335
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 335
    Points : 281
    Points
    281
    Par défaut
    As tu essayé
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    rs.CursorLocation = adUseServer

    Ca m'arrive que le problème vient de la.

  12. #12
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    As tu essayérs.CursorLocation = adUseServer
    ? Oui, mais bien que sous phpmyadmin la requête retourne 5 lignes, mon rs.RecordCount me donne toujours -1.
    Je ne sais pas si c'est parce que c'est une vue. Est-ce Mysql gère correctement les vues ?

  13. #13
    Membre actif
    Avatar de repié
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    335
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 335
    Points : 281
    Points
    281
    Par défaut
    quand tu fait : vb propose plusieurs parametres

    Toi tu as déja configuré certeins, mais d'autres restent par défaut. Tu dervrai regardé si ca change pas (cf tutos ADO trs complet)

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Oui, mais bien que sous phpmyadmin la requête retourne 5 lignes, mon rs.RecordCount me donne toujours -1.
    Citation Envoyé par BertrandA
    Non c'est 0 quand il n'y en a pas. -1 c'est quand il est incapable de déterminer le nombre d'enregistrements (erreur dans la requête).
    Il me semble que ce problème ADO a déjà été soulevé en utilisant le curseur côté serveur, même s'il n'y a pas d'erreur dans la requête.
    Un rs.MoveLast suivi d'un rs.Movefirst était la solution pour que .RecordCount renvoie le bon nombre d'enregistrements.

    A essayer...

  15. #15
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    J'ai essayé la méthode Phifi comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Dim rs As New ADODB.Recordset
    Dim SqlStat As String
     
    SqlStat = "SELECT STATISTIQUES.region, STATISTIQUES.Nom_Region, Sum(STATISTIQUES.Nbre) AS Total, Sum(STATISTIQUES.prix) AS SommeDeprix From STATISTIQUES GROUP BY STATISTIQUES.region, STATISTIQUES.Nom_Region"
     
    rs.Source = SqlStat
    Set rs.ActiveConnection = cnx
    rs.CursorLocation = adUseServer
    rs.Open
     
    rs.MoveLast
    rs.MoveFirst
    Dim i as Integer
    i = rs.RecordCount
    rs.MoveLast me génère l'erreur suivant :
    L'ensemble de ligne ne prend pas en charge les récupérations arrière
    . Et quand je remplace rs.CursorLocation = adUseServer par rs.CursorLocation = adUseClient rs.Open génère ce message :
    Une opération en plusieurs étapes a généré des erreurs. Vérifiez chaque valeur d'état

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Alors BertrandA a probablement raison concernant l'alerte sur SUM, tu a peut-être des champs à NULL

    Citation Envoyé par BertrandA
    ISNULL ( check_expression , replacement_value )
    Cette fonction ISNULL() ne semble pas identique en MySQL puisque qu'elle renvoie 0 ou 1

    Essaye au pire de rajouter un critère à ta requête pour te renvoyer des enregistrements dont tu es sûr qu'aucun d'eux ne possède de champs à NULL

  17. #17
    Membre habitué Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Points : 197
    Points
    197
    Par défaut
    Vérification faite, ISNULL() n'est pas standard dans SQL, désolé pour le conseil foireux.
    En revanche COALESCE() l'est, supporté parMySQL en plus. Fais un test dans ton interpréteur SQL en modifiant les SUM :

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Citation Envoyé par BertrandA
    En revanche COALESCE() l'est, supporté parMySQL en plus. Fais un test dans ton interpréteur SQL en modifiant les SUM :
    Hu ! jamais entendu parler de cette fonction ; ça va me servir =)

  19. #19
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    SUM(COALESCE(x, 0)) marche nickel dans mon interpréteur SQL mais dans mon programme le problème persiste toujours, le recordcount retourne sans cesse -1 au lieu de 5.

  20. #20
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Si cela peut servir à quelqu'un :
    j'avais le même message en mettant à jour une BDD SQL Server 2000 par un datagrid et un contrôle ADO, en VB6. La raison du message était la suivante : la colonne de la table que je mets à jour est de type varchar(20), et je saisissais plus de 20 caractères dans la colonne du datagrid ...

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/07/2017, 20h15
  2. Réponses: 4
    Dernier message: 25/02/2015, 17h21
  3. Une opération en plusieurs étapes a généré des erreurs
    Par randriano dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 07/11/2008, 15h43
  4. [OLEDB] Une opération en plusieurs étapes a généré des erreurs
    Par randriano dans le forum Interfaces de programmation
    Réponses: 1
    Dernier message: 05/11/2008, 13h06
  5. Réponses: 4
    Dernier message: 11/09/2008, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo