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

IHM Discussion :

Problème avec SQL dans code VBA


Sujet :

IHM

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Problème avec SQL dans code VBA
    Bonjour,

    Je suis sur un petit projet actuellement et je rencontre une petite erreur mais qui je dois l'avouer me pose quelques problèmes.

    En fait j'ai une Fiche de sous catégorie, sur laquelle je peu effectuer des modifications et j'ai créer un bouton qui me permettrais d'annuler les modifs.
    Je stocks donc les valeur au moment du chargement de la fiche et les compare lorsque j'appuis sur le bouton Annuler afin de restituer les anciennes valeurs.

    J'ai une table CATE (catégorie) et SSCATE (sous-catégorie), je pars du principe que chaque sous catégorie appartient à une catégorie (d'où le Sscate_cateid qui est la clé étrangère de la table catégorie).
    Pour faire simple si je détecte une différence entre l’ancienne valeur et la nouvelle valeur de la clé étrangère, j'applique l'update et je ré attribue l'ancienne valeur que je récupère par une variable "cateid2".

    Quand je fais une vérif sur les valeurs qui sont attribué à mes variable "cateid" et "cateid2" je récupère bien les valeurs de la nouvelle et de l'ancienne clé étrangère donc la dessus pas de problème.
    Si dans l'update je remplace la variable par un chiffre ça marche aussi.

    Mais dans l'état sa ne marche pas il me conserve la nouvelle valeur au lieu de remettre l'ancienne et la je pige plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If cateid <> cateid2 Then
    Ssql = "UPDATE SSCATE SET Sscate_cateid = " & cateid2 & " " _
                & "WHERE Sscate_id = " & sscateid & "; "
    DoCmd.RunSQL (Ssql)
    End If
    Si quelqu'un à une petite idée je l'en remercie d'avance parce que là je vois pas ce qui coince pour le coup.

    Cordialement

  2. #2
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    glemoin bonjour,

    En utilisant le mode débogage, tu devrais facilement trouver la source de ton problème car visuellement la requête semble cohérente.

    1. Vérifier les valeurs de cateid et cateid2
    2. Récupérer Ssql dans la fenêtre d'exécution (debug.print), la copier et la coller (mode sql) dans l'assistant création de requête.

    Regarde ce tutoriel afin de comprendre l'utilisation du mode débogage : http://cafeine.developpez.com/access...el/debugprint/

    JimboLion

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Dans un premier temps je tenais à te remercier de ta réponse.
    J'ai fais un petit test que je vais illustré si cela peu vous éclairer un peu:
    J'ouvre mon formulaire sur la fiche :

    MAGIC THE GATHERING

    Qui d'origine appartient à la catégorie Jeux de carte (clé primaire 1)
    Je modifie cette catégorie en Jeux de plateau(clé primaire 2)

    J'appuis sur le bouton annulé ce qui renvois vers le code posté dans mon premier message.

    Celui-ci devrait donc remettre les anciennes valeurs dans la base soit

    Catégorie Jeux de carte (clé primaire 1)

    Voila je résultat que j'obtiens avec un debug.print

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE SSCATE SET Sscate_cateid = 1 WHERE Sscate_id = 17;
    se qui est parfait puisqu'il ré-attribue la valeur 1 à la clé étrangère de la table catégorie donc je pouvais pas rêvé mieux.

    Mais ça marche pas quand j'ouvre ma table sous catégorie MAGIC THE GATHERING se retrouve dans les Jeux de plateau (clé primaire 2)....

    Là je suis vraiment à la peine je capte pas le résultat de ma requête est bon mais rien ne s'écrit dans la base de donnée, le pire étant que si je remplace directement ma variable par 1 au lieu de récupérer le résultat par là ça marche.

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    glemoin,

    Oh que oui, cela est étrange !

    Donc la déclaration de ta variable est t-elle passée en long ?

    peux tu essayer cela car à part un mauvais typage, je ne comprends pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If val(cateid) <> val(cateid2) Then
    Ssql = "UPDATE SSCATE SET Sscate_cateid = " & val(cateid2) & " " _
                & "WHERE Sscate_id = " & sscateid & "; "
    DoCmd.RunSQL (Ssql)
    End If
    JimBoLion

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Alors j'ai vérifié tout est bien déclaré en Integer et en modifiant le code comme tu le proposé j'ai le même résultat.

  6. #6
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    glemoin,

    Et si le problème ne se situait pas là, mais qu'un traitement ultérieur re-modifiait cette valeur ?

    JimBoLion

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    En fait je rectifie si je remplace ma variable par 1 directement ça ne marche pas non plus.
    Ça me sort bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE SSCATE SET Sscate_cateid = 1 WHERE Sscate_id = 17;
    mais ça change rien dans la base, il me semblait que ça marchait mais en fait non plus. Si cela peut aidé à comprendre moi ça ne éclaircie pas vraiment.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    La solution à été trouvé par jimbolion
    Je la met ici si cela peut dépanner quelqu'un :

    En fait il suffisait d’intervertir le lancement de la requête avec la fermeture du formulaire car cela générer un conflit.

    AVANT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Val(cateid) <> Val(cateid2) Then 'Mais la cate elle à été modifié je mets donc à jour la CATE UNIQUEMENT.
                Ssql = "UPDATE SSCATE SET Sscate_cateid = " & cateid2 & " " _
                & "WHERE Sscate_id = " & sscateid & "; "
                DoCmd.RunSQL (Ssql)
                DoCmd.Close acForm, "SSCATEMODIF"
                Debug.Print Ssql
    APRES
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Val(cateid) <> Val(cateid2) Then 'Mais la cate elle à été modifié je mets donc à jour la CATE UNIQUEMENT.
                Ssql = "UPDATE SSCATE SET Sscate_cateid = " & cateid2 & " " _
                & "WHERE Sscate_id = " & sscateid & "; "
                DoCmd.Close acForm, "SSCATEMODIF"
                DoCmd.RunSQL (Ssql)
                Debug.Print Ssql

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2K8] Problème connexion sql dans "code intégré"
    Par dirakocha dans le forum SSRS
    Réponses: 0
    Dernier message: 30/07/2009, 11h17
  2. Problème avec SQL dans un tableadapter (select count())
    Par webgig2002 dans le forum VB.NET
    Réponses: 6
    Dernier message: 02/06/2008, 15h08
  3. Problème avec assembleur dans code C++
    Par wishmerhill dans le forum C++
    Réponses: 0
    Dernier message: 05/03/2008, 11h38
  4. requete sql dans code vba
    Par kernel57 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/01/2008, 15h30
  5. Problème SQL dans code VBA
    Par benjisan dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 15/05/2007, 13h22

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