Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Modélisation
Modélisation Le forum qui vous aide à résoudre vos questions relatives à la modélisation (tables et relations) de votre base de données sous Access. Pour les états et les formulaires, postez dans le forum IHM.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/08/2011, 16h52   #1
Membre du Club
 
bonero pross
Inscription : janvier 2010
Messages : 160
Détails du profil
Informations personnelles :
Nom : bonero pross

Informations forums :
Inscription : janvier 2010
Messages : 160
Points : 58
Points : 58
Par défaut Clef Primaire avec ADOX

Bonjour tout le monde,

J’aimerais ajouter un nouveau champs a la table “Sales” et faire de ce nouveau une clef primaire qui commence par 77 et augemente de 3.

Pour ce faire, j’utilise le code suvant mais la clef primaire commence par 1 et augmente de 1.
Quelqu’un aurait il l’amabilite de ma dire ce que cloche dans mon.
Pour info, j’ai pique le code de ce site et l’ai legerement modifie:

http://msdn.microsoft.com/en-us/libr...ffice.10).aspx

Code :
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
Sub ClefPrimaireAvecADOx()
'Ajuouter un nouveau champs et faire de ce dernier un champs primaire.
'le champs doit commencer par 77 et avec Increment=3.
 
    Dim Cat As ADOX.Catalog, Cn As ADODB.Connection
 
    Set Cat = CreateObject("adox.catalog")
    Set Cn = Application.CurrentProject.Connection
    Set Cat.ActiveConnection = Cn
 
    Dim Col As ADOX.Column
    Set Col = CreateObject("adox.column")
 
    With Col
        .Name = "RecordID"
        .Type = adInteger
    Set .ParentCatalog = Cat
        .Properties("AutoIncrement") = True
        .Properties("Seed") = CLng(77)
        .Properties("Increment") = CLng(3)
 
    End With
 
    Cat.Tables("sales").Columns.Append Col
 
'Liberer de l'espace.  
    Set Col = Nothing
    Set Cn = Nothing
    Set Cat = Nothing
 
End Sub

merci d avance
Bonero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 18h56   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Je pense qu'il y a une piste dans le lien ...
Citation:
Using the procedure

This procedure works best on an empty table. You can run it against a table that contains data, but this particular procedure won't start using the Seed and Increment properties until you start entering new data. For any existing records, Access will assign values starting with 1 and will increment by 1
Il faut que la table soit vide.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/08/2011, 13h20   #3
Membre du Club
 
bonero pross
Inscription : janvier 2010
Messages : 160
Détails du profil
Informations personnelles :
Nom : bonero pross

Informations forums :
Inscription : janvier 2010
Messages : 160
Points : 58
Points : 58
Citation:
Envoyé par LedZeppII Voir le message
Bonjour,

Je pense qu'il y a une piste dans le lien ...

Il faut que la table soit vide.

A+



Bonjour LedZepp,

Merci pour ta reponse.Tu as tout a fait raison. J ‘avoue que je n’avais pas bien regarde les limitations de cette procedure. Je viens de tester le code et les resultats obtenus sont ceux escomptes.

Dans ce cas, je me demande si il existe un moyen d’inserrer un champs de clef primaire dans une table qui contient deja des donnees et faire en sorte que cette clef primaire commence par une valeur specifique(SEED) et augmente d’une valeur specifique (INCREMENT).

Merci d’avance.
Bonero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 18h47   #4
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Le seul moyen par lequel j'arrive à le faire, c'est en faisant une copie de la table.
  1. Copier la table Sales en table Sales_Old
  2. Vider la table Sales
  3. Ajouter le champ NuméroAuto à la table Sales
  4. Copier les données (requête ajout) de Sales_Old dans Sales
  5. Supprimer la table Sales_Old
Exemple en code, pour une table Sales n'ayant pas déjà une clé primaire.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Dim oCn As ADODB.Connection
Dim sSQL As String
 
Set oCn = CurrentProject.Connection
 
' Copier table Sales dans Sales_Old
DoCmd.CopyObject , "Sales_Old", acTable, "Sales"
 
' Vider table Sales
sSQL = "DELETE FROM Sales"
oCn.Execute sSQL
 
' Créer champ clé RecordID de type NuméroAuto
sSQL = "ALTER TABLE Sales ADD COLUMN [RecordID] COUNTER(77,3) CONSTRAINT PrimaryKey PRIMARY KEY"
oCn.Execute sSQL
 
'Copier données de Sales_Old dans Sales
'trié par exemple sur le champ N°
sSQL = "INSERT INTO Sales SELECT Sales_Old.* FROM Sales_Old ORDER BY Sales_Old.[N°]"
oCn.Execute sSQL
 
'Supprimer table Sales_Old
sSQL = "DROP TABLE Sales_Old"
oCn.Execute sSQL
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 15h41   #5
Membre du Club
 
bonero pross
Inscription : janvier 2010
Messages : 160
Détails du profil
Informations personnelles :
Nom : bonero pross

Informations forums :
Inscription : janvier 2010
Messages : 160
Points : 58
Points : 58
Citation:
Envoyé par LedZeppII Voir le message
Bonjour,

Le seul moyen par lequel j'arrive à le faire, c'est en faisant une copie de la table.
  1. Copier la table Sales en table Sales_Old
  2. Vider la table Sales
  3. Ajouter le champ NuméroAuto à la table Sales
  4. Copier les données (requête ajout) de Sales_Old dans Sales
  5. Supprimer la table Sales_Old
Exemple en code, pour une table Sales n'ayant pas déjà une clé primaire.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Dim oCn As ADODB.Connection
Dim sSQL As String
 
Set oCn = CurrentProject.Connection
 
' Copier table Sales dans Sales_Old
DoCmd.CopyObject , "Sales_Old", acTable, "Sales"
 
' Vider table Sales
sSQL = "DELETE FROM Sales"
oCn.Execute sSQL
 
' Créer champ clé RecordID de type NuméroAuto
sSQL = "ALTER TABLE Sales ADD COLUMN [RecordID] COUNTER(77,3) CONSTRAINT PrimaryKey PRIMARY KEY"
oCn.Execute sSQL
 
'Copier données de Sales_Old dans Sales
'trié par exemple sur le champ N°
sSQL = "INSERT INTO Sales SELECT Sales_Old.* FROM Sales_Old ORDER BY Sales_Old.[N°]"
oCn.Execute sSQL
 
'Supprimer table Sales_Old
sSQL = "DROP TABLE Sales_Old"
oCn.Execute sSQL
A+


salut ,
merci beaucoup pour ta reponse; c etait exactement ce que je voulais.


cordiallement,
Bonero
Bonero est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h00.


 
 
 
 
Partenaires

Hébergement Web