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 :

[vb6] Modifier structure table Access sous VB6


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 89
    Points
    89
    Par défaut [Résolu] [vb6] Modifier structure table Access sous VB6
    Salut,

    Voilà, je souhaite sous vb, creer des tables dans une base, mais aussi pouvoir modifier des tables existantes.
    J'ai bien trouvé un post qui m'a bien éclairé en ce qui concerne la création en passant par l'utilisation de ADOX, mais je ne parvient pas avec cette méthode à faire des ALTER TABLE.

    Est-ce que quelqu'un sait comment faire ?

    D'avance merci.

    Jean-Luc

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Février 2003
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Février 2003
    Messages : 95
    Points : 85
    Points
    85
    Par défaut
    Bonjour !

    L'automation Access permet cela.

    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
     
    'Déclaration des variables utilisées
    Dim oAccess As Access.Application 'Application Access
    Dim oDataBase As Database 'Base de données
    Dim oTableDef As TableDef 'Table
    Dim oField As Field 'Champ
     
    'Ouverture du fichier mdb
    Set oAccess = New Access.Application
    oAccess.NewCurrentDatabase Nom_du_Fichier_mdb_a_ouvrir
    Set oDataBase = oAccess.CurrentDb
    Set oTableDef = oDataBase.CreateTableDef(Nom_de_la_table_a_creer)
     
    'Définition d'un champ
    Set oField = oTableDef.CreateField(Nom_du_champ, Type_du_champ, Longueur)
    oTableDef.Fields.Append oField
    oDataBase.TableDefs.Append oTableDef
    Voilà.

    J'espère avoir pu t'aider.
    Un verre vide se plaint, un verre plein se vide ...

  3. #3
    Membre régulier Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 89
    Points
    89
    Par défaut
    Salut,

    Merci pour le coup de main. Je galère un peu sur ce truc. La table existe déjà et je veux juste pouvoir ajouter ou supprimer des champs dans la table.
    En fait, il s'agit de pouvoir permettre à tout utilisateur d'upgrader une base de données lors de la mise en place d'une nouvelle révision de mon application. Donc, il faut que je puisse :
    - ajouter ou supprimer des tables
    - ajouter ou supprimer des colonnes dans une table existante

    Encore merci d'avance,

    Jean-Luc

  4. #4
    Membre régulier Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 89
    Points
    89
    Par défaut
    Est-ce que c'est possible de faire de l'ALTER TABLE (ou toute autre commande pour modifier une structure de données dans Access) ?

    J'ai regardé le tuto sur ADOX, mais je n'ai rien vu sur la modification de table...

    J'ai essayé la méthode suivante, mais cela ne donne rien :
    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 BaseCat       As ADOX.Catalog
       Dim MgtTable      As ADOX.Table
       Dim MgtColumn     As ADOX.Column
    '
       Set BaseCat = New ADOX.Catalog
       Set BaseCat.ActiveConnection = BaseConnect
       Set MgtTable = New ADOX.Table
       MgtTable.Name = "R_Products"
       Set MgtColumn = New ADOX.Column
       With MgtColumn
          .Name = "Product_Valid"
          .Type = adBoolean
          .ParentCatalog = BaseCat
       End With
       MgtTable.Columns.Append MgtColumn
    Je n'ai pas d'erreur, mais ma colonne n'est pas créé dans ma table. J'ai peut-etre omis une déclaration .... En fait, je ne vois pas comment relier la création de cette colonne à mon Catalog 'BaseCat'

  5. #5
    Membre actif Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    bonjour,
    : ALTER TABLE est une instruction du langage SQL. Il suffit de l'utiliser dans une requete.
    Tu peux meme la tester directement sous access (comme avec la pluspart des SGBD qui utilisent SQl).
    RAPPEL: Il y a un tutoriel sur l'ADO.

  6. #6
    Membre régulier Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 89
    Points
    89
    Par défaut
    Tout d'abord, merci de ta réponse, et d'essayer de m'aider.

    En fait, mon soucis lors de la nouvelle version d'un programme, est de permettre à celui-ci d'upgrader la database de facon automatique. Je parviens bien à créer des tables, mais je ne parviens pas à modifier les tables existantes.
    J'ai essayé de lancer des requetes SQL de type ALTER TABLE, mais je ne parviens pas avec ADO à les lancer sur une base (et non, comme un SELECT, sur une Table). Utiliser ALTER TABLE dans un ordre SQL comme un SELECT conduit à une erreur.
    On m'a donc indiqué ADOX. J'ai lu le tutoriel. Mais à chaque fois, et sur le site de Microsoft, toutes les explications et les exemples se font lors de la création de tables et non lors de la modification.
    Pourtant, si sur un objet de type Column j'ai l'ordre Delete, il me semble donc que cela ne doit pas s'appliquer à une création de table, mais bien à une modification.
    Le code suivant ne me donne aucun message d'erreur, mais ne fait rien.

    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
     
       Dim BaseCat       As ADOX.Catalog
       Dim MgtTable      As ADOX.Table
       Dim MgtColumn     As ADOX.Column
       Dim BaseConnect    As ADODB.Connection
       '
        Set BaseConnect = New ADODB.Connection
       BaseConnect.CursorLocation = adUseClient
       BaseConnect.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & StrGloNomBase & ";Persist Security Info=False"
       BaseConnect.Open
       '
      Set BaseCat = New ADOX.Catalog
       Set BaseCat.ActiveConnection = BaseConnect
       '
       Set MgtTable = New ADOX.Table
       MgtTable.ParentCatalog = BaseCat
       MgtTable.Name = "R_Products"
       Set MgtColumn = New ADOX.Column
       With MgtColumn
          .Name = "Product_Valid"
          .Type = adBoolean
          .ParentCatalog = BaseCat
       End With
       MgtTable.Columns.Append MgtColumn
       Set BaseCat = Nothing
       Set MgtTable = Nothing
    Est-ce que quelqu'un aurait un exemple de modification de table existante ? (avec un ALTER TABLE ou ADOX ou autre chose encore, mais sous VB et non avec le GUI d'Access)

  7. #7
    Membre actif Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Bonjour,
    dans le forum Langage SQL, il y a un message qui conseillait lors d'une modification de table de:
    1) sauvegarder la table dans une autre
    2) effacer tous les enregistrements
    3) faire la modif
    4) relire les enregistrements
    Est-ce que cela pourrait s'appliquer à ton cas ?

    Je reitère mon conseil de tester les requetes SQl directement avec le SGBD car je ne vois pas la différence entre une execution en DAO, ADO par Vb et par l'interface SQL du sgbd. Il peut y avoir d'autres problèmes, mais au moins on est sûr que cela ne vient pas de la requete elle-meme (syntaxe, etc).

  8. #8
    Membre régulier Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 89
    Points
    89
    Par défaut
    OK pour le conseil, c'était meme ma premiere idée. De plus, je suis ouvert à toutes les solutions pour ce problème.

    Mais comment fais-tu pour éxècuter une requete SQL de type CREATE TABLE ou ALTER TABLE sur une base Access 2000 avec VB6 ? En fait, c'est cela qu'il me faudrait, la méthode et un petit exemple.

    Je n'ai rien trouvé sur le sujet avec ALTER TABLE, à part un post concernant VB4 et qui ne répond pas à ma question.

    Sinon, encore merci pour ton aide, j'apprécie.

  9. #9
    Membre actif Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Points : 239
    Points
    239
    Par défaut
    Le message c'est:
    http://www.developpez.net/forums/vie...ighlight=alter

    Pour executer ma requete SQL sous access:
    - soit je la recupere dans une variable espion en mode interprété, puis copier sous vb, coller dans une nouvelle requete sous access;
    - soit si elle est simple, je la tape directement sous access.

    Si tu n'as pas access, utilise visdata, fourni avec les vb

  10. #10
    Membre régulier Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 89
    Points
    89
    Par défaut
    Mon problème n'est pas de connaitre la requete SQL mais de savoir comment la faire executer sous VB.

  11. #11
    Membre régulier Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Points : 89
    Points
    89
    Par défaut
    Bon, après deux jours de galères, je vous donne la solution que j'ai trouvé.... (merci a JM Rabilloud pour son tutoriel sur ADOX qui m'a aiguillé sur la solution).

    Je passe bien par l'exécution d'une requete SQL.

    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
     
       Dim BaseConnect    As ADODB.Connection
       Dim SqlCommand    As ADODB.Command
       '
       Set BaseConnect = New ADODB.Connection
       With BaseConnect
          .Provider = "Microsoft.Jet.OLEDB.4.0"
          .CursorLocation = adUseClient
          .Mode = adModeShareExclusive
          .Open "Data source=Nom_Complet_de_ma_base"
       End With
       '
       Set SqlCommand = New ADODB.Command
       SqlCommand.ActiveConnection = BaseConnect
       SqlCommand.CommandType = adCmdText
       SqlCommand.CommandText = "ALTER TABLE R_Products " & _
                                "ADD COLUMN Product_Valid BIT;"
       Set rssql = SqlCommand.Execute
    Et cela fonctionne... Le type de commande SQL peut aussi etre un fichier (je n'ai pas testé, mais je vais le faire). Cela peut etre interessant pour avoir un fichier texte contenant l'ensemble des commandes de modifications de la base.

    A noter, le type de données BIT pour une donnée de type Booléen (Oui/Non). J'ai trouvé cette infos dans l'aide d'access qui permet d'obtenir tous les types de données au format SQL.

    OUF... ..

    Jean-Luc

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

Discussions similaires

  1. Suppression d'un enregistrement d'une base Access sous vb6
    Par azzouz_soui dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 05/08/2008, 18h45
  2. Importation/ exportation txt-->Access sous VB6
    Par moi_leila dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 02/12/2007, 14h43
  3. se deplacer dans une table access avec VB6
    Par meddeb2001 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 13/03/2007, 18h12
  4. comment réparer et compacter une base access sous vb6
    Par rallain dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/11/2006, 10h42
  5. [VB6] Type de colonne Access sous VB ?
    Par jlvalentin dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 04/02/2005, 11h10

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