|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Développeur informatique Inscription : mai 2006 Messages : 30 ![]() |
Bonjour
Dans un projet j'ai besoin d'utiliser l'héritage de table: Je reprends l'exemple des véhicules. J'ai un première table "VEHICULE" (No, Nom, Type) et des tables annexes "CAMION", "BUS", etc. qui contiennent des informations spécifques pour un type donné. Le champ No est clé primaire dans toutes les tables, et en plus clé étrangère dans les tables annexes. J'utilise essentiellement ces tables au travers d'un mapping objet et ca fonctionne correctement. Je voudrais pouvoir éditer, avec modification des champs, la liste des camions (par exemple) dans un DbGrid. Pour ça j'utilise un TIBDataSet avec un SelectSQL: SELECT R_VEHICULE.F_NO, F_DATIM, F_CONDUCT, F_PV, F_PTC FROM R_VEHICULE INNER JOIN R_CAMION ON R_VEHICULE.F_NO = R_CAMION.F_NO Mais comment écrire le ModifySQL !!!!! Bien sur j'ai essayé: - UPDATE ... JOIN - Mettre deux UPDATE - utiliser OnUpDateRecord, qui n'est appelé quand des circonstances que je n'ai pas réussi à élucider |
|
|
00
|
|
|
#2 | ||
|
Membre actif
![]() Inscription : juin 2004 Messages : 217 ![]() |
Salut
J'entends que tu veux changer seulement la table R_VEHICULE, non? Si est comme ça, tu dois cree une sentence SQL de update seulement de la table R_VEHICULE Code :
|
||
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Développeur informatique Inscription : mai 2006 Messages : 30 ![]() |
Non, je veux changer les deux tables.
L'utilisateur qui traite les camions voit une seule liste qui est une jointure de la table VEHICULE, qui contient le nom du conducteur, et de la table CAMION, qui contient le PV et le PTC. Et il peut modifier aussi bien le conducteur que le PTC Mais depuis, j'avance. J'essaye la combinaison suivante: 1° le ModifySQL ne contient que le UPDATE à propos de la table VEHICULE. 2° j'intercepte OnUpdateRecord où je fais la mise à jour de la table CAMION via un TIBSQL 3° avant de fermer le TIBDataSet je teste "IBDataSet.UpdatePending" et s'il est vrai j'appelle IBDataSet.ApplyUpdate. NOTE: tout pourrait être traité dans le UpdatePending mais si ModifySQL est vide, le DataSet est en ReadOnly !!! J'avance à tatons, rien dans la doc Interbase et rien non plus sur le net pour traiter ce cas là J'ai pu trouver que dans ce cas il fallait utiliser TIBDataSet au lieu de TIBQuery qui ne peut parait-il traiter qu'une seule table, mais sans plus de détail. |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
Citation:
c'est un problème Delphi
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
|
00
|
|
|
#5 | |
|
Futur Membre du Club
![]() Développeur informatique Inscription : mai 2006 Messages : 30 ![]() |
Citation:
UPDATE R_VEHICULE JOIN R_CAMION ON c'est bien un probleme Interbase. De même, créer une vue V_CAMION = R_VEHICULE JOIN R_CAMION qui serait en lecture seule Que la solution à mon problème soit dans Delphi ou Interbase ... |
|
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Inscription : juin 2004 Messages : 217 ![]() |
Salut
Si je ne me trompe pas, une requete avec "join" ne peut actualisé plus que 1 seule table et, dans Interbase/Firebird, je crois que les vues sont seulement de lecture Tu dois le faire en deux étapes et avec 2 TIBDataSet differents. Tu peux, par exemple, s'il veux modifier un champ de la table "secondaire", oubrir un nouveau form au moment d'essayer faire les changements sur ce champ. A+ |
|
|
00
|
|
|
#7 | ||
|
Futur Membre du Club
![]() Développeur informatique Inscription : mai 2006 Messages : 30 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
sauf que tu pouvais très bien tout faire dans ton "OnUpdateRecord"
tu ouvre une transaction tu fais tes deux updates (car il y a bien deux updates à faire) mais si ça t'amuse tu peux même le faire via une procédure stocké tu commit la transaction et basta et tes données sont cohérentes
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#9 | ||
|
Futur Membre du Club
![]() Développeur informatique Inscription : mai 2006 Messages : 30 ![]() |
Citation:
Citation:
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com