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

VBA Access Discussion :

Problème lors d'un transfert d'enregistrement entre deux tables [AC-2003]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 28
    Points
    28
    Par défaut Problème lors d'un transfert d'enregistrement entre deux tables
    Bonjour,

    Je ne comprend pas pourquoi cela ne fonctionne pas. C'est peut-être tout bête, je ne suis pas très expérimenté .. .

    Voici mon 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub Transferer()
    Dim db As DAO.Database
    Dim rs1 As DAO.Recordset
    Dim rs2 As DAO.Recordset
    Dim strSQL As String
     
    Set db = CurrentDb
    Set rs1 = db.OpenRecordset("SELECT * FROM Dossiers clos")
     
    Do Until rs1.EOF
     
    strSQL = "SELECT * FROM Dossiers WHERE "
    strSQL = strSQL & "[ID Dossier] = " & rs1("[ID Dossier]")
     
    Set rs2 = db.OpenRecordset(strSQL)
     
    If rs2.RecordCount > 0 Then
     
      rs1.Edit 'Modifier
     
      If rs1("QuantiteStockee") - rs2("QuantiteTransferer") < 1 Then
      rs1.Delete
     
      Else
     
      rs1("QuantiteStockee") = rs1("QuantiteStockee") - rs2("QuantiteTransferer")
      rs1.Update          'Mettre a jour
      rs1.MoveNext
     
    End If
     
    Loop
    Et le message d'erreur qui va avec :

    Merci d'avance
    rberniga

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    Il te manque un End If

    Indente systématiquement ton code, et tu repéreras plus facilement ce genre d'erreurs.

    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
    Do Until rs1.EOF
     
      strSQL = "SELECT * FROM Dossiers WHERE "
      strSQL = strSQL & "[ID Dossier] = " & rs1("[ID Dossier]")
     
      Set rs2 = db.OpenRecordset(strSQL)
     
      If rs2.RecordCount > 0 Then
     
        rs1.Edit 'Modifier
     
        If rs1("QuantiteStockee") - rs2("QuantiteTransferer") < 1 Then
          rs1.Delete
     
        Else
     
          rs1("QuantiteStockee") = rs1("QuantiteStockee") - rs2("QuantiteTransferer")
          rs1.Update          'Mettre a jour
          rs1.MoveNext
        End if
      End If
     
    Loop
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 28
    Points
    28
    Par défaut
    Ah oui effectivement merci !!

    En revanche çà ne marche toujours pas ..
    Voilà les copies d'écran : (2 secondes)

    Est-ce que tu aurais une idée stp ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 28
    Points
    28
    Par défaut
    Désolé, voilà les copies d'écran :

  5. #5
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    La réponse est dans ton message d'erreur ... un de tes champs n'existe pas dans ta table Dossiers... peut être une faute de frappe... un accent qui manque ou qq chose du genre ....

    peut être QuantiteTransferee , non ?
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 28
    Points
    28
    Par défaut
    Je vais passer pour un imbécile mais c'est pas grave, j'assume.

    C'est une procédure que j'ai trouvé sur le net et effectivement je n'ai ni de champ QuantiteStockee, ni de champ QuantiteTransferer ...

    Alors je vais être plus clair : Je souhaite transférer un enregistrement de la table [Dossiers] à la table [Dossiers clos] lors de l'appui sur un bouton. Et ce en le supprimant de la première table.

    Pourrais-tu m'aider stp ? Peut-être il me suffit simplement d'adapter cette procédure mais je ne pense pas que je doive créer des champs supplémentaires si ?

    Merci d'avance
    rberniga

  7. #7
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Hummm.... dans ce cas, il faudrait peut être éviter de prendre tel quel le premier code trouvé sans le comprendre

    Le code que tu as trouvé ne fait pas ce que tu souhaites...

    Si je comprends ton besoin, il te faudra passer par une requête Ajout , puis une requête suppression.


    Pour plus de détails, je t'invite à étudier les nombreuses ressources de Developpez à ta dispo.

    Parmi elles:
    http://access.developpez.com/sql/#L2.2.3

    http://access.developpez.com/faq/?page=SQL#qryActions
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 28
    Points
    28
    Par défaut
    Oui effectivement c'était pas très malin. Bon alors çà y est je suis sérieux

    En passant par les requêtes d'ajout et de suppression je suis arrivé à cela.
    J'ai deux tables à archiver qui sont liées par le numéro de dossier au départ : Dossiers.[ID Dossier]=Procédures.[Dossier].
    Voici le code que j'ai créé :

    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
     
    Private Sub Transferer()
        Dim str As String
        Dim str2 As String
        Dim str3 As String
        Dim str4 As String
        Dim req As QueryDef
        Dim req2 As QueryDef
        Dim req3 As QueryDef
        Dim req4 As QueryDef
        str = "INSERT INTO [Dossiers clos] SELECT * FROM [Dossiers] WHERE Dossiers.[ID Dossier]=[ID Dossier];"
        str2 = "INSERT INTO [Procédures dossiers clos] SELECT * FROM [Procédures] WHERE Procédures.[Dossier]=[ID Dossier];"
        str3 = "DELETE * FROM [Dossiers].* WHERE Dossiers.[ID Dossier]=[ID Dossier];"
        str4 = "DELETE * FROM [Procédures].* WHERE Procédures.[Dossier]=[ID Dossier];"
        Set req = CurrentDb.CreateQueryDef("", str)
        req.Execute dbFailOnError
        Set req2 = CurrentDb.CreateQueryDef("", str)
        req2.Execute dbFailOnError
        Set req3 = CurrentDb.CreateQueryDef("", str)
        req3.Execute dbFailOnError
        Set req4 = CurrentDb.CreateQueryDef("", str)
        req4.Execute dbFailOnError
    End Sub
    Mais celui-ci n'est pas au point semble-t-il...
    req :
    Déjà lorsque j'appelle la procédure, elle me copie tous les enregistrements de la table [Dossiers] vers [Dossiers clos] alors que je ne souhaite déplacer que celui qui correspond au numéro présent alors dans le champ [ID Dossier] du formulaire.
    req2 :
    Aucune action effectuée et message d'erreur que je joins (Erreur4). J'ai essayé de modifier les règles d'intégrité dans ma table [Procédures] mais rien n'y fait.
    req3 :
    Même message.
    req4 (seule):
    Deuxieme message d'erreur joint (Erreur5) . ??

    Peux-tu m'aider stp ? merci
    rberniga

  9. #9
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Je n'ai pas lu dans le détail (pas bcp de temps) mais je crois repérer qu'il te faut revoir tes codes SQL comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        str = "INSERT INTO [Dossiers clos] SELECT * FROM [Dossiers] WHERE Dossiers.[ID Dossier]=" & Me![ID Dossier]
        str2 = "INSERT INTO [Procédures dossiers clos] SELECT * FROM [Procédures] WHERE Procédures.[Dossier]=" & Me![ID Dossier]
        str3 = "DELETE * FROM [Dossiers].* WHERE Dossiers.[ID Dossier]=" & Me![ID Dossier]
        str4 = "DELETE * FROM [Procédures].* WHERE Procédures.[Dossier]=" & Me![ID Dossier]
    Le programme interprétera alors la valeur de Me![ID Dossier] (correspondant au champ de ton formulaire) avant de créer l'instruction str...

    Cela suppose que ton ID Dossier soit de type numérique. Si c'est un texte, il faut ajouter des ' ou de "....
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  10. #10
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    au fait, pourquoi créer des requêtes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set req = CurrentDb.CreateQueryDef("", str)
        req.Execute dbFailOnError
    Tu peux exécuter directement l'instruction SQL
    DIm db as database

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set db = currentdb
     
    db.Execute str, dbFailOnError
    db.Execute str2, dbFailOnError
    ...
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 28
    Points
    28
    Par défaut
    Réponse d'access sous forme de message d'erreur localisée sur "db.Execute str2, dbFailOnError":

    "
    Erreur d'éxécution '3061':
    Trop peu de paramètres.1 attendu.
    "

    Code du moment :
    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
     
    Private Sub Transferer()
        Dim str As String
        Dim str2 As String
        Dim str3 As String
        Dim str4 As String
        Dim db As Database
        str = "INSERT INTO [Dossiers clos] SELECT * FROM [Dossiers] WHERE Dossiers.[ID Dossier]=[ID Dossier];"
        str2 = "INSERT INTO [Procédures dossiers clos] SELECT * FROM [Procédures] WHERE Procédures.[Dossier]=[ID Dossier];"
        str3 = "DELETE * FROM [Dossiers].* WHERE Dossiers.[ID Dossier]=[ID Dossier];"
        str4 = "DELETE * FROM [Procédures].* WHERE Procédures.[Dossier]=[ID Dossier];"
        Set db = CurrentDb
        db.Execute str, dbFailOnError
        db.Execute str2, dbFailOnError
        db.Execute str3, dbFailOnError
        db.Execute str4, dbFailOnError
    End Sub

  12. #12
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 28
    Points
    28
    Par défaut
    Et toujours la même chose, çà a basculé tous mes enregistrements de [Dossiers] sans les effacer de cette table.
    Par contre rien n'a bougé pour les [Procédures]..

    Merci encore

  13. #13
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 28
    Points
    28
    Par défaut
    Ola attends j'avais loupé ton premier post .. Je modifie tout çà ..

  14. #14
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 28
    Points
    28
    Par défaut
    Bon alors cette fois-ci nouvelle erreur et nouveau 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
     
    Private Sub Transferer()
        Dim str As String
        Dim str2 As String
        Dim str3 As String
        Dim str4 As String
        Dim db As Database
        str = "INSERT INTO [Dossiers clos] SELECT * FROM [Dossiers] WHERE Dossiers.[ID Dossier]=" & Me![ID Dossier]
        str2 = "INSERT INTO [Procédures dossiers clos] SELECT * FROM [Procédures] WHERE Procédures.[Dossier]=" & Me![ID Dossier]
        str3 = "DELETE * FROM [Dossiers].* WHERE Dossiers.[ID Dossier]=" & Me![ID Dossier]
        str4 = "DELETE * FROM [Procédures].* WHERE Procédures.[Dossier]=" & Me![ID Dossier]
        Set db = CurrentDb
        db.Execute str, dbFailOnError
        db.Execute str2, dbFailOnError
        db.Execute str3, dbFailOnError
        db.Execute str4, dbFailOnError
    End Sub
    Ligne erreur repérée sur : db.Execute str3, dbFailOnError

    Fenêtre erreur jointe.

    En revanche PROGRES notable : ce sont seulement les enregistrements souhaités qui sont déplacés dans les 2 bases archives et ce même pour les procédures.
    La seule chose qui ne fonctionne pas, c'est la suppression dans la première base.

    T'inquiètes pas, réponds quand tu as le temps mais je compte sur toi parce que là on s'en rapproche cette fois-ci.
    Merci

    rberniga

  15. #15
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 28
    Points
    28
    Par défaut
    Oups erreur de frappe .. ce sont les deux suppressions qui ne fonctionnent pas dans [Dossiers] et dans [Procédures].

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 179
    Points
    179
    Par défaut
    Salut !
    Ton message d'erreur signifie que ton where n'est pas fini, donc je suppose que c'est Me![ID Dossier] qui fait planter...
    Essayes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    msgbox (Me![ID Dossier])
    str3 = "DELETE FROM Dossiers WHERE Dossiers.[ID Dossier]=" & Me![ID Dossier]
    str4 = "DELETE FROM Procédures WHERE Procédures.[Dossier]=" & Me![ID Dossier]
    Cela te marque quoi ?

  17. #17
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 28
    Points
    28
    Par défaut
    Salut silverfly,

    Ben çà me marque le bon numéro d'identifiant de dossier.
    Et seulement le numéro.

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 179
    Points
    179
    Par défaut
    ok, donc le problème ne vient pas de là.
    Tu as testé les deux requêtes?

  19. #19
    Nouveau membre du Club
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 28
    Points
    28
    Par défaut
    Ouai et chacune d'elle donne le même message d'erreur et n'a aucun impact sur le ou les enregistrements concerné(s).

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 126
    Points : 179
    Points
    179
    Par défaut
    et un msgbox (str3) avant l'execution de la requete

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Transfert de données entre deux tables différentes
    Par settoken dans le forum Requêtes
    Réponses: 6
    Dernier message: 04/09/2009, 03h37
  2. Réponses: 5
    Dernier message: 14/08/2008, 10h13
  3. AdoQuery:Transfert d'enregistrements entre deux bases access
    Par jnc dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/01/2006, 13h39
  4. Réponses: 1
    Dernier message: 27/01/2006, 14h06
  5. transfert de données entre deux tables
    Par student007 dans le forum Access
    Réponses: 4
    Dernier message: 23/12/2005, 13h04

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