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: Probleme exécution requete Update


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut VBA: Probleme exécution requete Update
    Bonjour a tous,

    J'ai un formulaire sur lequel j'ai placé le code suivant:

    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
    23
    24
    25
    26
    27
    28
    29
    30
       Dim j As Integer
         j = Me.NumberOfCheques.Value
     
     
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("tbl_Cheques")
     
    With rst
    For i = 1 To j
        rst.Edit
     
         PrintDate.SetFocus
         PrintDate = Me.PrintDate.Value
     
         Dim SQL As String
         Dim Req As QueryDef
         SQL = " UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = [Forms]![frm_ChequesDelivered]![PrintDate]"
         SQL = SQL & " WHERE tbl_Cheques.ChequeSerialNumber=[Forms]![frm_ChequesDelivered]![Number1stCheque] + i - 1;"
     
         Set Req = CurrentDb.CreateQueryDef("", SQL)
         Req.Execute dbFailOnError
     
    Next i
    End With
     
    rst.Close
    Set rst = Nothing
    Set dbs = Nothing
    Mon but est d'écrire dans le champ PrintDate la date entrée dans le formulaire via la textbox PrintDate pour tous les enregistrements de la table Tbl_Cheques ou le numéro de série du cheque vaut du 1er numéro de série de cheque renseigné jusqu'au dernier. Tout ça via une boucle for.


    Le probleme est que j'obtiens un message d'erreur: trop peu de paramétres, 2 sont attendus.

    Je coince la-dessus depuis un moment mais je ne vois pas ou ca coince vu que ma requete SQL a été crée via Access

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    salut,
    ton i est écrit en dur dans ta requête...

    essaie avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL = " UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = [Forms]![frm_ChequesDelivered]![PrintDate]"
         SQL = SQL & " WHERE tbl_Cheques.ChequeSerialNumber=[Forms]![frm_ChequesDelivered]![Number1stCheque] + " & i  - 1 & ";"

  3. #3
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Merci beaucoup!

    mais j'obtiens le même message d'erreur...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    ok, autre méthode alors, sortir les paramètres liés aux formulaires du sql en dur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL = "UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = " & [Forms]![frm_ChequesDelivered]![PrintDate]
    SQL = SQL & " WHERE tbl_Cheques.ChequeSerialNumber=" & [Forms]![frm_ChequesDelivered]![Number1stCheque] + i  - 1 & ";"
    avec là encore une erreur potentielle : le format des champs (texte et/ou date notamment)

  5. #5
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Bingo!
    Sur la date il y a une erreur de format....

    Dans la table tbl_Cheques, PrintDate a pour format: Medium Date.
    Dans le formulaire, PrintDate a également pour format: Medium Date.

    Toutes les deux avec un masque 00\->L<LL\-00;0;_

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    une valeur de type date doit être indiquée entre #, exemple :
    #01/19/1984# pour le 19 janvier 1984
    ou
    #09/11/2001# pour le 11 septembre 2001

    à essayer dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = #" & [Forms]![frm_ChequesDelivered]![PrintDate] & "#"

  7. #7
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Toujours le m6eme message d'erreur...

    J'ai mis une msgbox pour voir la date.

    Pour le 4 septembre, ça m'affiche 9/4/2008 (Version anglaise d'Access).
    Alors que je rentre 4-Sep-08 pour avoir le même format que dans la table...

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    ok, rajoute un Format()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = #" & Format([Forms]![frm_ChequesDelivered]![PrintDate],"MM/dd/yyyy") & "#"

  9. #9
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    J'ai testé la ligne de code que tu m'as passé ainsi que la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SQL = "UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = #" & Format([Forms]![frm_ChequesDelivered]![PrintDate], "dd-mmm-yy") & "#"
    Mais rien n'y fait...

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    heureusement que j'ai mis la bonne syntaxe dans mon exemple hein
    en SQL les dates sont sensées apparaitre sous le format #MM/DD/YYYY#

  11. #11
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Non mais j'ai testé la ligne que tu m'as passé et ça n'a pas marché.

    Voila pourquoi j'ai aussi testé avec dd-mmm-yy

  12. #12
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 651
    Points : 34 360
    Points
    34 360
    Par défaut
    ok,
    que te donne le Debug.Print stp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL = "UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = #" & Format([Forms]![frm_ChequesDelivered]![PrintDate],"MM/dd/yyyy") & "#"
    Debug.print SQL

  13. #13
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Ca me donne ca dans la fenêtre de débogage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = #09/06/2008# WHERE tbl_Cheques.ChequeSerialNumber=800851;
    et j'ai toujours le message:

    Type de données incompatibles dans l'expression du critère

  14. #14
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Suite à ça j'ai testé la ligne de code suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL = "UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = #" & Format([Forms]![frm_ChequesDelivered]![PrintDate], "MM/dd/yyyy") & "#"
        SQL = SQL & " WHERE tbl_Cheques.ChequeSerialNumber=" & "'" & [Forms]![frm_ChequesDelivered]![Number1stCheque] + i - 1 & "'" & ";"
    et j'obtiens dans le debug:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = #09/06/2008# WHERE tbl_Cheques.ChequeSerialNumber='800851';
    + le message d'erreur suivant:
    Impossible de mettre à jour; actuellement verrouillé(e)

  15. #15
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonsoir,

    Là i s'agit d'un autre problème, quels sont tes droits sur la base...


  16. #16
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    J'ai tous les droits. Je comprends plus...

    Mais doit-on avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = #09/06/2008# WHERE tbl_Cheques.ChequeSerialNumber='800851';
    ou bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = #09/06/2008# WHERE tbl_Cheques.ChequeSerialNumber=800851;
    ?

    Car il me semble que c'est au niveau du critère que ça coince vu le type de données incompatibles.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Ce qui change entre les deux, c'est que ton champ ChequeSerialNumber est de type texte, c'est pour cela qu'il faut les '.

    Dans quel condition veux-tu mettre à jour ton enregistrement ? Est-ce qu'il y a déjà une action en cours sur celui-ci ?

    Starec

  18. #18
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Ok merci! Donc je dois laisser les '.

    En fait, par le code ci-dessous, je veux mettre a jour la date PrintDate de tous les enregistrements pour lesquels le ChequeSerialNumber va du 1er (renseigné via le formulaire) jusqu'au dernier grace a une incrémentation du numéro.



    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Private Sub cmd_SaveOrder_Click()
     
        ' ************************
         Dim j As Integer
         j = Me.NumberOfCheques.Value
     
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("tbl_Cheques")
     
    With rst
    For i = 1 To j
        rst.Edit
     
         PrintDate.SetFocus
     
         Dim SQL As String
         Dim Req As QueryDef
       SQL = "UPDATE tbl_Cheques SET tbl_Cheques.PrintDate = #" & Format([Forms]![frm_ChequesDelivered]![PrintDate], "MM/dd/yyyy") & "#"
        SQL = SQL & " WHERE tbl_Cheques.ChequeSerialNumber='" & [Forms]![frm_ChequesDelivered]![Number1stCheque] + i - 1 & "';"
        Debug.Print SQL
        Set Req = CurrentDb.CreateQueryDef("", SQL)
        Req.Execute dbFailOnError
     
    Next i
    End With
     
    rst.Close
    Set rst = Nothing
    Set dbs = Nothing
     
    End Sub
    J'obtiens la même erreur d'enregistrement verrouillé. La ligne suivante est surlignée en jaune dans le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Req.Execute dbFailOnError
    A ma connaissance, il n'y a aucune action en cours sur les enregistrements.
    Peut-etre est-ce la boucle for qui est mal écrite?

    Car j'arrive a écrire la date pour le 1er enregistrement avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("tbl_Cheques")
     
    With rst
        rst.Edit
        rst.Fields("PrintDate").Value = Me.PrintDate
        rst.Update
     End With
     
    rst.Close
    Set rst = Nothing
    Set dbs = Nothing
    La table n'est donc pas verrouillée...
    Et j'aimerais faire la même chose pour tous les enregistrements avec le bon critere.

  19. #19
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    Apres de muliples tests, je bloque toujours sur ce probleme.
    Quelqu'un pourrqit-il m'aider ou m'orienter?

    merci d'avance

  20. #20
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 193
    Points : 71
    Points
    71
    Par défaut
    A défaut d'arriver au bout de mon probleme avec cette méthode...
    y a-t-il d'autres méthodes pour manipuler du SQL ou des requetes via le VBA ?

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

Discussions similaires

  1. [AC-2007] Probleme de date en vba sur une requete update
    Par tyjez dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/05/2013, 07h58
  2. Probleme avec Requete Update
    Par Didier77 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 24/07/2006, 13h20
  3. [MySQL] Probleme avec requete UPDATE
    Par Chromatic dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 09/02/2006, 13h17
  4. Probleme avec requete UPDATE sur ACCESS
    Par Chromatic dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/01/2006, 10h03
  5. Probleme de requete UPDATE pour modifier de champs ds DBGRID
    Par cmoimeme dans le forum Bases de données
    Réponses: 26
    Dernier message: 06/12/2005, 12h56

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