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

Access Discussion :

Débogage "Champs introuvable" ....


Sujet :

Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut Débogage "Champs introuvable" ....
    Bonjour, je recontre un problème "bizare" et aléatoire sur mon appli que je n'arrive pas à déboger...
    En effet, j'ai un bouton (sub evénementielle) qui insère des données d'une table 1 à une table 2, et ensuite supprime les données de la table 1.

    Pour ce faire, j'utilise le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    db.execute "INSERT INTO Table2 SELECT * FROM Table1"
    Je teste 1 fois cette sub Ev. elle marche, je teste une 2 eme fois, elle marche et parfois à la 3 eme (voir 4eme, c'est aléatoire), je tombe sur l'erreur bizare "Champs introuvable".

    Je me dis que l'insert ne fonctionne plus(il a fonctionné pour le 1er et 2eme test) alors je décortique (en mode débugage) un peu pour voir ce qui se passe. et ajoute le code suivant sur la ligne du dessus en faisant descendre celle-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set rs = db.openrecordset (SELECT * FROM Table1)
    Et la je me rends compte que c'est en fait sur le select qu'il se crach! "Champs introuvable"!
    Comment ne peut-il pas trouver un champs lorsqu'on fait un select * !

    A quoi pourrait être du cette erreur ? J'ai comme l'impression qu'il n'arrive pas à accéder à la Table 1 ?? J'espère que vous avez des pistes car la je suis bloqué et n'arrive pas à déboger...

    Merci pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 342
    Points : 19 581
    Points
    19 581
    Billets dans le blog
    65
    Par défaut
    Salut,

    et ensuite pour supprimer les données de la table1, je suppose que tu fais 1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    db.Execute "DELETE FROM Table1"
    @+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Salut,

    non même pas, j'utilise un recordset pour delete l'enregistrement de la table 1. Mais pourquoi cette question puisque je plante avant la suppression des données de la table 1 ?

    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 342
    Points : 19 581
    Points
    19 581
    Billets dans le blog
    65
    Par défaut
    set rs = db.openrecordset (SELECT * FROM Table1)
    Et sans les guillemets c'est normal ?

    et je suppose que tes table1 et table2 sont identiques (champs identiques)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Désolé je met le code complet de la fonction:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Private Sub cmdSoumettre_Click()
    Dim db As DAO.Database
    Dim sRapport As String
    Set db = CurrentDb
     
        Me.Form.Recalc
        sRapport = fnControleSaisie
     
        'Controle saisie, SI OK écrire dans les tables controle
        If sRapport = "" Then
            If MsgBox("Etes-vous sûr de vouloir soumettre le rapprochement saisie ? Une fois soumis vous n'aurez plus accès au rapprochement", vbYesNo, "Soumettre le rapprochement") = vbYes Then
                'Insérer dans les tables controles
                'Insérer dans RAP ENTETE controle
                db.Execute "INSERT INTO [Rap - Entete Controle] SELECT * FROM [Rap - Entete] WHERE ref_numero= " & ref_number.Value & " and ref_nom='" & ref_name.Value & " ';"         'PLANTE
                'Insérer dans Rap - Ligne Comptable Controle
                db.Execute "INSERT INTO [Rap - Ligne Comptable Controle] SELECT * FROM [Rap - Ligne Comptable] WHERE ref_numero= " & ref_number.Value & " and ref_nom='" & ref_name.Value & "';"
                'Insérer dans Rap - Transaction Controle
                db.Execute "INSERT INTO [Rap - Transaction Controle] SELECT * FROM [Rap - Transaction] WHERE ref_numero= " & ref_number.Value & " and ref_nom='" & ref_name.Value & "';"
     
     
                'Supprimer l 'enregistrement des tables locales
                On Error GoTo Err_Suppression
                    'Suppression de l'enregistrement de RAP ENTETE (la suppression des enregistrements connexe est automatique).
                    Me.Recordset.Delete
     
     
                    Me.Recordset.Requery
     
                    'Création nouveau rapprochement
                    fnNewRecord
            End If
        Else
            MsgBox sRapport, vbCritical, "Rapport Contrôle"
        End If
     
        db.Close
        Set db = Nothing
     
        'Quitte
        Exit Sub
     
    Err_Suppression:
                MsgBox Err.Description
    Sinon les chamsp de la table 1 sont identiques avace ceux de la table 2 , sauf que dans la table deux on a 3 champs en plus qui ne sont pas alimenté dans cette procédure (c'est fait à un autre moment)

    Je rappelle juste que ce code fonctionne, mais parfois il beug la ou j'ai mis PLANTE....

    Merci pour ton aide

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 898
    Points : 4 787
    Points
    4 787
    Par défaut
    Une piste typique :
    n'aurais tu pas tout simplement une clé primaire (comme ref_number) dans ta table1[rap ...] auquel cas quand tu tu insères la 2 éme fois tu tombes sur un pb d'unicité ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par micniv
    Une piste typique :
    n'aurais tu pas tout simplement une clé primaire (comme ref_number) dans ta table1[rap ...] auquel cas quand tu tu insères la 2 éme fois tu tombes sur un pb d'unicité ?
    Non, le problème ne vient pas de l'INSERT, le plantage intervient sur le SELECT. J'ai remarqué cela car en mode débogage, j'ai remplacé la ligne qui plante par une simple ouverture d'un recordset avec le SELECT *, et j'ai eu le même message, Champs introuvable.
    Donc, j'en ai conclu que cela provenait du SELECT. Comme si la table était inaccessible ou j'en sais rien ....
    Merci

  8. #8
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Essaie le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    db.Execute "INSERT INTO [Rap - Entete Controle] SELECT "& [Rap - Entete]  &".* FROM [Rap - Entete] WHERE ref_numero= " & ref_number.Value & " and ref_nom='" & ref_name.Value & " ';"         'PLANTE
    il te faut peut être mettre table1.* et non * tout seul

    A+

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Merci à toi, pour le moment ça ne plante plus

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

Discussions similaires

  1. Champ introuvable dans un état
    Par CAMIC dans le forum IHM
    Réponses: 3
    Dernier message: 05/09/2006, 10h22

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