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 :

Access 2003 - formulaires et INSERT INTO


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut Access 2003 - formulaires et INSERT INTO
    Bonjour à tous,

    J'aimerais pouvoir encoder des données dans différentes tables à l'aide d'un unique formulaire. Mon formulaire est actuellement assez basique:

    - Un en-tête de formulaire affichant le titre et les explications

    - Une série d'onglets (Données, Incorporation...)

    Sous chaque onglet, on retrouve une série de zones de texte indépendantes

    Exemples de zones de texte indépendantes de l'onglet "données":
    Prénom:
    NOM:

    Exemple de zone de texte indépendante de l'onglet "incorporation":
    Entité:

    - Un pied de formulaire affichant un bouton.

    Le bouton active une macro, elle-même activant une fonction.

    C'est à ce stade que je rencontre des problèmes (et c'est malheureusement le stade le plus important).

    La fonction que je tente de rédiger devrait idéalement envoyer les données dans différentes tables. J'ai cru comprendre que la fonction INSERT INTO / SELECT / FROM devrait me permettre ça... mais Access semble ne pas être d'accord.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Function Enregistrer_Données_Nouvel_Agent()
    INSERT INTO TABLETEST1 (NOMTEST, PRENOMTEST)
    SELECT FORMULAIRETEST, (Nom:), (Prénom:)
    FROM FORMULAIRETEST
     
    INSERT INTO TABLETEST2, (ENTITETEST)
    SELECT FORMULAIRETEST, (Entité:)
    FROM FORMULAIRETEST
     
    End Function
    Les sites que je consulte indiquent parfois des parenthèses, parfois des crochets et je finis par ne plus savoir que mettre autour des champs que j'essaye de référencer.

    Access semble considérer que, dans mon exemple, l'instruction INSERT INTO TABLETEST1 est incomplète...; il dit la même chose pour mon SELECT.

    Voici dès lors, pour une âme charitable qui voudra bien m'éclairer pendant que je continue à chercher le pourquoi du comment, la liste de mes questions:

    1) Pourrai-je effectivement copier des données écrites dans les champs de mon formulaire vers des tables de ma BDD?
    2) Pourquoi mes instructions INSERT INTO et SELECT sont-elles incomplètes?
    3) Ma manière de référencer les champs sources et cibles est-elle correcte? Si non, pourquoi (parenthèses? crochets? dénomination?)
    4) Suis-je passé à côté d'une manière bien plus simple de procéder?

    Et la question bonus, vers laquelle je pensais ne me tourner qu'après avoir réglé le reste:

    5) Si dans TABLETEST1, j'ai un NuméroAuto servant de clé primaire... Comment faire pour que les enregistrements de mon formulaire reprennent, dans TABLETEST2, ce même numéro dans le champ ID (qui est, dans les tables secondaires, numérique)

    D'avance, je vous remercie pour votre aide précieuse :-) En attendant, je continue bien entendu mes recherches... dès lors, même un simple lien vers une explication dont vous êtes sûrs du contenu me sera utile!

  2. #2
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Vous ne pouvez pas procéder ainsi. La clause FROM définie la table Source de la requête. Il ne s'agit pas d'un formulaire.

    Utilisez la syntaxe INSERT... INTO... VALUES en spécifiant la liste des contrôles concernés dans la partie VALUES

  3. #3
    Membre averti
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut
    Ah! Réponse claire :-) Je teste de suite, merci!

  4. #4
    Membre averti
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut
    Je ne dois pas l'utiliser comme il faut, j'ai toujours "erreur de syntaxe" ou "attendu: fin d'instruction" au niveau d'INSERT INTO...

    Pour récapituler, est-ce que, dans mon code, je dois bien mettre:


  5. #5
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Vous ne pouvez pas utiliser du SQL directement dans le VBA. Vous devez spécifier la chaine SQL à une méthode VBA capable de la transmettre au moteur de base de données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Function NOMDELAFONCTION
     
    Currentdb.Execute "INSERT INTO table values (""valeur 1"", ""valeur 2"")",dbFailOnError
     
    End Function

  6. #6
    Membre averti
    Inscrit en
    Novembre 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2013
    Messages : 18
    Par défaut
    D'acc, je pense avoir compris. Maintenant, le code est accepté par l'éditeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function Enregistrer_Données_Nouvel_Agent()
    Dim As String
     
    CurrentDb.Execute "INSERT INTO [X_TABLETEST1].(Prénom:, Nom:) values (Forms!frmX_FORMUTEST!txtPrénom:, Forms!frmX_FORMUTEST!txtNom:)", dbFailOnError
     
    End Function
    Je ne peux cependant pas vérifier son fonctionnement car Access affiche "L'objet ne contient pas d'objet d'automatisation 'Enregistrer_Données_Nouvel_Agent'." lorsque j'active mon bouton-macro en bas du formulaire. Ce bouton est juste lié à une macro d'Access qui a pour seule action "ExécuterCode" et est liée au code listé ci-dessus...

    Je débute, je débute... mais ça commence à rentrer! :-)

    Edit: code en révision, j'essaye de faire référence au formulaire et à ses textbox à l'aide de "Me".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function Enregistrer_Données_Nouvel_Agent()
    Dim As String
     
    CurrentDb.Execute "INSERT INTO [X_TABLETEST1].([Prénom:], [Nom:]) values (Me.textbox1, Me.textbox2)", dbFailOnError
     
    End Function
    Pas plus de succès avec ça...

Discussions similaires

  1. [ACCESS] Bouton Requete SQL INSERT INTO
    Par harry le ravi dans le forum VBA Access
    Réponses: 8
    Dernier message: 28/06/2008, 23h33
  2. [access 2003][sql] utilisation "INSERT INTO "
    Par Milyshyn76 dans le forum VBA Access
    Réponses: 9
    Dernier message: 27/03/2008, 15h15
  3. Réponses: 3
    Dernier message: 31/08/2007, 11h54
  4. Réponses: 1
    Dernier message: 29/05/2007, 18h51
  5. [MySQL / Access] : incompatibilité sur un INSERT INTO ...
    Par guidav dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/04/2006, 17h15

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