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
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 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
5
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
5
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
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 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
5
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
4719
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
1 février 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