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

Requêtes et SQL. Discussion :

[VBA] update enregistrement +SQL


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Points : 238
    Points
    238
    Par défaut [VBA] update enregistrement +SQL
    Salut, alors voila je souhaiterais que l'utilisateur selectionne une ligne dans une liste , rentre diverses données et que lorsque je clik sur un bouton il me mette a jour les champs avec ces données.
    Code:

    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
    16
    17
    18
    19
    Private Sub vente_Click()
    Dim DB As Database
    Dim RS As DAO.Recordset
    Set DB = CurrentDb()
    Set RS = DB.OpenRecordset("VOITURE")
     
    If aff_vente.ListIndex > -1 Or Date_vente = " " Or date_commande = " " Or Prix_vente = " " Or liste_clt.ListIndex > -1 Then
    DB.Execute " update VOITURE set dateVente=" & Date_vente & " and DateCommande=" & date_commande & "and PxVenteRéel=" & Prix_vente & " and CodeClt=" & liste_clt.Column(0) & "where NumV=" & aff_vente.Column(0)
    MsgBox "Vente effectuée", vbInformation
    aff_vente.Requery
    Date_vente = " "
    date_commande = " "
    Prix_vente = " "
     
    Else
    MsgBox "Données manquantes", vbCritical
    End If
     
    End Sub
    Il me met une erreur " opérateur manquant" au niveau de ma requete SQL, auriez-vous une idée ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Bonjour,
    D'après la structure de ton if, les valeurs de date et de prix de vente que tu passes dans ta requête sont vides.
    De plus le séparateur de mise à jour est la virgule.
    Donc il faut que tu revoies la structure de ton if pour éviter de passer des blancs à la requête et que tu remplaces les and par des virgules.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Points : 238
    Points
    238
    Par défaut re
    Salut , alors pour les virgules je ne savais pas donc merci mais le point ou je ne suis pas d'accord c'est au niveau du if , normalement (en tout cas si j'ai compris) je if selon moi me permet de verifier si aucune ligne de ma liste deroulante c'est selectionnée et dans ce cas j'affiche un message d'erreur c'est tout.

  4. #4
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Bonsoir,

    Si le message d'erreur se place au niveau de l'instruction SQL, c'est que l'erreur y est!
    Effectivement, j'ai décelé l'absence de certains délimiteurs et d'un espace avant un opérateur logique AND.
    Voici le code SQL que j'ai corrigé. Ah j'ai oublié, j'ai ajouté un point-virgule à la fin. En principe chaque instruction SQL se termine par un point-virgule mais paraît-il cela n'est pas nécessairement important.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "UPDATE VOITURE " & _
    "SET dateVente=#" & Date_vente & "# and DateCommande=#" & date_commande & "# and PxVenteRéel=" & Prix_vente & " and CodeClt=" & liste_clt.Column(0) & _
    "WHERE NumV=" & aff_vente.Column(0) & ";"
    A propos des délimiteurs:
    • " ou ' pour les textes (j'entend double quote ou simple quote)
    • # pour les dates et heures
    • [ ] pour les objets
    • rien pour les autres


    Bon courage et @+

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Points : 238
    Points
    238
    Par défaut re
    Merci pour ta reponse qui m'aide bien pourtant je viens de le tester et l'erreur est toujours la meme^^ :

    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
    16
    17
    18
    19
    20
    21
    22
    Private Sub vente_Click()
    Dim DB As Database
    Dim RS As DAO.Recordset
    Set DB = CurrentDb()
    Set RS = DB.OpenRecordset("VOITURE")
     
    If aff_vente.ListIndex > -1 Or Date_vente = " " Or date_commande = " " Or Prix_vente = " " Or liste_clt.ListIndex > -1 Then
    DB.Execute ("UPDATE VOITURE " & _
    "SET dateVente=#" & Date_vente & "# and DateCommande=#" & date_commande & "# and PxVenteRéel=" & Prix_vente & " and CodeClt=" & liste_clt.Column(0) & _
    "WHERE NumV=" & aff_vente.Column(0) & ";")
     
    MsgBox "Vente effectuée", vbInformation
    aff_vente.Requery
    Date_vente = " "
    date_commande = " "
    Prix_vente = " "
     
    Else
    MsgBox "Données manquantes", vbCritical
    End If
     
    End Sub

  6. #6
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Bonsoir,

    Donc tu obtiens toujours "opérateur absent"?
    Il faut vérifier si tes variables contiennent quelque choses. Est-ce que liste_clt.Column(0) est-il numérique ou texte?
    Ce que je te conseille c'est d'affecter l'instruction SQL à une variable et faire un Debug.Print sur cette variable pour voir le résultat.
    Dans le doute, tu peux nous poster le résultat.
    Au besoin, il faut que tu affiche la fenêtre Exécution pour voir le résultat de Debug.
    Bon courage et @+

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If aff_vente.ListIndex > -1
    Vérifie si un item est sélectionné dans ta zone de liste
    Vérifie si la valeur de date_vente est égale à un espace
    Idem pour date commande
    Idem pour le prix
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Or liste_clt.ListIndex > -1 Then
    Vérifie si un item est sélectionné dans ta zone de liste

    Si une de ces conditions est remplie, alors tu éxécute la requête.
    A contrario si aucune de ces conditions n'est remplie, alors tu envoies la msgbox.

    Tu vérifie donc en effet si tes zones de liste ont un item sélectionné, mais tu contrôle aussi que les zone de date et de prix (que tu envoies à ta requête) sont vides). Donc tu envoies des valeurs vides à ta requête.

    Comme te l'a conseillé Mahefasoa, ajoute avant le db.execute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Debug.print "UPDATE VOITURE " & _
    "SET dateVente=#" & Date_vente & "# and DateCommande=#" & date_commande & "# and PxVenteRéel=" & Prix_vente & " and CodeClt=" & liste_clt.Column(0) & _
    "WHERE NumV=" & aff_vente.Column(0) & ";")
    Cela te permettra de voir exactement la requête que tu essaies d'éxécuter en ouvrant la fenêtre de debug (Ctrl G).

  8. #8
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Points : 238
    Points
    238
    Par défaut suite
    Salut,
    suite a tes conseils j'ai donc enlevé les instructions du genre: Or Date_vente = " " dans le premier If.

    Et affiché la fenetre debug.
    Dans celle-ci je vois que tous les codes sont bien récupérés mais l'erreur est toujours la je ne comprend vraiment pas le probleme.

    Ou sinon il y aurait l'alternative d'utiliser le RS.edit mais je ne voit pas comment selectionner un enregistrement en particulier avec cette structure.

    Voici le debug
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    UPDATE VOITURE SET dateVente=#20/04/06# and DateCommande=#25/04/06# and PxVenteRéel=19000 and CodeClt=5WHERE NumV=21;

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE VOITURE SET dateVente=#20/04/06# and DateCommande=#25/04/06# and PxVenteRéel=19000 and CodeClt=5_WHERE NumV=21;
    Il te manquais un espace entre le 5 et le where.

    Pour utiliser le rs.edit, il faut que tu ouvres un recordset avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT VOITURE.* FROM VOITURE WHERE NumV = " & aff_vente.Column(0) & ";"
    Tu permets la modification par
    Tu affectes les nouvelles valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rs!tonChamp = taVariable
    Et avant le changement de d'enregistrement tu valides tes modifications par

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Pour info, tu peux copier la requête que tu trouves dans la fenêtre de debug et la tester dans le QBE, cela permet souvent de trouver la petite erreur qui te prends la tête pendant un quart d'heure à l'oeil nu .
    Et je parle d'expérience

  11. #11
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Points : 238
    Points
    238
    Par défaut re
    Bon , bonne nouvelle il ne m'affiche plus de message d'erreur apres avoir rajouté un espace^^
    MAIS, il ne me met pas a jour ma base de donnée...
    le seul changement dans la table concernée c'est que dans la colonne DateVente il y a 00.00.00 au lieu de la date que j'ai rentrée ...


    Quelqu'un comprend le probleme la? ^^

    Et sinon question annexe, comment je peux faire pour attribuer le resultat d'une requete SQL a une variable?

    Dim var as string

    var= DB.execute(" .....")

    je pensais a ca mais ca ne marche pas on dirait.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Citation Envoyé par erox44
    MAIS, il ne me met pas a jour ma base de donnée...
    le seul changement dans la table concernée c'est que dans la colonne DateVente il y a 00.00.00 au lieu de la date que j'ai rentrée ...
    Donc ta table a bien été mise à jour à 0 (0 pour une date correspond au 30/12/1899 0:0:0). Logiquement tu as passé un 0 dans ta mise à jour.

    Citation Envoyé par erox44
    Et sinon question annexe, comment je peux faire pour attribuer le resultat d'une requete SQL a une variable?
    Le résultat d'une requête sql est un code d'éxécution, il faudrait que tu trouves tous les codes pour pouvoir les analyser, et là j'avoue mon incompétence.

  13. #13
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 500
    Points : 238
    Points
    238
    Par défaut .
    Bon etant donné que meme mon prof de VB ne voyait pas le probleme je suis passé sur le RS.edit et ca marche très bien .

    Merci a tous

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

Discussions similaires

  1. [AC-97] requete enregistré, SQL , VBA, critère
    Par JCC034 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/03/2010, 20h17
  2. [AC-2003] [SQL] [VBA] UPDATE nombre à virgule
    Par antoinev2 dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/11/2009, 21h51
  3. Réponses: 2
    Dernier message: 25/04/2007, 17h48
  4. [SQL SERV 2K] Problème d'update enregistrement dans procédure
    Par Tankian dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/06/2006, 09h42
  5. Une ch'tite bizarrerie dans les Updates de SQL Server
    Par Wakko2k dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 08/04/2004, 14h14

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