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

VB 6 et antérieur Discussion :

DAO génération d'une base de données .mdb : problème ajout de champs à une table


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14
    Points : 12
    Points
    12
    Par défaut DAO génération d'une base de données .mdb : problème ajout de champs à une table
    salut,

    je tourne autour d'un problème depuis bien longtemps et je n'ai jamais trouvé la solution, peut-être est-elle trop évidente ?

    Enfin, je souhaite tout simplement via une macro VBA utilisant DAO :
    - créer un base .mdb
    - lui ajouter une table qui contient un champ
    - puis remplir cette table

    je bloque lors de l'ajout du champ à la table avec une erreur : 3219 opération non valide

    voici le code en question :
    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
     
    Dim oDBEngine As DAO.DBEngine
    Dim oWorkspace As DAO.Workspace
    Dim oDataBase As DAO.Database
    Dim oTableDef As DAO.TableDef
    Dim ofield As DAO.Field
     
    Set oDBEngine = CreateObject("DAO.DBEngine.36")
    Set oDataBase = oDBEngine.CreateDatabase("C:\test.mdb", dbLangGeneral, 64)
    Set oTableDef = oDataBase.CreateTableDef("PERSONNES")
    Set ofield = oTableDef.CreateField("nom", dbText, 20)
    'bloque à l'instruction ci après
    oTableDef.Fields.Append (ofield)
    oDataBase.TableDefs.Append (oTableDef)
     
    oDataBase.Close
    d'après ce que j'ai vu sur le net, ce code devrait s'executer sans problème...
    si quelqu'un a une solution ou une idée, par avance merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Bonjour,

    ça devrait marcher effectivement. Essaye en enlevant les parenthèses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    'bloque à l'instruction ci après
    oTableDef.Fields.Append ofield
    oDataBase.TableDefs.Append oTableDef
    ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    MERCI BEAUCOUP !

    effectivement sans les parenthèses, l'appel vers la méthode fonctionne !

    j'ai l'habitude de mettre entre parenthèses les arguments des méthodes à cause des autres langages...

    cf l'aide :

    Dans le cas d'une procédure appelée sans le mot clé Call, vous ne devez pas encadrer argumentlist par des parenthèses.

    j'aimerai bien savoir pourquoi dans ce cas précis l'appel n'a pas fonctionné

    par exemple, un simple fonctionne lui ...

  4. #4
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    C'est un problème de compilateur. quand tu mets des parenthèses autour d'un argument, l'argument est évalué, puis déposé sur la pile avant l'appel à la fonction. C'est donc le résultat d'un calcul qui est passé à la fonction, pas la variable. Ce qui a peu d'importance si la procédure appelée ne tente pas de modifier le parametre et si la procèdure attend un variant.
    Il convient d'etre attentif aux méthodes d'appel d'une function/Sub . A part MaSub MonParam, il faut utiliser des parenthèses autour de la liste des arguments. Ce qui est différent de parenthèses autour de chaque argument

    Technique classique
    ===============
    MaValeur = MaFonction( MonParam )
    MaSub MonParam
    Call MaSub(MonParam)

    MonParam pourra ête modifié par la fonction/sub
    Technique avec Parenthèses
    ======================
    MaValeur = MaFonction( (MonParam) )
    MaSub (MonParam)
    Call MaSub((MonParam))

    Dans ce second cas, MonParam est d'abord Evalué avant d'etre transmis sur la fonction/sub, c'est donc le résultat d'un calcul qui est transmis.

    Autre façon de concevoir le problème
    supposont MonParam de type numérique , on aurrait le même comportement avec ces lignes
    MaValeur = MaFonction( MonParam + 0 )
    MaSub MonParam+0
    Call MaSub(MonParam+0)
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

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

Discussions similaires

  1. Ouvrir une base de donnée .mdb
    Par yanouil dans le forum Général Python
    Réponses: 0
    Dernier message: 05/03/2014, 17h31
  2. [AC-2007] Connecter à une base de données(mdb) sécurisé
    Par lakhdar16 dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/11/2012, 16h07
  3. Trier, puis re-trier une Base de données - mdb
    Par hunteshiva dans le forum VB.NET
    Réponses: 1
    Dernier message: 19/03/2010, 11h18
  4. Date sous VB6.0 dans une base de donnée .mdb
    Par Bobshit dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/09/2009, 03h13
  5. Compresser une base de données *.mdb sans Access
    Par Fbartolo dans le forum C++Builder
    Réponses: 12
    Dernier message: 15/03/2009, 14h12

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