Clé primaire Access

Résolu
Dounej Messages postés 28 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 7 avril 2007 - 3 avril 2007 à 16:52
Dounej Messages postés 28 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 7 avril 2007 - 4 avril 2007 à 15:30
Bonjour,

Comment créer une clé primaire en VB6 ?

j'ai un programme qui crée une base ACCESS, je veux rajouter une colonne servant d'index en créant une clé primaire.

sous Dotnet :
object.PrimaryKeys (Table)
mais ne fonctionne pas VB6

Cordialement.

Marc

15 réponses

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
3 avril 2007 à 18:13
Bonsoir,

essaies cec i pour voir:

Dim xDB As Database
Dim tbl As TableDef
Dim Fld As Field
Dim idx As Index


xDB fait référence à ta base


 'référencer la Table
    Set tbl = xDB.TableDefs(LaTable)


'
 'ajouter le champ    
       
    Set Fld = tbl.CreateField(xnom, xtype, xtaille)
    tbl.Fields.Append Fld


'Creer la cle primaire
      Set idx = tbl.CreateIndex(LeChamp)
   
      idx.Fields.Append idx.CreateField(LeChamp)
      idx.Primary = True
      tbl.Indexes.Append idx
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 avril 2007 à 17:04
Salut
Regarde dans cette source : Il y a tout ce qu'il faut pour créer la structure d'une Table, y compris la clé primaire
http://www.vbfrance.com/codes/DB-COPIE-STRUCTURE-DB-EXISTANTE-TABLES-CLES-PRIMAIRES_20657.aspx

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 avril 2007 à 17:07
Oups, j'avais pas vu que c'était du VB.Net
A mon avis, les objets n'ayant pas changés, les méthodes doivent rester valables.
Tu peux consulter les fichiers VB6 avec un éditeur texte classique si tu n'as pas VB6
(qqes minutes plus tard)
Suffit de chercher "Primaire" parmi les codes en Net et tu tomberas sur cette source :
http://www.vbfrance.com/codes/CREATION-BASE-ACCESS-VB-NET_40073.aspx
0
Dounej Messages postés 28 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 7 avril 2007
3 avril 2007 à 17:32
merci
jack




avant de poser ma question, j'ai bien évidemment fait une recherche poussée sur le site tant sur le Forum que sur les codes.
J'ai bien évidemment trouvé les codes que tu me cites en lien.
Malheureusement ces codes ne résolvent pas mon PB !

Les variables de mon Prog sont déclarées en ADO ,
Les variables des codes sont en ADOX !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
HommingPigeon Messages postés 2 Date d'inscription mercredi 9 février 2005 Statut Membre Dernière intervention 3 avril 2007
3 avril 2007 à 18:01
Il faut je pense le faire directement en SQL avec un ALTER TABLE, par exemple :

    ALTER TABLE MaTable ADD COLUMN Identifiant Text(25) PRIMARY KEY

Ensuite, tu executes la requete avec l'objet Command de ADO.
0
Dounej Messages postés 28 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 7 avril 2007
3 avril 2007 à 20:11
BRAVO 


736628

chaibat05





j'ai intégré tes lignes de codes dans mon prog :

ça marche !


merci pour cette aide car cela fait un moment que je "tritouille" des bouts de prog pour aboutir au résultat.


néanmoins




je ne n'ai résolu que partiellement mon problème
voici le problème que j'ai posé ce matin :


http://www.vbfrance.com/infomsg_ENREGISTREMENT-ACCESS_914176.aspx#11





je pense que mon analyse était bonne, le fait de créer une clé permet l'enregistrement après le précédent.

Sauf que nouveau problème
:

car maintenant il refuse d'aller au delà de 9 enregistrements.

pourquoi au 10 ème ça plante ?
(j'ai recommencé plusieurs fois et c'est toujours au 10 ème enregistrement que le PB se pose)
voici le message d'erreur

"problème de doublons dans champs index,..., clé primaire interdisant les doublons"

Je pense que le problème n'est pas lié à la clé ,
je pense que mon programme refuse un nouvel enregistrement au rang supérieur ,
donc il reste au rang 9 d'où le doublon ???

Mon programme original comprend près de 200 colonnes,
est-ce le volume des données qui est en cause ????
car ce même programme (voir lien ci-dessus) fonctionne très bien avec 50 colonnes !!

Cher =736628 chaibat05 si tu as un avis, il sera très bien venu !

Avec mes remerciements.
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
3 avril 2007 à 20:36
Si je comprend bien avec :
  rs.AddNew
    '--------------------------------------------
    For i = 1 To 150
        rs.Fields("P" & i).Value = "mes données"
    Next i
    '--------------------------------------------
    rs.Update




tu as 150 colonnes (P1, P2, P3,  ....etc)
et tu veux ajouter la même donnée à tous les chanps.
Si c' est ça lz code est valable.


Maintenant s' agissant de l' erreur du doublon,
il faut savoir que la clé primaire t' interdit, d' avoir deux lignes
avec la même valeur au niveau du champ Index.
Si ton prog plante à la 10 ième ligne, c' est que la valeur que tu tentes
d' ajouter éxiste déjà sur une ligne parmi les 9 précédentes.
Vérifies d' abord, ensuite fais nous part de tes constatations


D' autre part, ne pas entamer la création de clé primaire qu' après avoir
été certain que toutes les valeur au niveau du champ concerné, sont unique.

A+


 
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
3 avril 2007 à 20:43
je viens de me rendre compte que tu as une erreur de synthaxe
au niveau de la boucle:
Pour corriger
Dim xChp As String


For i = 1 To 150
    '--------------------------------------------
     rs.AddNew
     xChp="P" & Str(i) 
     rs.Fields(xChp).Value = "mes données"
     rs.Update
    '--------------------------------------------
 Next I
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
3 avril 2007 à 20:50
encore une bourde !
pardon, j' ai recopié la mauvaise boucle:


rs.AddNew
    '--------------------------------------------
    For i = 1 To 150
        xChp="P" & Str(i)
        rs.Fields(xChp).Value = "mes données"
    Next i
    '--------------------------------------------
    rs.Update


 
0
Dounej Messages postés 28 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 7 avril 2007
3 avril 2007 à 23:26
Bonsoir  (ou bonjour )  chaibat05

Le type de modification que tu me proposes ne change rien au fond du problème!
"P" & Str(i) ne fonctionne pas en revanche "P" & i fonctionne très bien.

Je viens de faire plusieurs tests successifs par le biais d'un Msgbox, et je constate
que le "movelast" ne fonctionne pas ; c'est à dire que  le positionnement sur le dernier enregistrement de la base ne se fait pas !!!!

ma base contient 9 enregistrements ,
lorsque je lui demande de me donner la valeur du dernier index, il me donne 8 ???

d'où la nouvelle question :

comment se positionner sur le dernier enregistrement d'une base ?

lorsque movelast ne fonctionne pas ?

ou alors pourquoi ne prend t'il pas en considération tous les enregistrements de la base ?

Cordialement
Marc
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
3 avril 2007 à 23:40
d' accord,
essaies sans le rs.MoveLest, qui est d' ailleurs pas nécéssaire,
en attendant que je réanalyse ton code dans le lien indiqué ci-haut

à plus tard
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
3 avril 2007 à 23:44
tu fais un msgbox pour qu' il te retourne quoi ?
et tu fais référence à quoi quand tu dis :
 "...la valeur du dernier index, il me donne 8 "
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
3 avril 2007 à 23:55
ton erreur est dans:
Set fd = td.CreateField("P" & i, dbInteger, 10)

si tu regardes bien mon code précédent:
Set fd = td.CreateField(xNom, xType, xTaille)

il n' y a pa de paramètre taille pour un champ numérique
la taille est résérvée pour les champs String
0
Dounej Messages postés 28 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 7 avril 2007
4 avril 2007 à 15:30
comment se positionner sur le dernier enregistrement d'une base ?



Comment ai-je résolu le problème ?

Movelast ne fonctionnent pas pour ma base pour des raisons que j'ignore.

J'utilise RecordCount pour incrémenter un nouvel enregistrement.

Je pense qu'il bloque à un moment, a cause d'un problème de "format" d'une valeur ???
0
Dounej Messages postés 28 Date d'inscription jeudi 28 décembre 2006 Statut Membre Dernière intervention 7 avril 2007
4 avril 2007 à 15:30
comment se positionner sur le dernier enregistrement d'une base ?



Comment ai-je résolu le problème ?

Movelast ne fonctionnent pas pour ma base pour des raisons que j'ignore.

J'utilise RecordCount pour incrémenter un nouvel enregistrement.

Je pense qu'il bloque à un moment, a cause d'un problème de "format" d'une valeur ???
0
Rejoignez-nous