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 :

Vérifier le nom saisi s'il est pas déjà le nom d'un champ d'une table [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 80
    Points : 63
    Points
    63
    Par défaut Vérifier le nom saisi s'il est pas déjà le nom d'un champ d'une table
    Bonjour tout le monde.
    J'ai un petit problème :

    En effet, je demande à l'utilisateur via un inputbox de rentrer un nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Denom= InputBox("saisir le nom ")
    J'aimerai comparer ce nom avec les intitulés des champs d'une table pour voir s'il existe. (Mon but est de créer des champs dans la table table1 à l'aide d'autres fonctions).
    Donc, je veux vérifier l'existence de ce nom : s'il existe, j'effacerai la colonne qui est déjà dans la table pour la remplacer par la nouvelle colonne et ajouter les données qui vont avec via des requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DoCmd.RunSQL "ALTER TABLE table1 DROP COLUMN test_" & Denom
    'le nom qui s'affectera à la table prendra avant test_. Donc ce sera test_(+ le nom saisi).
    DoCmd.RunSQL "ALTER TABLE table1 ADD COLUMN test_" & Denom
    Je bloque au niveau de la vérification : Comment je peux vérifier si le nom saisi dans le inputbox est égale à un des noms des champs de la table table1 ?

    Merci de votre réponse.

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour

    Tu peux utiliser une 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
     
    Public Function ChampExiste(ByRef DB As DAO.Database, ByVal NomTable As String, ByVal NomChamp As String) As Boolean
    '---------------------------------------------------------------------------
    ' Procedure     : ChampExiste
    ' DateTime      : 19/05/2015
    ' Author        : Argyronet
    ' Purpose       : Vériie l'existence d'un champ de table
    '...........................................................................
    ' Parameters    : DB : Objet DB
    '                 NomTable : String
    '                 NomChamp : String
     
    ' Return Codes  : Boolean = Vrai si le champ existe déjà
    '...........................................................................
    ' Notice        :
    '---------------------------------------------------------------------------
    Dim oTDF                                               As DAO.TableDef
    Dim oFLD                                               As DAO.Field
    Dim blnExiste                                           As Boolean
     
        On Error GoTo L_ErrChampExiste
        Set oTDF = DB.TableDefs(NomTable)
        Set oFLD = oTDF.Fields(NomChamp)
        blnExiste = Not (oFLD Is Nothing)
     
        On Error GoTo 0
     
    L_ExChampExiste:
        ChampExiste = blnExiste
        Set oTDF = Nothing
        Set oFLD = Nothing
        Exit Function
     
    L_ErrChampExiste:
        blnExiste = (err = 3380)
        Resume L_ExChampExiste
    End Function
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub AjouterChamp()
        If ChampExiste(CurrentDb, "Table1", InputBox("Quel nom de champ ?", "Sépcifiez...")) = True Then
            MsgBox "Ce champ existe déjà !", vbExclamation
        Else
            'Routine d'ajout du champ...
        End If
    End Sub
    Attention, cette routine suppose que la table existe dans l'objet DB !

    Argy

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    Merci argyronet,

    Je pensai que ça allait être une fonction plus simple ^^

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Ah ben si tu ne veux pas passer par du code propre, tu peux aussi faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    On Error Resume Next
    If Len(currentdb.TableDefs("Table1").Fields("Champ1").Name) Then
        'Routine d'ajout du champ
    End If
    Tu peux également user de nouveau d'un déconseillé "On Error Resume Next" et tenter d'ajouter le champ en force.
    Si Err<>0 alors c'est qu'il existe déjà !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    On Error Resume Next
    CurrentDB.Execute "ALTER TABLE table1 ADD COLUMN Champ1", dbFailOnError
    Mais perso, je préfère le générique et disposer de la fonction comme une bibliothèque pour d'autres usages.

    A toi de voir.

    Argy

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 80
    Points : 63
    Points
    63
    Par défaut
    Oui c'est vrai. J'ai gardé la première solution aussi.

    Merci encore. Je dormirai encore moins con ce soir

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

Discussions similaires

  1. Vérifier qu'un autre script n'est pas déjà exécuté
    Par olivier78960 dans le forum VBScript
    Réponses: 2
    Dernier message: 31/08/2010, 15h27
  2. Réponses: 4
    Dernier message: 25/01/2008, 17h24
  3. Réponses: 1
    Dernier message: 29/10/2007, 12h59
  4. Réponses: 3
    Dernier message: 11/09/2006, 16h25
  5. [VBA-E] Verifier qu'un nom de feuille n'est pas utilisé
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/03/2006, 09h19

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