OVH Cloud OVH Cloud

CreateField et détails du champ

5 réponses
Avatar
GillesM
Bonjour,

Je cherche à ajouter un champ dans une table existante
et de définir les détails du champ en VB
pour créer le champ : ca va

Dim bds As Database, dft As TableDef, chp As Field
Set bds = OpenDatabase("C:\Temp\test.mdb")
Set dft = bds.TableDefs("Table1")
' Définit un nouveau champ dans la table.
Set chp = dft.CreateField("Champ_test1", dbCurrency)
' Ajoute l'objet Field à la collection Fields de l'objet TableDef.
dft.Fields.Append chp
dft.Fields.Refresh
bds.TableDefs.Refresh
Set bds = Nothing

Mais je n'arrive pas à definir les paramètres du champ c'est à dire :
Format : Fixe
Décimales : 2
Masque de saisie
Légende
Valeur par défaut : 0
Valide si : >=0
Null interdit : non
indexé : non

J'ai essayé plusieurs syntaxes, mais j'ai ou un message d'erreur
ou se n'est pas pris en compte ! ! !

Merci d'avance,

GillesM

5 réponses

Avatar
Eric
Bonjour GillesM,

Pour les propriétés Valeur par défaut, Valide Si et Message si erreur,
tu dois ajouter avant ta ligne

dtf.Appent chp

les instructions suivantes :

chp.DefaultValue = 0
chp.ValidationRule = ">=0"
chp.ValidationText = "Saisir une valeur positive ou nulle"

Ton champ étant défini en Monétaire (Currency) tu auras donc 2 décimales.

A+
Eric

"GillesM" <anti-spam> écrivait
news:41c99a27$0$19727$:

Bonjour,

Je cherche à ajouter un champ dans une table existante
et de définir les détails du champ en VB
pour créer le champ : ca va

Dim bds As Database, dft As TableDef, chp As Field
Set bds = OpenDatabase("C:Temptest.mdb")
Set dft = bds.TableDefs("Table1")
' Définit un nouveau champ dans la table.
Set chp = dft.CreateField("Champ_test1", dbCurrency)
' Ajoute l'objet Field à la collection Fields de l'objet
TableDef.
dft.Fields.Append chp
dft.Fields.Refresh
bds.TableDefs.Refresh
Set bds = Nothing

Mais je n'arrive pas à definir les paramètres du champ c'est à dire :
Format : Fixe
Décimales : 2
Masque de saisie
Légende
Valeur par défaut : 0
Valide si : >=0
Null interdit : non
indexé : non

J'ai essayé plusieurs syntaxes, mais j'ai ou un message d'erreur
ou se n'est pas pris en compte ! ! !

Merci d'avance,

GillesM






Avatar
Eric
...

Lire évidemment :
dft.Fields.Append chp au lieu de dtf.Appent chp
qui ne veut rien dire :(

a+
Eric
Avatar
GillesM
Bonjour Eric,
Merci pour ta réponse (je m'étais absenté)

C'est vrai pour le champ monétaire, mais pour un champ
numérique je ne trouve pas la manière de définir
le format, et le nbre de décimales

j'ai trouvé aussi
chp.Required = True
pour valeur nulle interdite

Encore merci

GillesM


"Eric" a écrit dans le message de
news:
...

Lire évidemment :
dft.Fields.Append chp au lieu de dtf.Appent chp
qui ne veut rien dire :(

a+
Eric



Avatar
Eric
Bonjour Gilles,

Après quelques recherches ...
Pour définir le Format et les décimales, il faut que tu ajoutes des
propriétés au champ que tu viens de créer.

Je te passe la procédure modifiée.

Private Sub Command1_Click()
On Error Resume Next
Dim bds As Database, dft As TableDef, chp As Field
Dim prp As Property, prpNew As Property
Set bds = OpenDatabase("C:Temptest.mdb")
Set dft = bds.TableDefs("Table1")
' Définit un nouveau champ dans la table.
Set chp = dft.CreateField("Champ_test1", dbSingle)
dft.Fields.Append chp
dft.Fields.Refresh
'---------- Modification - paramétrage des champs
chp.required = True
chp.DefaultValue = 0
chp.ValidationRule = ">=0"
chp.ValidationText = "Saisir une valeur positive ou nulle"
' -- Création des propriétés Format et DecimalPlaces
' -- Elles n'existent pas par défaut
Set prpNew = chp.CreateProperty("Format", dbText, "Fixed")
chp.Properties.Append prpNew
Set prpNew = chp.CreateProperty("DecimalPlaces", dbLong, 2)
chp.Properties.Append prpNew
dft.Fields.Refresh
'-------------- Fin modification
' -- Vérification des propriétés du champ
For Each chp In dft.Fields
If chp.Name = "Champ_test1" Then
For Each prp In chp.Properties
If prp.Name = "Format" Then
Debug.Print prp.Name & " = " & prp.Value
'Standard pour le séparateur de milliers
End If
If prp.Name = "DecimalPlaces" Then
Debug.Print prp.Name & " = " & prp.Value
End If
Next prp
End If
Next chp
bds.TableDefs.Refresh
Set prpNew = Nothing : Set chp = Nothing
Set dft = Nothing: Set bds = Nothing
End Sub

A+
Eric

"GillesM" écrivait :

Bonjour Eric,
Merci pour ta réponse (je m'étais absenté)

C'est vrai pour le champ monétaire, mais pour un champ
numérique je ne trouve pas la manière de définir
le format, et le nbre de décimales

j'ai trouvé aussi
chp.Required = True
pour valeur nulle interdite

Encore merci

GillesM



Avatar
GillesM
Bonjour Eric,

Merci beaucoup pour le complément
C'est exactement ce que je cherchais

GillesM


"Eric" a écrit dans le message de
news:
Bonjour Gilles,

Après quelques recherches ...
Pour définir le Format et les décimales, il faut que tu ajoutes des
propriétés au champ que tu viens de créer.

Je te passe la procédure modifiée.

Private Sub Command1_Click()
On Error Resume Next
Dim bds As Database, dft As TableDef, chp As Field
Dim prp As Property, prpNew As Property
Set bds = OpenDatabase("C:Temptest.mdb")
Set dft = bds.TableDefs("Table1")
' Définit un nouveau champ dans la table.
Set chp = dft.CreateField("Champ_test1", dbSingle)
dft.Fields.Append chp
dft.Fields.Refresh
'---------- Modification - paramétrage des champs
chp.required = True
chp.DefaultValue = 0
chp.ValidationRule = ">=0"
chp.ValidationText = "Saisir une valeur positive ou nulle"
' -- Création des propriétés Format et DecimalPlaces
' -- Elles n'existent pas par défaut
Set prpNew = chp.CreateProperty("Format", dbText, "Fixed")
chp.Properties.Append prpNew
Set prpNew = chp.CreateProperty("DecimalPlaces", dbLong, 2)
chp.Properties.Append prpNew
dft.Fields.Refresh
'-------------- Fin modification
' -- Vérification des propriétés du champ
For Each chp In dft.Fields
If chp.Name = "Champ_test1" Then
For Each prp In chp.Properties
If prp.Name = "Format" Then
Debug.Print prp.Name & " = " & prp.Value
'Standard pour le séparateur de milliers
End If
If prp.Name = "DecimalPlaces" Then
Debug.Print prp.Name & " = " & prp.Value
End If
Next prp
End If
Next chp
bds.TableDefs.Refresh
Set prpNew = Nothing : Set chp = Nothing
Set dft = Nothing: Set bds = Nothing
End Sub

A+
Eric

"GillesM" écrivait :

Bonjour Eric,
Merci pour ta réponse (je m'étais absenté)

C'est vrai pour le champ monétaire, mais pour un champ
numérique je ne trouve pas la manière de définir
le format, et le nbre de décimales

j'ai trouvé aussi
chp.Required = True
pour valeur nulle interdite

Encore merci

GillesM