Insertion donnée dans BD MySql et création de la clé primaire

alf666666 Messages postés 46 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 16 avril 2008 - 21 juil. 2005 à 19:27
cs_bastoun Messages postés 164 Date d'inscription dimanche 1 octobre 2000 Statut Membre Dernière intervention 23 mars 2007 - 10 août 2005 à 22:23
Bonjour,
Je désire simplement faire une insertion de données dans ma BD MySql. Mais dans ma BD, y a une clé primaire, donc comment dire à mon insertion que je désire autoincrémenter la clé primaire.
Donc :
1. maison
2. chalet
3. caravane
etc.. donc je désire que le 1, 2 , 3.. etc. soit autoincrémenté
Merci pour votre aide..
salutations
Alain

15 réponses

cs_Metrox Messages postés 267 Date d'inscription jeudi 19 septembre 2002 Statut Membre Dernière intervention 8 septembre 2013
21 juil. 2005 à 22:32
Si tu veux l'incrémenter automatiquement, une fonction est à activer dans la db. Tu devras lui dire qu'il ne doit pas générer un numéro aléatoire mais bien un nombre autoincrémenté...

Bonne chance.


M@x ---> Go on www.metrox.be
0
alf666666 Messages postés 46 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 16 avril 2008
22 juil. 2005 à 08:13
Hello,
Merci pour ta réponse, mais dans le mySQL y a effectivement une opération qui te permet d'autoincrémenter, en mettant dans une case un 1 pour incrémenter de +1, mais bon ca fonctionne pas ou bien je fais une erreur, par contre pour le faire directement sur la requete en créant une variable avec un for(i=0;i<X; i++), est ce qu'on peut faire un truc du style comme en C, ou bien pas possible en coldfusion ?
Merci
Salutations
0
cs_Metrox Messages postés 267 Date d'inscription jeudi 19 septembre 2002 Statut Membre Dernière intervention 8 septembre 2013
22 juil. 2005 à 09:18
Ce que tu peux alors faire c'est récupérer la valeur de ta dernière
clé par un select, et ensuite, tu la réintroduis en l'ayant incrémenté,
par exemple:



<cfquery name="maquery" database="madb">

select * from matable order by cle_unique

</cfquery>

tu récupères le dernier, je connais plus la syntaxe exacte, déso...

<cfset mavar = #Evaluate(cle_unique + 1)#>

<cfquery name="maquery2" database="madb">

Insert into matable (valeur1, valeur2, cle_unique) values ("valeur1", "valeur2", cle_unique)

</cfquery>



Il doit surement y avoir des fautes dans le code, mais essaye quand meme ;-)


M@x ---> Go on www.metrox.be
0
alf666666 Messages postés 46 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 16 avril 2008
22 juil. 2005 à 09:23
Hello,
Merci pour ton aide, je vais tester tout ca ce soir.
Mais dans tes nombreux code que tu mets sur le net (et un grand merci d'ailleurs), quand tu fait des insert dans un BD, tu as jamais de clé primaire et étrangères ? tu risques pas d'avoir des doublons ? Si 2 personnes s'appelle par exemple john Matrox ? Tu fais comment pour controler tout ca ?
Merci
A +
0

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

Posez votre question
alf666666 Messages postés 46 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 16 avril 2008
22 juil. 2005 à 09:25
Hello,
Encore moi, et oui....dans ton code tu mets (#Evaluate(cle_unique + 1)#>)
Le Evaluate correspond à quoi exactement ?
Merci
0
cs_Metrox Messages postés 267 Date d'inscription jeudi 19 septembre 2002 Statut Membre Dernière intervention 8 septembre 2013
22 juil. 2005 à 19:56
En fait, j'ai jamais de doublon, pck je teste pour savoir si par
exemple, au niveau du login, il n'est pas déjà pris ... de plus, j'ai
une clé primaire que j'ai appelée ID et qui est autoincrémentée...



Au niveau des noms, je n'ai que faire de savoir s'il y a un seul john
matrox ou s'il y en a dix... A partir du moment où les logins et
e-mails sont différents...


Le evaluate permet de faire un calcul par exemple #evaluate(element1 (+,-,* ou /) element2)#



M@x ---> Go on www.metrox.be
0
alf666666 Messages postés 46 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 16 avril 2008
22 juil. 2005 à 20:58
Merci pour tes réponses, mais c'est exactement ce qu'il me faut le fait d'incrémenter ta clé primaire. Comment tu le fais pour l'incrémenter ? tu le fais en code ou bien directement dans ta bd ou tu aurais une fonction spéciale ?
Salutations
Alain
0
cs_Metrox Messages postés 267 Date d'inscription jeudi 19 septembre 2002 Statut Membre Dernière intervention 8 septembre 2013
22 juil. 2005 à 22:24
C'est une fonction dans la db :)



Perso, j'utilise une db access par facilité premièrement et par portabilité (je transfère souvent)...

Il me suffit de choisir le champ NuméroAuto et de lui dire de l'incrémenter...



Bonne chance pour la suite, et si ta des questions, on peut faire ca
par mail si tu veux...Ca ne m'embete pas du tout, tant que ca peut
aider!



max@metrox.be




M@x ---> Go on www.metrox.be
0
alf666666 Messages postés 46 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 16 avril 2008
22 juil. 2005 à 23:48
Merci bcp pour ta proposition et ta disponibilité.
Salutations
Alain
alf66@bluewin.ch
0
cs_bastoun Messages postés 164 Date d'inscription dimanche 1 octobre 2000 Statut Membre Dernière intervention 23 mars 2007 1
23 juil. 2005 à 02:34
Pour l'auto incrément dans mySQL, :



Dans phpMyadmin, tu édites ta table :

Ton champ doit être de type numérique entier (par exemple INT). Tu ne
met pas de longueur de champ (enfin tu peux, mais une longueur sera
définie par défaut). Tu n'autorise pas la valeur null( NOT NULL), et en
Extra tu indique AutoIncrément. Tu coche également clé primaire. Tu ne
mets rien en valeur par défaut. tu laisse les autres options vide...
voilà



D'ailleurs je ne vois pas où tu dois indiquer 1 en tant qu'incrément ???



Si tu veux une copie d'écran pour l'exemple, je peux éventuellemnt t'en
envoyer une... mais bon les infos ci dessus devraient suffir



sinon un exemple de création de table (nommée 'test') en sql pour
mysql, avec un champ id cle primaire autoincrémenté et un champ nom

CREATE TABLE `test` (
`id` INT NOT NULL AUTO_INCREMENT ,
`nom` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `id` )
);
0
alf666666 Messages postés 46 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 16 avril 2008
23 juil. 2005 à 09:32
Merci pour les infos.. c'est bien ce que j'avais déja fait au niveau de la BD.. je pense que l'incrémentation doit surement fonctionner à présent et le problème doit venir d'ailleurs.
J'ai repris ton code pour faire les tests en adaptant.. et ca me donne ce message d'erreur :
You have attempted to dereference a scalar variable of type class java.lang.String as a structure with members.

Please try the following:
Enable Robust Exception Information to provide greater detail about the source of errors. In the Administrator, click Debugging & Logging > Debugging Settings, and select the Robust Exception Information option.
Check the ColdFusion documentation to verify that you are using the correct syntax.
Search the Knowledge Base to find a solution to your problem.

Browser Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; fr) Opera 8.01
Remote Address 127.0.0.1
Referrer http://127.0.0.1:8500/web/login/action.cfm
Date/Time 23-juil.-05 09:25 AM


Tu serais me dire la signification de ce message ?
Sinon je peux t'envoyer sur info@matrox.be ?
0
cs_bastoun Messages postés 164 Date d'inscription dimanche 1 octobre 2000 Statut Membre Dernière intervention 23 mars 2007 1
23 juil. 2005 à 11:07
bah je sais pas à qui tu répond alf, mais si c'est au message
précédent... ça sert à rien d'envoyr un mail sur info@matrox.be vu que
c'est moi(bastoun) qui te répond (et pas matrox)... :D



Bon, là clairement, CF t'indique que tu as une erreur dans ton code et
que tu as essayé d'utilisé une variable de type chaine en tant que type
structure.



Par contre si tu veux plus de détails sur ton erreur, il faut que tu te
rende dans ton admin CF (127.0.0.1:8500/cfide/administrator/index.cfm),
que tu saisisse le mot de passe que tu as attribué lors de l'install et
qu'ensuite tu te rende dans la partie Debugging & Logging > Debugging Settings

là tu coche la case
Enable Robust Exception Information

Eventuellement si tu veux que les infos de debug apparaissent en
bas de chaque page, même celles qui fonctionnent parfaitement (ce qui
est trés utile en cours de dev), coche la case
Enable Debugging(ensuite coche tout ce que tu souhaite avoir comme info de debug)



CF t'affichera ainsi plus de détail sur ton erreur, comme par
exemple le numéro de ligne supposée de l'erreur avec mise en gras de la
ligne, et peut être quelques détails supplémentaires



Par contre je veux bien que tu poste ton code ici, ça permettra à plus de personnes de réagir
0
alf666666 Messages postés 46 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 16 avril 2008
24 juil. 2005 à 09:33
Hello,
Merci pour les infos sur le debuging.... ca m'a monstre bien aidé, j'ai pu voir exactement à quelle ligne, j'avais le soucis.
J'ai du supprimer la ligne que matrox avait mise dans son code :
<cfif login.RecordCount NEQ 0> "tu as essayé d'utilisé une variable de type chaine en tant que type structure" (bastoun)

Est ce que je dois mettre le login dans ma BD non pas en char, mais dans un autre type ?
Merci encore à tous
0
alf666666 Messages postés 46 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 16 avril 2008
24 juil. 2005 à 11:26
hello,
Pour donner la réponse pour finir pourquoi j'arrivais pas à autoincrémenter ma clé primaire, il s'agissait simplement d'enlever la valeur 0 dans la case Default** (laisser vide), et surtout de vider toutes les données se trouvant dans ma table, et ca a fonctionné.
Encore une petite question par rapport cette fois ci à ma clé étrangère que j'ai dans mes tables, est ce qu'il y a une manière de dire, cette clé étrangère correspond à cette table ? Je l'ai fait à la base en créant mes tables en code SQL, faut il encore faire qqch de plus dans MySql ?
Merci
0
cs_bastoun Messages postés 164 Date d'inscription dimanche 1 octobre 2000 Statut Membre Dernière intervention 23 mars 2007 1
10 août 2005 à 22:23
hello...

bon je répond enfin, puisque je réviens seulement de vacances...

pour indiquer tes clé étrangères dans tes structures, il faut que tes
tables soient dans un type qui le supporte (innodb, berkeleyDB... mais
le type par défaut myisam ne les supporte pas).

Ensuite il faut ajouter les contraintes (par.. ALTER TALBE .... ADD CONSTRAINT....FOREIGN KEY.... REFERENCES...)



voilà... si je répond à coté de la plaque dis le moi... c'est que j'ai
pas compris la question (dur après les vacances de se remettre dans le
bain !!!)
0