|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Étudiant Inscription : décembre 2010 Messages : 45 ![]() |
Bonjour à tous,
je suis en première année de cycle préparatoire intégré en école d'informatique et nous voilà enfin confrontés à nous même, à savoir un projet personnel. Celui-ci consiste pour ma part à créer un logiciel pour gérer les notes des élèves dans un collège (plusieurs classes, niveaux, matières, élèves..) Modèle Conceptel de Données et Modèle Logique de Données étant fait, je m'attaque à la création de tables, des requêtes et des formulaires. J'ai donc : T_ELEVE -> R_ELEVE -> F_ELEVE T_MATIERE -> R_MATIERE -> F_MATIERE T_CLASSE -> R_CLASSE -> F_CLASSE T_INFO_CONTROLE -> R_INFO_CONTROLE -> F_INFO_CONTROLE et T_ETUDIER -> R_ETUDIER - F_ETUDIER Celle-ci est une relation ternaire qui regroupe l'élève (nom, prenom), la matière (nom) et les infos controle (date, coef) Dans la cette table, je dois donc rentrer 700notes (j'ai 10matières, 70 élèves répartis en différentes classes et differents niveaux) J'ai donc mis les 3 ID eleve,info,matiere dans T_etudier pour les mettre en Clé primaire. Je cherche donc un moyen de rentrer mes données plus facilement par le biais de copier-coller... Le problème est que je ne peux coller des données que sur des lignes déjà modifiables (le reste étant grisé et attendant que je clic dessus et que je remplisse a la main les cases) Comment faire? Pour l'instant je suis obligé de me tapper toutes les lignes une par une à la main pour completer les cases des differents ID (et en faisant attention à ce que ce soit correct vis a vis de la table en question car le numero que je met pour un élève doit exister dans la table T_eleve bref un casse-tête) Je ne sais pas si je me fais comprendre, si besoin je peux réexpliquer ou vous éclaircir, voir vous envoyer mon projet si besoin. D'avance merci car là je suis vraiment bloqué :/ Et joyeux noël ! |
|
|
00
|
|
|
#2 | ||
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 458 ![]() |
Tu entres des données réelles ou fictives ?
Si c'est 'fictives' pourquoi ne pas faire un petit bout de VBA avec 3 boucles imbriquées qui va compléter tes tables d'associations en fonction des éléments des tables de bases ? Un truc du genre (attention ce code est incomplet et non fonctionnel, c'est juste pour donner une idée) : Code :
Je te conseille le format 2 colonnes : Id;Libelle sans masquer le ID ce qui fait que tu vois ce qu'il y a réellement dans ta ton champ. C'est plus pratique pour le débuggage. A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Étudiant Inscription : décembre 2010 Messages : 45 ![]() |
Oula ! euh je dois t'avouer que je suis un tout nouvel utilisateur d'Access et je vois pas du tout comment faire ce que tu m'annonce ici :S
(Mes données sont effectivement fictives) |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Diem VOVivre Inscription : avril 2006 Messages : 2 644 ![]() |
salut marot_r
ex: remplissage de 700 lignes dans la table tableNote(id_eleve:num, note:num) à partir d'access: alt+f11 => editeur vb ctrl+g => fenêtre exécution code: Code :
docmd.setwarnings false:for i=1 to 700:docmd.RunSQL "insert into tableNote ([id_eleve],[note]) values (int(rnd()*70),int(rnd()*20))":next joyeux noël ! |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Étudiant Inscription : décembre 2010 Messages : 45 ![]() |
bonjour à toi vodiem !
premiere fois que j'utilise l'editeur VB je sais pas trop comment m'y retrouver.. ALT F11 -> ctrl+g fait. Je marque ce code où ? Code :
docmd.setwarnings false:for i=1 to 700:docmd.RunSQL "insert into tableNote ([ID_ELEVE],[ID_MATIERE],[ID_INFO_CONTROLE],[NOTES_ETUDIER]) values (int(rnd()*70),int(rnd()*20))":next il me met alors dans la fenetre générale : Je marque quoi entre les 2? D'avance merci, et désolé je suis vraiment novice :S |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() Jacques THERYCBPDI(Congés Bien Payés/Durée Indéterminée) Inscription : janvier 2006 Messages : 3 111 ![]() |
Bonsoir,
Entre "Sub Test" et "End Sub" vous collez le code qui vous a été communiqué. |
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Étudiant Inscription : décembre 2010 Messages : 45 ![]() |
Oh, autant pour moi.
En exécutant, j'obtiens : "Erreur d'exécution '3346': Le nombre de valeurs de la requête doit coïncider avec le nombre de champs destination." PS: le déboguer me souligne en jaune : Code :
docmd.setwarnings false:for i=1 to 700:docmd.RunSQL "insert into tableNOTES_ETUDIER ([ID_ELEVE],[ID_MATIERE],[ID_INFO_CONTROLE],[NOTES_ETUDIER]) values (int(rnd()*70),int(rnd()*20))":next |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Diem VOVivre Inscription : avril 2006 Messages : 2 644 ![]() |
salut jacques_jean,
JAG747 tu peux aussi taper le code directement dans la fenêtre d'exécution et valider pour ne pas avoir à stocker dans un module. en principe on vérifie que l'exemple fonctionne avant de modifier le code qd on maitrise pas. ;P ensuite, apprend à connaitre ta meilleure amie et compagne de tes prochaines nuits : <F1> pour info: setwarnings : évite le message d'alerte d'insertion à chaque ajout for ... next : boucle runsql : exécute une sql insert into : ajout enregistrement rnd() valeur décimale aléatoire compris entre 0 et 1, rnd()*20 valeur entre 0 et 20, int() renvoie la valeur entière ton pb c'est de faire correspondre le nombre de champs avec le nombre de valeur à insérer (en tenant compte de leur type respectif). cf <F1> "INSERT INTO" |
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Étudiant Inscription : décembre 2010 Messages : 45 ![]() |
Merci beaucoup pour ces précisions vodiem !
et effectivement, je n'y avais même pas pensé à <F1> :S Je vous joint une image de ma table avec les differentes caractéristiques. 1. lorsque je met ce code : Code :
DoCmd.SetWarnings False: For i = 1 To 700: DoCmd.RunSQL "insert into tableT_ETUDIER ([ID_ELEVE],[ID_MATIERE],[ID_INFO_CONTROLE],[NOTES_ETUDIER]) values (int(rnd()*70),int(rnd()*20))": Next 2. il y a une ou deux choses dans le code que je ne comprends pas (désolé d'être lourd). le i = 1 To 700 me permets de créer 700 nouveaux enregistrements. mais les int(rnd()*70) et int(rnd()*20) je vois pas.. le 70 et 20 correspondent à quoi? à une valeur à ne pas dépasser? du style pas plus de 20/20 ? Je vois pas du tout.. c'est peut-être cela qui bloque.. Merci ! Voilà ma table en questions et les caractéristiques peut-être à prendre en compte :
|
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Diem VOVivre Inscription : avril 2006 Messages : 2 644 ![]() |
Code SQL :
INSERT INTO tableNote ([id_eleve],[note]) VALUES (int(rnd()*70),int(rnd()*20)) insert dans la table tableNote pour les champs [id_eleve] et [note] les valeurs respectives pour ces champs : un nombre entier aléatoire compris entre 0 et 70 (pour id_eleve) et 0-20 (pour note). arrives tu à comprendre ce qui te manque dans : Code SQL :
INSERT INTO tableT_ETUDIER ([ID_ELEVE],[ID_MATIERE],[ID_INFO_CONTROLE],[NOTES_ETUDIER]) VALUES (int(rnd()*70),int(rnd()*20)) ps: > pour id_eleve vu que tu as des restrictions et que c'est occasionnel, le plus simple c'est d'ajouter plus d'enregistrement et de supprimer ensuite les enregistrements faisant parti de la plage d'exception. > pour les notes à 0.5 près tu peux prendre une nombre aléatoire sur 40 divisé par 2. es ce plus clair ? |
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Étudiant Inscription : décembre 2010 Messages : 45 ![]() |
D'accord !!
Je comprends mieux, il me manquait des valeurs de champs ! Je devrais donc avoir : Code :
INSERT INTO tableT_ETUDIER ([ID_ELEVE],[ID_MATIERE],[ID_INFO_CONTROLE],[NOTES_ETUDIER]) VALUES (int(rnd()*95),int(rnd()*10),int(rnd()*30),int(rnd()*40):2) Pour le 40/2 je suis pas sûr sûr d'avoir bien positionné ma division Pour ce qui est des élèves, Comment puis-je modifier un ID? Je pense pas que cela soit possible :/ Si je fais "ajouter un nouvel enregistrement" je ne peux choisir l'ID 16 (ou 51,52,53...) Comment puis-je les rajouter puisqu'à present il ne me propose que le 96è puis 97è etc. EDIT : Bon j'ai testé avec ce code : Code :
DoCmd.SetWarnings False: For i = 1 To 700: DoCmd.RunSQL "insert into T_ETUDIER ([ID_ELEVE],[ID_MATIERE],[ID_INFO_CONTROLE],[NOTES_ETUDIER]) VALUES (int(rnd()*95),int(rnd()*10),int(rnd()*30),int(rnd()*20))": Next Le seul truc bizarre c'est qu'il ne m'en met que 519 et non 700 comme voulu |
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé
![]() Diem VOVivre Inscription : avril 2006 Messages : 2 644 ![]() |
Citation:
Citation:
tu as "SetWarnings False" ce qui empêche les messages d'alertes et d'erreurs. si les id_eleve sont lié à une liste restreinte où une contrainte dans la saisie effectivement tu n'auras pas de message d'erreur et donc moins d'enregistrement que prévu. pour les notes: int(rnd()*40)/2 bravo, bon courage pour la suite. |
||
|
|
00
|
|
|
#13 |
|
Invité régulier
![]() Étudiant Inscription : décembre 2010 Messages : 45 ![]() |
Merci beaucoup pour ta patience et toutes tes explications vodiem, me voilà débarrassé d'un sacré fardeau qui finalement n'était pas si difficile que cela
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com