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

VBScript Discussion :

Modifier les propriétés d'un champ d'une table


Sujet :

VBScript

  1. #1
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 380
    Points : 247
    Points
    247
    Par défaut Modifier les propriétés d'un champ d'une table
    Bonjour
    Je souhaite modifier la taille d'un champ pour une table de ma base de données.
    Voila ce que j'ai tenté, mais ça ne fonctionne pas, une erreur se produit sur la dernière ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const nomdb           = "Mabase.MDB"
    Set oDAO36 = CreateObject("DAO.DBEngine.36")
    Set oBase  = oDAO36.openDatabase (nomdb)
    set field = obase.TableDefs("klés").fields("MP").properties
    set pr = field("Size") 
    pr.value=20
    Windows 10
    Microsoft Edge (64 bits)
    Google Chrome Version 67.0.3396.99 (Build officiel) (64 bits)

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Effectivement il faut faire un peu plus : il faut garder envers l'inexistence de la méta-data en question. Si elle n'existe pas, il faut la créer d'abord... enfin bref.

    On peut faire comme ça remplaçant les dernières trois lignes.
    Code vbscript : 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
    propname="Size"
    proptype=3    'adInteger=3
    propvalue=20
     
    set field = obase.TableDefs("klés").fields("MP")
    on error resume next
    field.properties(propname)=propvalue
    if err.number<>0 then
        if err.number=3270 then    'n'existe pas encore
            err.clear
            set oprop=field.createproperty(propname, proptype, propvalue)
            field.properties.append oprop
            if err.number<>0 then
    	'échec d'appendre la propriété, faire écho etc...
            end if
        else
            'échec général, faire écho etc...
        end if
    end if
    on error goto 0

  3. #3
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 380
    Points : 247
    Points
    247
    Par défaut
    Bonsoir
    je viens de faire l'essai mais cela ne fonctionne pas; j'obtiens "échec général".
    Windows 10
    Microsoft Edge (64 bits)
    Google Chrome Version 67.0.3396.99 (Build officiel) (64 bits)

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Le script reflète bien fidèlement le problème. Je remarque que la propriété qu'on intends de changer est "size" qui est une propriété bien propre pour les champs du type Text (dbText=&h0a ou dbComplexText=&h6d). Or "size" est une propriété read-only une fois le champ est crée :
    Field.Size Property (DAO)

    Pour la faire changer dynamiquement, on a heursement un moyen via sql du type "alter table ... alter column ...". Voici comment faire à premier temps.
    Code vbs : 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
    propname="Size"
    proptype=3    'adInteger=3
    propvalue=20
    tablename="klés"
    fieldname="MP"
     
    set field = obase.TableDefs(tablename).fields(fieldname)
     
    if strcomp(propname, "size", 1)=0 and (field.type=&h0a or field.type=&h6d) then
        set qdf=db.CreateQueryDef("", "Select * from " & tablename)
        ssql="ALTER TABLE [" & tablename & "] ALTER COLUMN " & fieldname & " " & "Text(" & propvalue & ");"
        qdf.sql=ssql
        qdf.execute
    else
        on error resume next
        ' etc etc... comme posté précédemment
        on error goto 0
    end if
    On garde bien entendu d'autres propriétés qui ont la même restriction dynamique qu'on peut rajouter plus de conditionnels que celui pour "size" au fur et à mesure - ou une fois pour tous si vous connaissez bien l'ensemble exhaustif de propriétés de ce genre. Et il va de soi que la considération de la permission d'exécution de sql du type "alter table" joue un rôle naturellement.

  5. #5
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 380
    Points : 247
    Points
    247
    Par défaut
    Cette fois cela fonctionne.

    merci pour l'aide. C'est sympa.
    Windows 10
    Microsoft Edge (64 bits)
    Google Chrome Version 67.0.3396.99 (Build officiel) (64 bits)

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    bonjour,

    s'il s'agit simplement de créer un champ de type Text avec une taille de 20
    au lieu de sa taille par défaut de 255, la méthode la + simple est de définir
    la propriété size quand elle est encore en mode r/w (avant de l'ajouter à la collection Fields)
    voir ci-dessous l'exemple donné par le doc DAO :
    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
    38
    Sub SizeX()
     
        Dim dbsNorthwind As Database
        Dim tdfEmployees As TableDef
        Dim fldNew As Field
        Dim fldLoop As Field
     
        Set dbsNorthwind = OpenDatabase("Comptoir.mdb")
        Set tdfEmployees = dbsNorthwind.TableDefs!Employés
     
        With tdfEmployees
     
            ' Crée un nouvel objet Field et l'ajoute à la
            ' table Employés.
            Set fldNew = .CreateField("Fax")
            fldNew.Type = dbText
            fldNew.Size = 20
            .Fields.Append fldNew
     
            Debug.Print "TableDef: " & .Name
            Debug.Print "  Field.Name - Field.Type - Field.Size"
     
            ' Enumère la collection Fields et imprime le
            ' nom, le type et la taille des champs.
            For Each fldLoop In .Fields
                Debug.Print "    " & fldLoop.Name & " - " & _
                    fldLoop.Type & " - " & fldLoop.Size
            Next fldLoop
     
            ' Supprime le nouveau champ car ceci est 
            ' une démonstration.
            .Fields.Delete fldNew.Name
     
        End With
     
        dbsNorthwind.Close
     
    End Sub
    maintenant, s'il s'agit de modifier cette taille dynamiquement à plusieurs reprises dans le script , l'exemple
    donné par tsuji est le bon
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

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

Discussions similaires

  1. [AC-2003] modifier les données dans le champs d'une table en sql
    Par carlostropico dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 01/12/2009, 16h24
  2. Modifier les propriétés d'un champ
    Par LuckyLuke56 dans le forum Langage
    Réponses: 15
    Dernier message: 24/06/2009, 17h52
  3. changer les propriétés d'un champ d'une table
    Par laurentSc dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/03/2009, 16h03
  4. Modifier les valeurs de certains champs d'une table
    Par Xorbane dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/10/2007, 22h10
  5. [VBA-E] Modifier les propriétés d'un control par une routine
    Par formath dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/03/2007, 10h45

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