Probleme sql

khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 - 24 juin 2007 à 16:49
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 26 juin 2007 à 22:23
bonjour quelcun peut me dir qu'est ce qui cloche avec cette procedure :

procedure TF_Adherant.BitBtn2Click(Sender: TObject);
begin
DM.IBQ_Adherant.Close;
DM.IBQ_Adherant.SQL.Clear;
DM.IBQ_Adherant.SQL := DM.IBQuery3.SQL;
DM.IBQ_Adherant.SQL.Add ('and Adherant.date_res_liv1 > date');
DM.IBQ_Adherant.SQL.Add ('OR Adherant.date_res_liv2 > date');
DM.IBQ_Adherant.SQL.Add('or Adherant.date_res_liv3 > date');
DM.IBQ_Adherant.SQL.Add('or Adherant.date_res_mem1 > date');
DM.IBQ_Adherant.SQL.Add('or Adherant.date_res_mem2 > date');
DM.IBQ_Adherant.SQL.Add('or Adherant.date_res_per1 > date');
DM.IBQ_Adherant.SQL.Add('or Adherant.date_res_per2 > date');
DM.IBQ_Adherant.Open;
end;


end.
" j'ai un message d'erreur "
merci

10 réponses

Oniria Messages postés 292 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 18 décembre 2014 3
24 juin 2007 à 19:51
Bonjour,

A quoi est egal DM.IBQuery3.SQL ? sinon, déja, les conditions doivent être écritent :

DM.IBQ_Adherant.SQL.Add ('and (Adherant.date_res_liv1 > date) ');
DM.IBQ_Adherant.SQL.Add ('OR (Adherant.date_res_liv2 > date) ');
DM.IBQ_Adherant.SQL.Add('or (Adherant.date_res_liv3 > date) ');
DM.IBQ_Adherant.SQL.Add('or (Adherant.date_res_mem1 > date) ');
DM.IBQ_Adherant.SQL.Add('or (Adherant.date_res_mem2 > date) ');
DM.IBQ_Adherant.SQL.Add('or (Adherant.date_res_per1 > date) ');
DM.IBQ_Adherant.SQL.Add('or (Adherant.date_res_per2 > date) ');

Ensuite, suivant que tu veuilles faire un SELECT une autre fonction, on utilise Open ou ExecSQL. Open est fait pour SELECT et ExecSQL pour les autres (ar ex : DELETE ...)

Sinon, peux-tu dire quel est ton message d'erreur ?

Bon courage

Oniria
0
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 1
24 juin 2007 à 20:40
Bonjour et merci oniria pour vootre répense


mais le probleme persiste ,

DM.IBQuery3.SQL  est une requete de selection  avec un where à la fin 

le message d'erreur actuel " le projet à provoquer une claased'exception EIBInterbaseError avec le message dynamique sql error
SQL error code = -104Token unknown -line 10 char 33
)'.processus stopé."

merci.
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
25 juin 2007 à 00:14
Bonjour,
Et Qu'est-ce qu'il y a Line 10 Char 33 ?

Dom
0
khawarizm Messages postés 116 Date d'inscription mercredi 22 novembre 2000 Statut Membre Dernière intervention 4 août 2010 1
25 juin 2007 à 00:39
bonjour ;
justement il n'ya rien de particulier " From tableAdherants" c tout .
et en plus l'SQL sans les add marche tres bien . alors le probleme est dans les add
je n'arive pas  trouver l'erreur .
0

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

Posez votre question
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
25 juin 2007 à 09:15
Bonjour,

Attention avec les instructions OR et AND en SQL !!
Ce n'est pas comme avec Delphi, il faut tout développer

Un exemple : 

  SQL.Add ( 'SELECT Numero') ;
  SQL.Add ( 'FROM MaTable') ;
  SQL.Add ( 'WHERE ( (A=0) AND (B=0) AND (N>=2000) AND ') ;
  SQL.Add ( '        ( (Valeur1<>0) OR (Valeur2<>0) OR (Valeur3<>0) ) ') ;
  SQL.Add ( '      )') ;

Cela ne sera pas accepté par le SQL. Il faudra ecrire la requete comme suit : 

  SQL.Add ( 'SELECT Numero') ;
  SQL.Add ( 'FROM MaTable') ;
  SQL.Add ( 'WHERE ( (A=0) AND (B=0) AND (N>=2000) AND (Valeur1<>0) OR ') ;
  SQL.Add ( '        (A=0) AND (B=0) AND (N>=2000) AND (Valeur2<>0) OR ') ;
  SQL.Add ( '        (A=0) AND (B=0) AND (N>=2000) AND (Valeur3<>0)    ') ;
  SQL.Add ( '      )') ;

Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
25 juin 2007 à 09:22
De plus, attention aux espaces :
DM.IBQ_Adherant.SQL.Add ('and Adherant.date_res_liv1 > date');
DM.IBQ_Adherant.SQL.Add ('OR Adherant.date_res_liv2 > date');
DM.IBQ_Adherant.SQL.Add('or Adherant.date_res_liv3 > date');
DM.IBQ_Adherant.SQL.Add('or Adherant.date_res_mem1 > date');
DM.IBQ_Adherant.SQL.Add('or Adherant.date_res_mem2 > date');
DM.IBQ_Adherant.SQL.Add('or Adherant.date_res_per1 > date');
DM.IBQ_Adherant.SQL.Add('or Adherant.date_res_per2 > date');
doit être
DM.IBQ_Adherant.SQL.Add (' and Adherant.date_res_liv1 > date');
DM.IBQ_Adherant.SQL.Add (' OR Adherant.date_res_liv2 > date');
DM.IBQ_Adherant.SQL.Add(' or Adherant.date_res_liv3 > date');
DM.IBQ_Adherant.SQL.Add(' or Adherant.date_res_mem1 > date');
DM.IBQ_Adherant.SQL.Add(' or Adherant.date_res_mem2 > date');
DM.IBQ_Adherant.SQL.Add(' or Adherant.date_res_per1 > date');
DM.IBQ_Adherant.SQL.Add(' or Adherant.date_res_per2 > date');
Dom
0
Oniria Messages postés 292 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 18 décembre 2014 3
25 juin 2007 à 09:59
Bonjour,

autre chose, si DM.IBQuery3.SQL se termine par WHERE, le premier ADD ne doit pas avoir de AND.
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
25 juin 2007 à 19:28
petit trux imparable pour vérifier une requête :

Mettre un point d'arrêt sur sur l'execSQL ou l'OPEN, puis CTRL F7 et taper
DM.IBQ_Adherant.SQL[0] + DM.IBQ_Adherant.SQL[1] +
DM.IBQ_Adherant.SQL[2] + etc etc. jusqu'au bout de l'affichage.

et sur Entrée, on visualise toute la requête.

et en général, on voit tout de suite d'où vient l'erreur.

@bientôt

cantador
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
26 juin 2007 à 10:02
Ou tu rajoute un memo sur ta form et avant le open , tu fais:
Memo.text:=DM.ibq_adherant.sql.text.
Dom
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
26 juin 2007 à 22:23
Oui khawarizm c'est tout à fait ça et tu n'as pas besoin d'introduire
le détail de ta requête DM.IBQuery3.SQL.

cantador
0
Rejoignez-nous