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 :

Erreur lors d'une requête d'ajout


Sujet :

Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Erreur lors d'une requête d'ajout
    Lorsque je fais un calcul dans une requête et que je souhaite l'enregistrer dans la base (requête d'ajout) une erreur se produit lors de l'exécution.
    Message d'erreur :
    Microsoft Access a attribué la valeur Null à 0 champ à la suite d'une erreur de conversion de type, 0 enregistrement n'ont pas été ajoutés à la table à la suite de violations de clé, 0 enregistgrement à la suite de violation de verrou et 1 enregistrement à la suite de violation des règles de violation.

    J'espère que l'un d'entre vous à une solution miracle parce que là je suis désespérée!!!

    Merci d'avance...

  2. #2
    Membre confirmé Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Points : 579
    Points
    579
    Par défaut
    Violation des règle de violation ? Diantre...

    Essaie d'ajouter l'enreg à la main avant de le faire avec une rq insert. Cela te permettra d'affiner l'origine de l'erreur, qui semble être une mauvaise valeur au mauvais endroit.

    Yvan

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Ca marche que je le rentre à la main, l'erreur ne se produit que lors d'INSERT...

  4. #4
    Membre confirmé Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Points : 579
    Points
    579
    Par défaut
    Peux-tu donner le code de la rq ?
    Es-tu certaine que tu rentres les mêmes données à la main ?

    Yvan

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Code de ma requête :

    INSERT INTO fiam_vehicule ( coeff_bonus_malus )
    SELECT [fiam_vehicule]![coeff_bonus_malus]*0.95^[Expr1] AS Expr2
    FROM fiam_vehicule INNER JOIN (fiam_contrat INNER JOIN (([Rsupp3-Nombre d'années sans sinistre responsable] INNER JOIN fiam_assure ON [Rsupp3-Nombre d'années sans sinistre responsable].id_assure = fiam_assure.id_assure) INNER JOIN fiam_assure_contrat ON fiam_assure.id_assure = fiam_assure_contrat.assure_id_assure) ON fiam_contrat.id_contrat = fiam_assure_contrat.contrat_id_contrat) ON fiam_vehicule.id_vehicule = fiam_contrat.vehicule_id_vehicule
    WHERE ((([Rsupp3-Nombre d'années sans sinistre responsable].Expr1)>0));

    Dans cette requête, je fais un calcul à partir d'une autre requête, et je sauhaite stocker le résultat ds un champ qui n'est ni une clé ni utilisé ailleurs!

    Je suis en train de devenir folle!!!

  6. #6
    Membre confirmé Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Points : 579
    Points
    579
    Par défaut
    Et si tu colles la partie "SELECT" de ta rq dans une requête normale (une du requêteur), ca donne quoi ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 147
    Points : 172
    Points
    172
    Par défaut
    bonjour,
    Juste une précision :
    INSERT est une requette qui ajoute des enregistrements (lignes) dans ta table, si tu cherche à mettre à jour un champ d'un enregistrement existant utilise UPDATE.
    A+

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    C'est vrai qu'un UPDATE est mieux adapté ici! Mais qd j'essaie il me met encore une erreur :
    L'opération doit utiliser une requête qui peut être mis à jour.

    Ma requête:
    UPDATE fiam_vehicule
    SET coeff_bonus_malus=(
    SELECT [fiam_vehicule]![coeff_bonus_malus]*0.95^[Expr1] AS Expr2
    FROM fiam_vehicule INNER JOIN (fiam_contrat INNER JOIN (([Rsupp3-Nombre d'années sans sinistre responsable] INNER JOIN fiam_assure ON [Rsupp3-Nombre d'années sans sinistre responsable].id_assure = fiam_assure.id_assure) INNER JOIN fiam_assure_contrat ON fiam_assure.id_assure = fiam_assure_contrat.assure_id_assure) ON fiam_contrat.id_contrat = fiam_assure_contrat.contrat_id_contrat) ON fiam_vehicule.id_vehicule = fiam_contrat.vehicule_id_vehicule
    WHERE ((([Rsupp3-Nombre d'années sans sinistre responsable].Expr1)>0)));

    Je suis vraiment désolée, je suis un peu nulle! et je déteste access!!!

  9. #9
    Membre confirmé Avatar de ypicot
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 412
    Points : 579
    Points
    579
    Par défaut
    Je ne dirais qu'une chose : DECOMPOSE ET VERIFIE

    Ta rq est un vrai plat de spaggheti (ce n'est pas un reproche, c'est souvent ce qui arrive avec sql).

    Qu'est ce qui se passe si tu colles dans le requêteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [fiam_vehicule]![coeff_bonus_malus]*0.95^[Expr1] AS Expr2
    FROM fiam_vehicule INNER JOIN (fiam_contrat INNER JOIN (([Rsupp3-Nombre d'années sans sinistre responsable] INNER JOIN fiam_assure ON [Rsupp3-Nombre d'années sans sinistre responsable].id_assure = fiam_assure.id_assure) INNER JOIN fiam_assure_contrat ON fiam_assure.id_assure = fiam_assure_contrat.assure_id_assure) ON fiam_contrat.id_contrat = fiam_assure_contrat.contrat_id_contrat) ON fiam_vehicule.id_vehicule = fiam_contrat.vehicule_id_vehicule
    WHERE ((([Rsupp3-Nombre d'années sans sinistre responsable].Expr1)>0));
    Et accessoirement : tu n'aimes pas access ou le sql ?

    Yvan

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Oui, avec le SELECT, ça fonctionne mais dès que je veux faire un UPDATE, ça marche plus

    Et accessoirement, j'aime bien le SQL (tant que ça reste simple) et je confirme, je déteste access!!!

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    En fait, je crois que le pb vient du fait que j'utilise le résultat d'une autre requête qui utilise le résultat d'une autre requêtre... parce que qd je fais un calcul simple sans utliser d'autres requêtes la modification se fait correctement ds la table...
    Mais je n'arrive pas à réunir mes 3 requêtes en une... ça devient trop compliqué :

    Requête1:
    SELECT fiam_assure.id_assure, Max(fiam_sinistre.date_sinistre) AS MaxDedate_sinistre
    FROM fiam_contrat INNER JOIN ((fiam_assure INNER JOIN fiam_assure_contrat ON fiam_assure.id_assure = fiam_assure_contrat.assure_id_assure) INNER JOIN fiam_sinistre ON fiam_assure.id_assure = fiam_sinistre.assure_id_assure) ON fiam_contrat.id_contrat = fiam_assure_contrat.contrat_id_contrat
    GROUP BY fiam_assure.id_assure, fiam_sinistre.responsabilite, fiam_contrat.type
    HAVING (((fiam_sinistre.responsabilite)=True) AND ((fiam_contrat.type)="Véhicule"));

    Requête2:
    SELECT fiam_assure.id_assure, [Rsupp2-Date du dernier sinistre responsable (véhicule)].MaxDedate_sinistre, DateDiff("yyyy",[Rsupp2-Date du dernier sinistre responsable (véhicule)].[MaxDedate_sinistre],Date()) AS Expr1
    FROM [Rsupp2-Date du dernier sinistre responsable (véhicule)] INNER JOIN fiam_assure ON [Rsupp2-Date du dernier sinistre responsable (véhicule)].id_assure = fiam_assure.id_assure
    GROUP BY fiam_assure.id_assure, [Rsupp2-Date du dernier sinistre responsable (véhicule)].MaxDedate_sinistre;

    Requête 3 (celle que tu as déjà vu) :UPDATE fiam_vehicule SET coeff_bonus_malus=(SELECT [fiam_vehicule]![coeff_bonus_malus]*0.95^[Expr1] AS Expr2
    FROM fiam_vehicule INNER JOIN (fiam_contrat INNER JOIN (([Rsupp3-Nombre d'années sans sinistre responsable] INNER JOIN fiam_assure ON [Rsupp3-Nombre d'années sans sinistre responsable].id_assure = fiam_assure.id_assure) INNER JOIN fiam_assure_contrat ON fiam_assure.id_assure = fiam_assure_contrat.assure_id_assure) ON fiam_contrat.id_contrat = fiam_assure_contrat.contrat_id_contrat) ON fiam_vehicule.id_vehicule = fiam_contrat.vehicule_id_vehicule
    WHERE ((([Rsupp3-Nombre d'années sans sinistre responsable].Expr1)>0)));

    Au fait, merci de passer du temps sur mon pb...

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 147
    Points : 172
    Points
    172
    Par défaut
    Re,
    Si je comprends bien ton pb tu veux calculer et mettre à jour le coef de bonus/malus en calculant ds un premier temps de nb d'années sans sinistre.
    a ta place pour pallier au pb de calcul je ferais la chose suivante :
    1- Création d'une table temporaire dans laquelle je stocke d'Id assuré et le nb d'années sans sinistre.
    2- Mise à jour du coef à partir de cette table (les données sont stockées donc plus de requette imbriquées)
    3-Suppression de la table temporaire.

    Autre solution utiliser du VBA....
    A+

  13. #13
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    salut
    ce calcul ne peut se faire dans requete3 en l'etat actuel:
    fiam_vehicule]![coeff_bonus_malus]*0.95^[Expr1] AS Expr2

    parce que:
    1/Ajoute la table [Rsupp2-Date du dernier sinistre responsable (véhicule) à ta requete3
    2/et redefini ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDiff("yyyy",[Rsupp2-Date du dernier sinistre responsable (véhicule)].[MaxDedate_sinistre],Date()) AS Expr1
    @+

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci à tous! J'ai résolu mon pb en créant une table tampon... ça marche super bien maintenant!

    Merci encore

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

Discussions similaires

  1. [AC-2007] Erreur lors d'une requéte d'insertion précédé d'un if
    Par Max_Agaki dans le forum VBA Access
    Réponses: 3
    Dernier message: 30/01/2015, 11h08
  2. [AC-2003] Warning lors d'une requête d'ajout
    Par defigueiredoh dans le forum Access
    Réponses: 3
    Dernier message: 03/07/2012, 13h19
  3. [AC-2003] Erreur lors d'une requête d'insertion vba dans une table de liaison n:m
    Par Florent_45 dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/07/2011, 09h25
  4. Erreurs lors d'une requête SQL
    Par karinya dans le forum Bases de données
    Réponses: 5
    Dernier message: 10/11/2010, 12h27
  5. Attraper message d'erreur lors d'une requête d'ajout
    Par steps5ive dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/12/2006, 16h53

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