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 :

INSERT INTO et conversion de type [AC-2016]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Coordinateur méthode
    Inscrit en
    Décembre 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Coordinateur méthode

    Informations forums :
    Inscription : Décembre 2016
    Messages : 38
    Points : 29
    Points
    29
    Par défaut INSERT INTO et conversion de type
    Bonjour à tous,

    Je débute en ACCESS et il faut dire que je rame sévère avec VBA et les requêtes SQL.

    J'ai une table t_devis avec les champs suivants :
    id devis : numéro auto
    no_devis : numérique entier long
    ref_id_client : numérique entier long
    date_devis : date/heure date allégé ex 21.02.2018

    J'essaie d'ajouter une ligne avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.RunSQL "INSERT INTO t_devis(no_devis,ref_id_client,date_devis)" & _
    " VALUES (20180215135432,1,21.08.2108);"
    Mais je me retrouve avec un message d'erreur de conversion de type

    J'ai essayé plusieurs versions mais je ne vois pas comment faire juste et malgré de multiples recherches sur le net, je ne trouve pas comment faire passer cette instruction...

    Et d'ailleurs si vous avez un bon site qui explique les bases de VBA qui gère SQL dans Access c'est volontiers.

    Je vous remercie pour votre réponse

  2. #2
    Membre du Club Avatar de Ben404
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2018
    Messages : 33
    Points : 45
    Points
    45
    Par défaut
    Bonjour, si tu veux être moins perdu, au lieu d'apprendre deux langage en même temps (VBA + SQL) je te conseil de en premier temps te pencher sur le SQL et ensuite de partir sur le VBA. Parce que si tes connaissances sont de 0 dans les deux langage tu va ramer ^^

    En plus tu t'attaque directement aux dates ça va être tendu ^^
    Les dates sont a déclarer en format bien spécifique et tous mes meme partout.

    [EDIT] quelqu’un a répondu mieux que moi :3
    Dans ton code tu fais des erreurs de concaténation je pense que ça devrait plutôt donné un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "INSERT INTO t_devis(no_devis,ref_id_client,date_devis) VALUES (' & 20180215135432 & ',' & 1 & ',& #21.08.2108# &)"


    Les balises # sont les balises utiliser pour la date dans SQL mais je te dit les dates dans les BDD c'est le pire ^^'
    Ah si pense a bien retirer le point virgule a la fin de l'instruction SQL quand tu le met dans le VBA il aime pas trop.
    [/EDIT]

  3. #3
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonjour,
    1) il y a dépassement de capacité pour le N° de devis, il faut revoir la composition de ce champ car un entier long a comme plage de valeurs: -2 147 483 648 à +2 147 483 647 soit 10 chiffres et ton n° devis en contient 14: 20 180 215 135 432.
    2) pour la date, tu utilises le séparateur de décimales de VBA: le point. Essaie de mettre ta date entre quotes et de remplacer les points par des slashs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "INSERT INTO t_devis(no_devis,ref_id_client,date_devis) VALUES(1234567890,1,'21/08/2108');"
    pense a bien retirer le point virgule a la fin de l'instruction SQL quand tu le met dans le VBA il aime pas trop.
    à Ben404 : je ne pense pas que cette affirmation soit vraie, tu peux le mettre ou pas, Access la rajoutera au moment de l'exécution si elle est manquante.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Coordinateur méthode
    Inscrit en
    Décembre 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Coordinateur méthode

    Informations forums :
    Inscription : Décembre 2016
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    Merci pour votre aide.

    J'ai essayé vos versions mais cela ne fonctionne pas.

    J'ai même simplifié par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DoCmd.RunSQL "INSERT INTO t_devis(no_devis) VALUES(1234567890);"
    mais je me retrouve toujours avec ce message d'erreur

    Nom : Microsoft Access.jpg
Affichages : 295
Taille : 100,5 Ko

    Ci-dessous ma table
    Nom : Microsoft Access.jpg
Affichages : 292
Taille : 162,1 Ko

    Quelle est donc mon erreur?

    Merci d'avance

    P.S. je pratique le VBA dans excel et le SQL avec PHP mais sous ACCESS j'ai l'impression que tout est plus compliqué pour faire une simple chose

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonjour,
    Je débute en ACCESS et il faut dire que je rame sévère avec VBA et les requêtes SQL.
    P.S. je pratique le VBA dans excel et le SQL avec PHP mais sous ACCESS j'ai l'impression que tout est plus compliqué pour faire une simple chose
    Si tu débutes, c'est normal que cela semble compliqué.
    Le message indique un violation de clé : est ce que le champ no_devis est indexé sans doublons ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  6. #6
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    Bonjour,


    Vérifier aussi que ref_id_client en tant que clé étrangère soit présente si celle-ci a été définie dans les relations.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "INSERT INTO t_devis(no_devis,ref_id_client) VALUES (20180215135432,1)"

    Cldt
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  7. #7
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    autre chose : si tu veux garder les 14 chiffres du champ no_devis, utilises le type Texte plutôt que Entier Long.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Coordinateur méthode
    Inscrit en
    Décembre 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Coordinateur méthode

    Informations forums :
    Inscription : Décembre 2016
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Merci Jimbolion c'était bien à cause de la relation que ça ne fonctionnait pas...

    Et merci également à tous les autres pour votre aide.

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

Discussions similaires

  1. Conversion de types pour "insert into"
    Par forumcpp_nono dans le forum JDBC
    Réponses: 0
    Dernier message: 03/09/2009, 09h40
  2. INSERT INTO et le formulaire type="file"
    Par abdellah63 dans le forum Langage
    Réponses: 9
    Dernier message: 15/06/2008, 17h47
  3. Insert into dans un champ de type "timestamp"
    Par sylvette dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/10/2007, 17h35
  4. la commande insert into et le type serial
    Par nael_n dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 28/08/2006, 11h16
  5. Réponses: 5
    Dernier message: 23/06/2006, 15h04

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