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

MS SQL Server Discussion :

Une opération en plusieurs étapes a généré des erreurs


Sujet :

MS SQL Server

  1. #1
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 438
    Points
    1 438
    Par défaut Une opération en plusieurs étapes a généré des erreurs
    Bonjour!

    Je me demande si vous avez déjà eu ce problème sous ADO OLEDB? Et comment avez-vous résolu le problème?
    Voici le message complet:
    Une opération en plusieurs étapes a généré des erreurs. Vérifiez chaque valeur d'état.

    Voici le scénario:
    - j'exécute une requête SELECT très simple ne retournant qu'une ligne
    - après, on update le recordset obtenu (ADO C++)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QueryRecordSet->Fields->Item[L"ID"]->Value = a_varID;
    QueryRecordSet->Fields->Item[L"Nom"]->Value = a_varNom;
    Pour la 1ère instruction (ID), il n'y a aucun problème mais aucun changement car c'est le clé primaire
    Pour la 2ème (Nom), on obtient l'exception mise en gras! Pourquoi? Ne peut-on pas faire cela (update) sur un recordset obtenu par une requête SELECT?
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 848
    Points : 52 966
    Points
    52 966
    Billets dans le blog
    6
    Par défaut
    Dans un curseur la mise à jour ne doit jamais concerner qu'une seule ligne. Or en procédant en deux étapes comme vous le faites, le second UPDATE généré peut porter sur plusieurs ligne. La mise à jour est susceptible d'être incohérente. Elle est donc rejetée.

    Au lieu de vous amuser à faires des update à travers un recordset c'est à dire dans un curseur, ce qui est une absurdité monumentale, faite cela à l'aide de VRAIES REQUÊTES SQL du genre UPDATE MATABLE... !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 438
    Points
    1 438
    Par défaut
    On parle bien là d'ADO
    Je ne fais pas là une 2è UPDATE car la mise à jour totale sera effectuée par (C++)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QueryRecordSet->Fields->Update()
    L'équivalent de l'instruction SQL UPDATE quoi

    à travers un recordset c'est à dire dans un curseur, ce qui est une absurdité monumentale
    Ca se fait!!! Vu les codes à partir desquels je me suis inspiré
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 848
    Points : 52 966
    Points
    52 966
    Billets dans le blog
    6
    Par défaut
    Oui, mais c'est la plus mauvaise manière de faire un UPDATE avec les conséquences que vous voyez !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 438
    Points
    1 438
    Par défaut
    Je crois que cette discussion va un peu dépasser le cadre du SQL pur vers l'utilisation d'un interface de BD (ADO) car utiliser l'instrunction UPDATE ce serait bon mais
    j'ai obtenu un RECORDSET à partir du SELECT que j'ai effectué, ne dois-je pas le manipuler, les interfaces comme ADO facilitent les choses ainsi !!??
    De plus, ces ->Value sont exécutés dans diverses couches de plusieurs classes (POO) qui s'héritent donc utiliser sql update devient difficile voire impossible

    Mais j'apprécie votre interêt pour mon cas SQLPro!
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 848
    Points : 52 966
    Points
    52 966
    Billets dans le blog
    6
    Par défaut
    De plus, ces ->Value sont exécutés dans diverses couches de plusieurs classes (POO) qui s'héritent donc utiliser sql update devient difficile voire impossible
    La moindre des choses serait de vérifier la capacité de votre outil de POO à réaliser des requêtes suffisamment intelligentes pour qu'elles soient comprises par le SGBDR. En la matière j'en ai vu des vertes et des pas mûres !!!

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 438
    Points
    1 438
    Par défaut
    Je vois que vous n'êtes pas fan des trucs comme ADO, ODBC?
    Je comprend un peu car une erreur dès l'affection (bon sang juste une affectation) mais pas à ->Update() ou ->Delete(), c'est ...
    randriano.dvp.com
    Développeur. Product Owner [Agile]. Sites web, mobile apps, système d'information (SI).

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/07/2017, 20h15
  2. Réponses: 4
    Dernier message: 25/02/2015, 17h21
  3. [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
  4. Réponses: 4
    Dernier message: 11/09/2008, 17h12
  5. Réponses: 19
    Dernier message: 21/11/2006, 11h57

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