Clé primaire Access [Résolu]

Dounej 28 Messages postés jeudi 28 décembre 2006Date d'inscription 7 avril 2007 Dernière intervention - 3 avril 2007 à 16:52 - Dernière réponse : Dounej 28 Messages postés jeudi 28 décembre 2006Date d'inscription 7 avril 2007 Dernière intervention
- 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
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 3 avril 2007 à 18:13
3
Merci
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

Merci chaibat05 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de chaibat05
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 3 avril 2007 à 17:04
0
Merci
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)
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 3 avril 2007 à 17:07
0
Merci
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
Commenter la réponse de cs_Jack
Dounej 28 Messages postés jeudi 28 décembre 2006Date d'inscription 7 avril 2007 Dernière intervention - 3 avril 2007 à 17:32
0
Merci
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 !!
Commenter la réponse de Dounej
HommingPigeon 2 Messages postés mercredi 9 février 2005Date d'inscription 3 avril 2007 Dernière intervention - 3 avril 2007 à 18:01
0
Merci
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.
Commenter la réponse de HommingPigeon
Dounej 28 Messages postés jeudi 28 décembre 2006Date d'inscription 7 avril 2007 Dernière intervention - 3 avril 2007 à 20:11
0
Merci
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.
Commenter la réponse de Dounej
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 3 avril 2007 à 20:36
0
Merci
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+


 
Commenter la réponse de chaibat05
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 3 avril 2007 à 20:43
0
Merci
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
Commenter la réponse de chaibat05
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 3 avril 2007 à 20:50
0
Merci
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


 
Commenter la réponse de chaibat05
Dounej 28 Messages postés jeudi 28 décembre 2006Date d'inscription 7 avril 2007 Dernière intervention - 3 avril 2007 à 23:26
0
Merci
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
Commenter la réponse de Dounej
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 3 avril 2007 à 23:40
0
Merci
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
Commenter la réponse de chaibat05
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 3 avril 2007 à 23:44
0
Merci
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 "
Commenter la réponse de chaibat05
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 3 avril 2007 à 23:55
0
Merci
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
Commenter la réponse de chaibat05
Dounej 28 Messages postés jeudi 28 décembre 2006Date d'inscription 7 avril 2007 Dernière intervention - 4 avril 2007 à 15:30
0
Merci
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 ???
Commenter la réponse de Dounej
Dounej 28 Messages postés jeudi 28 décembre 2006Date d'inscription 7 avril 2007 Dernière intervention - 4 avril 2007 à 15:30
0
Merci
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 ???
Commenter la réponse de Dounej

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.