Requête paramétré

cs_cheggour Messages postés 20 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 24 novembre 2008 - 24 janv. 2008 à 10:49
cs_cheggour Messages postés 20 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 24 novembre 2008 - 28 janv. 2008 à 11:25
Bonjour tous,

je souhaite faire une requête SQL paramétré sur delphi de genre

select A,B,C from NomTable  where A=:ParamA and B=:ParamB   à
savoir que A et B de type Float et la valeur de ParamA='is null'  et
ParamB = 'is not null'

Merci de votre compréhension

16 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
24 janv. 2008 à 12:14
Query.sql.add('SELECT a,b,c FROM table WHERE a IS NULL AND b IS NOT NULL');

non ?

<hr size="2" width="100%" />
http://deefaze.gnomz.com
0
cs_cheggour Messages postés 20 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 24 novembre 2008
24 janv. 2008 à 15:51
Non c' pas ca ,
ParamA='is null'  et ParamB = 'is not null' 
c à d que VQuery.ParamByName('ParamA').value:='is Null'  et VQuery.ParamByName('ParamA').value:='is not Null'
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
24 janv. 2008 à 15:55
Tout dépend du sgbd sur lequel vous travaillez...

cantador
0
cs_cheggour Messages postés 20 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 24 novembre 2008
24 janv. 2008 à 16:34
je travaille sur SQL srever 2000
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
24 janv. 2008 à 18:14
La même requête écrite sous paradox, Firebird, access se présentera différemment :

"Non c' pas ca ,
ParamA='is null'  et ParamB = 'is not null' 
c à d que VQuery.ParamByName('ParamA').value:='is Null'  et VQuery.ParamByName('ParamA').value:='is not Null'"

Cà marche cette mouture sous SQL server, parce que tu poses une question et après tu donnes la réponse..
?
cantador
0
cs_cheggour Messages postés 20 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 24 novembre 2008
24 janv. 2008 à 19:11
au faite j'ai essayé ce code mais qui parrait normale et logique mais en fin de compte ça fonction pas
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
24 janv. 2008 à 19:38
cantador
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
24 janv. 2008 à 19:41
m'en doutais un peu..
même si SQL server c'est pas mon truc..
essaie comme çà :

VQuery.ParamByName('ParamA').value is Null;
VQuery.ParamByName('ParamB').value is not Null;






cantador
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
24 janv. 2008 à 23:31
Vous confondez deux choses.
1/- Si a et b sont du type float, comment voulez-vous que votre les compare à des chaines ?
2/- Si vous voulez tester si une valeur est nulle (ou non nulle), alors il faut employer une requête SQL adaptée comme l'a indiqué Foxi plus haut.
Cette dernière solution étant la meilleure et la plus efficace.

N'y aurait-il pas confusion entre paramétrée et requête construite dynamiquement ?

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/
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 janv. 2008 à 12:06
  with Query1.SQL do
  begin
    Clear;
    Add('SELECT * FROM EMPLOYE   ');
    Add('where (lastname='''' ) and (phoneext='''')  ');
    Query1.Open;
  end;

ou 
  with Query1.SQL do
  begin
    Clear;
    Add('SELECT * FROM EMPLOYE   ');
    Add('where (lastname is Null) and (phoneext is Null)  ');
    Query1.Open;
  end;

cantador
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 janv. 2008 à 17:02
Dans certains cas, il faut traiter les deux (fireBird) :


    with QEmploye.SQL do
      Clear;
      Add('WHERE ((ADRESSE = '') or (ADRESSE is Null)) AND  ');
      Add('((TEL = '') or (TEL is Null))   ');
      QEmploye.Open;
     end; 


pour être certains d'avoir toutes les écritures vides
répondant aux critères..




cantador
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
26 janv. 2008 à 09:15
Avec une telle requête, ça ne risque pas de fonctionner. Il doit manquer une ligne...

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/
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 janv. 2008 à 12:52
Oui, delphiprog, il manque un "begin":

 with QEmploye.SQL do
     begin
      Clear;
      Add('WHERE ((ADRESSE = '') or (ADRESSE is Null)) AND  ');
      Add('((TEL = '') or (TEL is Null))   ');
      QEmploye.Open;
     end; 


si tu pouvais de ton côté régler les posts vides sur le forum...

cantador
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
26 janv. 2008 à 16:45
Nan, c'est pas ça !
Tu effaces le contenu de ta requête (clear) et tu ne lui ajoutes que des clauses !!!
Arrghhh

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/
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 janv. 2008 à 18:25
ben oui, j'ai pas tout écrit; mais la difficulté c'est tjrs le WHERE !
si tu y tiens..


with QEmploye.SQL do
     begin
      Clear;
      Add('SELECT * FROM EMPLOYE ');
      Add('WHERE ((ADRESSE = '') or (ADRESSE is Null)) AND  ');
      Add('((TEL = '') or (TEL is Null))   ');
      QEmploye.Open;
     end; 

Toujours pas réglé le souci des posts vides..

cantador
0
cs_cheggour Messages postés 20 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 24 novembre 2008
28 janv. 2008 à 11:25
Salut tous,

merci pour votre aide mais vos réponses n'a rien avoir avec se que je souhaite
:

voila mon exemple la où j'ai un problème

j'ai un composant TQuery dont le nom Emp en
mode graphique, je mis dans la propriété SQL (SELECT * FROM EMPLOYE WHERE
Salaire = : Salaire )

dans mon code :

Emp.ParamByName('Salaire').value: ='is Null';

Emp.ExecSQL;

......;

Alors la Delphi m'affiche une erreur de syntaxe genre valeur de salaire est de type
Float par contre la valeur que je transmis de type caractère ,j'ai changé comme
le type de paramètre en caractère mais ca marche pas :(
0
Rejoignez-nous