Probleme sql

Signaler
Messages postés
116
Date d'inscription
mercredi 22 novembre 2000
Statut
Membre
Dernière intervention
4 août 2010
-
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
-
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

Messages postés
292
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
18 décembre 2014
3
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
Messages postés
116
Date d'inscription
mercredi 22 novembre 2000
Statut
Membre
Dernière intervention
4 août 2010
1
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.
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
7
Bonjour,
Et Qu'est-ce qu'il y a Line 10 Char 33 ?

Dom
Messages postés
116
Date d'inscription
mercredi 22 novembre 2000
Statut
Membre
Dernière intervention
4 août 2010
1
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 .
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
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
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
7
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
Messages postés
292
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
18 décembre 2014
3
Bonjour,

autre chose, si DM.IBQuery3.SQL se termine par WHERE, le premier ADD ne doit pas avoir de AND.
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
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
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
7
Ou tu rajoute un memo sur ta form et avant le open , tu fais:
Memo.text:=DM.ibq_adherant.sql.text.
Dom
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
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