SQL... Probléme..

cmeme Messages postés 12 Date d'inscription jeudi 1 décembre 2005 Statut Membre Dernière intervention 15 décembre 2005 - 15 déc. 2005 à 13:05
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 18 févr. 2011 à 14:09
Salut





Voila j'ai deux tables la 1ere TABLE AUTEUR et la 2ème TABLE ECRIRE.
j'ai deux clefs primaire dans AUTEUR qui sont NOM_AUTEUR et
PRENOM_AUTEUR et dans la TABLE ECRIRE ce sont des clefs externe
(NOM_AUTEUR et PRENOM_AUTEUR) ce que j'aimerai savoir faire c'est
lorsque je modifie mes champs NOM_AUTEUR et PRENOM_AUTEUR dans la
Gestion Auteur que celle ci change NOM_AUTEUR et PRENOM_AUTEUR dans la
Gestion Ecrire également. J'ai deja un code pour modifier NOM_AUTEUR et
PRENOM_AUTEUR dans la gestion Auteur elle fonctionne mais elle modifie
pas les champs NOM_AUTEUR et PRENOM_AUTEUR dans la Gestion Ecrire.






Code:, ----
var

OldType,OldType1,OldType2,OldType3 :string; // Déclaration de variable

OldType4,OldType5 :string;

procedure TGes_Auteur.Modifier_AuteurClick(Sender: TObject);

begin
if (edit1.Text '')or (edit2.Text '')or (edit3.Text = '')or (edit4.Text='') then

begin

messagedlg('Veuillez sélectionner le champs à supprimer', mtWarning,[mbok],0);

end

else

with DataModule2.IBQuery_Auteur do

begin // Ici on modifie les champs sélectionner

SQL.Clear;

SQL.Add('Update AUTEUR set NOM_AUTEUR=:Nom_Auteur,
PRENOM_AUTEUR=:Prenom_Auteur, PSEUDONYME=:Pseudonyme,
NATIONALITE=:Nationalite');
SQL.Add('WHERE NOM_AUTEUR :OldType and PRENOM_AUTEUR
:OldType1 and PSEUDONYME = :OldType2 and NATIONALITE=:OldType3 ');

DataModule2.IBQuery_Auteur.ParamByName('Nom_Auteur').AsString:=edit1.text;

DataModule2.IBQuery_Auteur.ParamByName('OldType').AsString:=OldType;

DataModule2.IBQuery_Auteur.ParamByName('Prenom_Auteur').AsString:=edit2.text;

DataModule2.IBQuery_Auteur.ParamByName('OldType1').AsString:=OldType1;

DataModule2.IBQuery_Auteur.ParamByName('Pseudonyme').AsString:=edit3.text;

DataModule2.IBQuery_Auteur.ParamByName('OldType2').AsString:=OldType2;

DataModule2.IBQuery_Auteur.ParamByName('Nationalite').AsString:=edit4.text;

DataModule2.IBQuery_Auteur.ParamByName('OldType3').AsString:=OldType3;

ExecSQL;

end;

with DataModule2.IBQuery_Ecrire do

begin

SQL.Clear;

SQL.Add('Update ECRIRE set NOM_AUTEUR=:Nom_Auteur, PRENOM_AUTEUR=:Prenom_Auteur');
SQL.Add('WHERE NOM_AUTEUR :OldType4 and PRENOM_AUTEUR :OldType5 ');

DataModule2.IBQuery_Ecrire.ParamByName('Nom_Auteur').AsString:=Ges_Auteur.edit1.text;

DataModule2.IBQuery_Ecrire.ParamByName('OldType4').AsString:=OldType4;

DataModule2.IBQuery_Ecrire.ParamByName('Prenom_Auteur').AsString:=Ges_Auteur.edit2.text;

DataModule2.IBQuery_Ecrire.ParamByName('OldType5').AsString:=OldType5;

ExecSQL;

end;

Refresh_Auteur.Click; //Bouton qui rafraichi la table AUTEUR

edit1.Text:='';

edit2.text:='';

edit3.Text:='';

Ajouter_Auteur.Enabled:=true;

Modifier_Auteur.Enabled :=false;

Supprimer_Auteur.Enabled :=false;

Ges_Ecrire.Refresh_Ecrire.click;

end;







P.S: La requête fonctionne mais elle modifie pas les champs NOM_AUTEUR et PRENOM_AUTEUR dans la Gestion Ecrire

9 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
15 déc. 2005 à 21:29
Le mieux serait de poser la question sur le site approprié

<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
jace1975 Messages postés 81 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 12 octobre 2007 1
16 déc. 2005 à 23:41
Juste une remarque sur le choix de tes clés :

Que se passe-til quand il y deux auteurs ayant le même nom??

je te conseille de (re)voir les 3 fornes normales pour modèliser une base, l'idéal étant pour ton pb d'utiliser un identiefiant technique, genre numéro incrémental dans ta table de référence. de cette façcon tu récupère l'id dans tas première et tu fais un update par rapport à cet ID.
0
youcefhac Messages postés 1 Date d'inscription mercredi 9 février 2011 Statut Membre Dernière intervention 9 février 2011
9 févr. 2011 à 16:06
Je veut faire la recherche dans une table par un intervalle de date dans IBQuery j'ai utilise le code suivante mais ca marche pas
if RadioGroup1.ItemIndex=2 then
begin
DataModule1.IBQuery3.Close;
DataModule1.IBQuery3.SQL.Clear;
DataModule1.IBQuery3.SQL.add('select *');
DataModule1.IBQuery3.SQL.add('from DEMANDES');
DataModule1.IBQuery3.SQL.add('where (DEMANDES.DATE_D)>='+MaskEdit10.Text+' and (DEMANDES.DATE_D)< '+MaskEdit11.Text);
DataModule1.IBQuery3.Open;
end;
le message suivant apparu : expression d'évaluation insupportable
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
12 févr. 2011 à 16:27
Je soupçonne fortement un manque d'espace.
Juste sur la ligne contenant DataModule1.IBQuery3.Open, tu mets un point d'arrêt et tu inspectes alors la valeur de la propriété de DataModule1.IBQuery3.Open.Text.
Vérifies au passage que les dates soient correctement formatées (AAAA-MM-JJ).

May Delphi be with you

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0

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

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
14 févr. 2011 à 14:32
Bonjour,

@cmeme :
[i]
j'ai deux clefs primaire dans AUTEUR qui sont NOM_AUTEUR et PRENOM_AUTEUR/i

Tu ne peux pas voir deux clés primaires dans une table..
En revanche, tu peux créer une clé primaire qui encapsule deux champs.
Ainsi, chaque enregistrement est caractérisé par :
Auteur + prénom de l'auteur
cette formule peut fonctionner même si elle présente toutefois certains inconvénients..

cantador
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
15 févr. 2011 à 10:55
Bonjour,

Si j'ai bien compris, tu as un clé primaire (Nom+Prenom) dans la table AUTEUR et (Nom+Prenom) en clé étrangère dans ECRIRE.

Donc dans ce cas tu fait ça :

UPDATE ECRIRE
SET NOM_AUTEUR=:Nom_Auteur, PRENOM_AUTEUR=:Prenom_Auteur
WHERE NOM_AUTEUR = :OldType
AND PRENOM_AUTEUR = :OldType1

Il faut dans ta clause "where" tester les anciens critère de NOM et PRENOM.

Bonne journée.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
17 févr. 2011 à 17:31
Bonsoir,
si les liens entre les tables et Maj en cascade de choisis, cette opération est automatique.

cantador
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
18 févr. 2011 à 13:33
Oui Cantador, c'est vrai, mais on peut toujours attendre une réponse de Cmeme, sont message date de 2005 !!

C'est youcefhac qu'a posé une question en 2011 !

Youcefhac, Peut-tu nous dire avec quel SGBD tu travails ?
Y'a surement des fonctions de conversion et comparaison de date déja prévu dans le moteur de base.

Jean.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
18 févr. 2011 à 14:09
oh oui, bien vu !
je me suis fait piégé par youcefhac
en 6 ans, je pense qu'il a du trouver quelque chose..

mais pourqouoi avoir utilisé un post de 2005 ?

ah ça y est, j'ai compris..
c'est le moteur de tri de DelphiFr qui nous remonte des vieux crabes
cramoisis, rabougris qui sentent le moisis

Ya quelqu'un ?

cantador
0
Rejoignez-nous