|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2003 Messages : 49 ![]() |
Salut !
J'ai un petit problème pour concevoir ma requête afin de compléter la propriété SelectSQL de mon IBDataSet Je souhaite effectuer des insertions dans mon entité ABSENCE, qui est relié directement à une autre entité SALARIE ainsi qu'a une entité TYPE_ABS (ici par l'intermédaire de l'association DE). Mes entités sont les suivantes: L'association DE: Au niveau physique, ABSENCE reçoit id_sal en clef étrangère et DE devient une table avec num_enreg et id_abs en clef étrangère. Comment écrire ma requête pour pouvoir faire des insertions dans ma tables ABSENCE? ex: insérer une absence le 10/12/02 (date_deb) de Mr BOB (id_sal) pour une raison de maladie (id_abs) J'ai écris déjà ceci: Citation:
Quelqu'un aurait une idée pour écrire une requête me permettant de lier mes 3 tables (ABSENCE, SALARIE, et TYPE_ABSENCE) afin d'harmoniser mes insertions. Merci d'avance Seb |
|
|
|
00
|
|
|
#2 | ||
|
Membre régulier
![]() Inscription : avril 2002 Messages : 70 ![]() |
Oui, tu dois passer par DE (enfin, je ne connais pas d'autre moyen
Code :
LE dernier join TYPE_ABSENCE, n'est pas obligatoire vu que tu ne fais pas de sélection dans cette table. Au lieu de faire ça, tu peux faire aussi une vue. |
||
|
|
00
|
|
|
#3 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2003 Messages : 49 ![]() |
Dihap a dit:
Citation:
Citation:
Citation:
Code :
DM.IB_ABS2.FieldByName('ID_ABS').AsInteger := 3; Citation:
Je suis allé jeter un oeil sur le code généré automatiquement par IBDataSet ('Editeur d'ensemble de données...') qui permet par l'intermédiare de la touche 'Générer le SQL' d'avoir les requête appropriées pour l'insertion, les modif...etc Mais cela ne m'inspire pas trop Une idée Merci Seb |
||||
|
|
00
|
|
|
#4 | |||
|
Membre régulier
![]() Inscription : avril 2002 Messages : 70 ![]() |
Citation:
Pour la vue, tu fais un create view et tu inscris ton select que tu as écrit. Quand tu fais une requête, au lieu d'écrire tous tes join, tu fais Code :
Tu peux utiliser le générateur SQL, je n'ai jamais eu de problème avec ce générateur. Pour ton erreur, c'est que ton champs ne s'est pas rajouté dans ton dataset. Vérifies que ton champ fait partie de ton dataset. C'est possible aussi, que ce soit Delphi qui fait des erreurs. Juste à le fermer et à le réouvrir. |
|||
|
|
00
|
|
|
#5 | ||||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2003 Messages : 49 ![]() |
Merci pour tout ces renseignements Dihap, j'en apprends touts les jours
Citation:
Par contre je suis pas bien sur d'avoir compris ce que tu entends par "Vérifies que ton champ fait partie de ton dataset"; tu veux dire, contrôler dans la requête SQL ? Si c'est le cas, il apparait ici: Citation:
Code :
Je continue à chercher... Merci Seb |
||||
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() Inscription : avril 2002 Messages : 70 ![]() |
Non, pas dans ta requête SQL
Si tu double-clique sur ton dataset, tu vas avoir une fenêtre avec les champs de ta requête. Vérifie que id-abs est bien là. Si tu n'as jamais été là, tu n'auras aucun champs et c'est correct. Après réflexion.... Tu ne sélectionnes pas ton champs id_abs dans ta requête... C'est normal que tu aies une erreur |
|
|
00
|
|
|
#7 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2003 Messages : 49 ![]() |
Citation:
Citation:
Code :
INNER JOIN TYPE_ABSENCE ta ON (ta.id_abs = DE.id_abs)
|
||
|
|
00
|
|
|
#8 | ||
|
Membre régulier
![]() Inscription : avril 2002 Messages : 70 ![]() |
Décourage toi pas
Non ta requête est bonne, Mais Code :
Ne t'inquiète pas pour les champs de ton datatset. S'il n'y a aucun champ, cela veut dire que tous tes champs sont pris en compte, donc c'est ok. |
||
|
|
00
|
|
|
#9 | ||||||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2003 Messages : 49 ![]() |
Citation:
Citation:
Citation:
Si je regénère le SQL (par 'Editeur d'ensemble de données...') en sélectionnant 'Valeur du DataSet'; à l'exécution j'ai ceci: Citation:
J'utilise le code suivant: Code :
Mon prob vient-il de ma base ou de mon code ?
|
||||||
|
|
00
|
|
|
#10 | |||||
|
Membre régulier
![]() Inscription : avril 2002 Messages : 70 ![]() |
Ok, si tu utilsies le générateur de code SQl, vérifie que ton champ id_abs est bien dans la liste avant de générer le code. On sait jamais.
Citation:
Tu peux mettre ton code plus clair, c'est plus facile à corriger Code :
Si ton dataset sert seulement pour faire des ajouts, je te conseille fortement TIBSql. Quelque chose du genre. Code :
|
|||||
|
|
00
|
|
|
#11 | |||||||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2003 Messages : 49 ![]() |
Citation:
Citation:
qui pourrait poser problème... Le truc, c'est que j'utilise cette ligne pour faire le lien entre ABSENCE et TYPE_ABSENCE, je n'insère rien dans id_abs. Mais comme je fais la même manip pour id_sal: Qui marche et qui sert aussi de lien, je vois pas ou est le souci ![]() Citation:
Citation:
.Citation:
Du coup, ça explique mon ds_state := 'dsbrowse', c'est une variable que j'initialise au départ et qui me sert par la suite à lancer tel ou tel procédure (ajout, suppression, modif) en fonction de son état (dsbrowse, dsinsert, dsedit). Citation:
J'ai testé ton code et j'ai un conflit à l'exécution: Citation:
A+ |
|||||||
|
|
00
|
|
|
#12 | ||
|
Membre régulier
![]() Inscription : avril 2002 Messages : 70 ![]() |
D'habitude, j'utilise un IBDataset avec les DBgrids et TIBSql pour mes isnert, delete, update.
Code :
Essais Code :
FieldByName('DATE_HEURE_FIN').asdatetime := strtodatetime('12/05/03 08:00'); |
||
|
|
00
|
|
|
#13 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2003 Messages : 49 ![]() |
Citation:
Citation:
Pour ma part, je n'ai pas vraiment de préférence (du moment que ça marche Je vais faire les tests et je vais voir ce que ça donne .
|
||
|
|
00
|
|
|
#14 |
|
Membre régulier
![]() Inscription : avril 2002 Messages : 70 ![]() |
Oui c'est ça, j'utilise seulement le IBDataset pour le DBGrid, à moins de faire une modification à partir du DBGrid en utilisant les méthodes (edit,insert,post)
J'utilise le TIBSql pour les autres traitements qui ne sont pas en lien direct avec le DBGrid. Ce n'est peut-être pas la meilleur façon, mais c'est comme ça que je fais. |
|
|
00
|
|
|
#15 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2003 Messages : 49 ![]() |
Ok j'ai compris, c'est pas plus mal, j'ai d'ailleurs essayé de mettre en place un TIBSql pour l'insertion d'absence dans ma Bdd mais j'ai toujours la même erreur
Je me suis renseigné et apparemment, ça serait plutôt une erreur de code mais ça m'inspire pas + que ça... J'ai fais ceci: Code :
A+ Seb |
||
|
|
00
|
|
|
#16 |
|
Membre régulier
![]() Inscription : avril 2002 Messages : 70 ![]() |
Code :
ADD('Insert into ABSENCE (DATE_HEURE_DEBUT, DATE_HEURE_FIN, ID_SAL, NUM_ENREGISTREMENT, ID_ABS) values(:DATE_HEURE_DEBUT, :DATE_HEURE_FIN, :ID_SAL, :NUM_ENREGISTREMENT, :ID_ABS)'); |
|
|
00
|
|
|
#17 | |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2003 Messages : 49 ![]() |
Citation:
.Par contre, sous Interbase comment on fait une requête permettant de saisir une date ? J'ai mon champs DATE_HEURE_DEBUT en format DATE et le champs DATE_HEURE_FIN en format TIMESTAMP, je fais ceci: Code :
ADD('Insert into ABSENCE (DATE_HEURE_DEBUT, DATE_HEURE_FIN, ID_SAL, NUM_ENREGISTREMENT, ID_ABS) values('2003/05/03', '12/05/03 08:00', 3, 62, 4)'); Merci d'avance |
|
|
|
00
|
|
|
#18 | ||
|
Membre régulier
![]() Inscription : avril 2002 Messages : 70 ![]() |
Tout le monde fait des erreurs, alors il n'y a pas de problème.
Pour les dates, tu dois respecter le format des dates d'Interbase. Aussi, tu as un problèmes dans ton insert. Il te manque des apostrophes. Code :
Tes dates tu les prends où au juste ? D'un TEDit ? Si jamais tu veux avoir la date actuelle de l'OS, utilise la fct now. Tu peux aussi faire Çava te permettre de formatter la date selon que tu veux. par exemple pour configurer le format de la date. Tu peux regarder ce post aussi http://www.developpez.net/forums/viewtopic.php?t=109554 |
||
|
|
00
|
|
|
#19 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2003 Messages : 49 ![]() |
Salut!
Merci Dihap pour toutes ces informations, cela va me permettre de faire des tests pour la saisie de mes absences J'ai mis un peu de temps à répondre car en ce moment je suis très occupé au boulot. J'ai quand même eut le temps de regarder ce problème de Bdd et après réflexion (on s'y est mis à 2 J'ai donc supprimé la table DE et rajouté quelques champs, c'est de suite plus abordable (fini les messages d'erreurs dans tous les sens). Enfin, c'est loin d'être fini... Je te remercie beaucoup pour ton aide, je te suis reconnaissant de toutes les solutions que tu m'as apporté .A bientôt. Seb |
|
|
00
|
|
|
#20 |
|
Membre régulier
![]() Inscription : avril 2002 Messages : 70 ![]() |
Fait plaisir
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com