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 :

insert into sans les décimales pourquoi? [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    opérateur
    Inscrit en
    Août 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : opérateur

    Informations forums :
    Inscription : Août 2018
    Messages : 39
    Points : 19
    Points
    19
    Par défaut insert into sans les décimales pourquoi?
    Bonjour à tous,

    Je n'arrive pas à inserer la valeur "poids_ligne" de la table temp vers la table detail_commande avec les décimales.

    Par exemple, j'ai 1,426 colonne (poids_ligne) dans la table temp et la requête renvoie la valeur 1,000 dans la table detail_commande.

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Private Sub valider_facture_Click()
    Dim num_com As Long: Dim requete As String
    Dim ligne As Recordset: Dim base As Database
    Dim ref_produit As String: Dim qte_produit As Integer
    Dim poids_ligne As Integer
     
    If (n_client.Value <> "") Then
            Set base = Application.CurrentDb
     
            requete = "INSERT INTO Commandes (cli_com, montant_com,poids_total_commande,statut_com) VALUES ('" & n_client.Value & "','" & Int(total_commande.Value) & "'," & Int(poids_total.Value) & ",'" & statut_encours.Value & "')"
            base.Execute requete
    If (n_client.Value <> "") Then
            Set ligne = base.OpenRecordset("SELECT MAX(num_com) as dernier_num FROM Commandes", dbOpenDynaset)
     
            ligne.MoveFirst
            num_com = Int(ligne.Fields("dernier_num").Value)
            n_commande.Value = num_com
     
     
            Set ligne = base.OpenRecordset("SELECT * FROM Detail_temp", dbOpenDynaset)
     
            ligne.MoveFirst
            'PARCOURS DE TOUTES LES LIGNES DE LA COMMANDE EN COURS
            Do
     
            ref_produit = ligne.Fields("ref_det").Value
            qte_produit = ligne.Fields("qute_det").Value
            poids_ligne = ligne.Fields("poids_ligne").Value
     
     
     
            requete = "INSERT INTO Detail_commandes (com_det,ref_det,qute_det,Designation,n_cme,type_exp,n_ote,type_emballage,ville,code_postal,pays,date_exp,civilite,nom_client,adresse_client,poids_lignes) VALUES ('" & n_commande.Value & "','" & ref_produit & "','" & qte_produit & "','" & Designation.Value & "','" & n_cme.Value & "','" & mode_exp.Value & "','" & n_ote.Value & "','" & type_support.Value & "','" & ville.Value & "','" & code_postal.Value & "','" & pays.Value & "','" & date_exp.Value & "','" & civilite.Value & "','" & nom_client.Value & "','" & adresse_client.Value & "','" & poids_ligne & "')"
     
            base.Execute requete
     
     
     
            ligne.MoveNext
            Loop Until ligne.EOF
     
            ligne.Close
            base.Close
            Set ligne = Nothing
            Set base = Nothing
     
            purger_table
     
            DoCmd.OpenReport "Bon_préparation", acViewPreview
     
     
            Else
                    MsgBox "La commande ne contient aucun article", vbCritical, "ATTENTION"
     
            End If
            Else
     
            MsgBox "La commande ne contient aucun article", vbCritical, "ATTENTION"
    End If

    Merci pour votre aide

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Bonjour,

    Evitez de générer une requête par concaténation de valeurs.
    C'est source de nombreuses erreurs : conversion inutile ou erronées (ce qui se passe sans doute avec les décimales), problème si une valeur contient des apostrophes ou guillemets...
    Et c'est lourd à écrire et à lire.

    On peut passer par une requête temporaire paramétrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim qdf As DAO.QueryDef
    requete = "INSERT INTO Detail_commandes (com_det,ref_det,poids_lignes) VALUES ([param_com_det],[param_ref_det],[param_poids_lignes])"
    Set qdf = base.CreateQueryDef("", requete)
    qdf.Parameters("param_com_det").Value = n_commande.Value 
    qdf.Parameters("param_ref_det").Value = ref_produit
    qdf.Parameters("param_poids_lignes").Value = poids_ligne
    qdf.Execute
    Je n'ai mis que quelques colonnes pour montrer le principe.
    Entre crochets on défini les paramètres, sans les entourer de guillemets.
    Et ensuite on affecte les valeurs de paramètres avant d'exécuter la requête.
    La requête ainsi créée avec un nom vide est temporaire, elle n'est pas stockée.
    Ainsi on ne soucie plus du type des données, et l'écriture de la requête est plus lisible qu'une concaténation où on se perd dans les guillemets.

  3. #3
    Membre à l'essai
    Homme Profil pro
    opérateur
    Inscrit en
    Août 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : opérateur

    Informations forums :
    Inscription : Août 2018
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Merci pour ce retour, je vais tester

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 876
    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 876
    Points : 4 751
    Points
    4 751
    Par défaut
    Bonjour,

    Aussi, si tu veux des décimales, il faut typer le paramètre en conséquence
    Dim poids_ligne As Integer ...
    donc pas de decimales !


    Améliore tes déclarations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim num_com As Long, requete As String
    Dim ligne As DAO.Recordset, base As DAO.Database ...

    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set ligne = base.OpenRecordset("SELECT MAX(num_com) as dernier_num FROM Commandes", dbOpenDynaset)
    ligne.MoveFirst
    num_com = Int(ligne.Fields("dernier_num").Value)
    n_commande.Value = num_com
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n_commande = dmax("num_com","Commandes")
    CDLT
    "Always look at the bright side of life." Monty Python.

  5. #5
    Membre à l'essai
    Homme Profil pro
    opérateur
    Inscrit en
    Août 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : opérateur

    Informations forums :
    Inscription : Août 2018
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Bonjour a tous,

    Tous mes voeux pour cette nouvelle année.

    Je tenais à vous remercier pour votre aide cela fonctionne nickel

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 876
    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 876
    Points : 4 751
    Points
    4 751
    Par défaut
    Merci de ton retour.
    Dans ce cas, pourrais-tu passer ce fil en Résolu.

    CDLT
    "Always look at the bright side of life." Monty Python.

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

Discussions similaires

  1. [AC-2010] Insert into sans doublon
    Par BenoitMaillot dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/12/2012, 22h40
  2. [AC-2003] INSERT INTO sans doubles
    Par fanchon dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 29/04/2011, 12h29
  3. Requête insert into et les clés étrangères
    Par tix116 dans le forum Développement
    Réponses: 17
    Dernier message: 21/03/2011, 10h56
  4. Insert into table1 les champs de la table 2
    Par slyckers dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/11/2009, 13h28
  5. probléme avec insert into et les jontures
    Par belakhdarbts10 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/05/2007, 11h35

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