SQL et Date [Résolu]

lacerto84 9 Messages postés lundi 20 octobre 2003Date d'inscription 5 décembre 2004 Dernière intervention - 30 juil. 2004 à 01:42 - Dernière réponse : cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention
- 19 avril 2006 à 20:54
Bonjour,

J'ai une erreur lorsque j'utilise le code suivant :
QueryCB.SQL.Add('SELECT SUM(Montant)');
QueryCB.SQL.Add('FROM DetailSkim');
QueryCB.SQL.Add('WHERE Caisse='''+CurrentCaisse+'''and Type=''CB'' and Date='''+DateToStr(Principale.CurrentDate)+'''');

Erreur :
Le projet a provoqué une classe d'exception EDBEngineError avec messge 'Utilisation incorrecte du mot-clé.'
Element: Date='30/07/2004'

Merci de m'aider
Afficher la suite 

11 réponses

Répondre au sujet
lacerto84 9 Messages postés lundi 20 octobre 2003Date d'inscription 5 décembre 2004 Dernière intervention - 30 juil. 2004 à 17:04
+3
Utile
je viens de trouver l'erreur !!!

Date est un mot réservé !!!

Donc j'ai modifié date par dateCB et ca marche !

Merci pour ton aide
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de lacerto84
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 30 juil. 2004 à 08:58
0
Utile
Dans une requête SQL, il faut exprimer les dates au format ANSI, soit : mois-jour-année.
La fonction StrToDate n'est donc pas adaptée à cet usage.
Au lieu de cela, il est préférable d'utiliser la méthode suivante :
QueryCB.SQL.Add('SELECT SUM(Montant) ');
QueryCB.SQL.Add('FROM DetailSkim ');
QueryCB.SQL.Add('WHERE Caisse='''+CurrentCaisse+'''and Type=''CB'' and Date='''+FormatDateTime('mm/dd/yyyy', Principale.CurrentDate)+'''');

May Delphi be with you
Commenter la réponse de cs_Delphiprog
lacerto84 9 Messages postés lundi 20 octobre 2003Date d'inscription 5 décembre 2004 Dernière intervention - 30 juil. 2004 à 13:36
0
Utile
J'ai essayé ca mais j'ai toujours la même erreur !
Commenter la réponse de lacerto84
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 30 juil. 2004 à 14:05
0
Utile
C'est que l'erreur vient d'ailleurs, comme des apostrophes manquants, par exemple :
QueryCB.SQL.Add('SELECT SUM(Montant) ');
QueryCB.SQL.Add('FROM DetailSkim ');
QueryCB.SQL.Add('WHERE Caisse='+QuotedStr(CurrentCaisse)+' and Type=' + QuotedStr(CB) +' and Date='+QuotedStr(FormatDateTime('mm/dd/yyyy', Principale.CurrentDate)));


Personnellement, je trouve plus lisible d'écrire :
const
  Requete = 'Select sum(montant) from DetailSkim'   +' where Caisse "%s" and type "%s" and date = "%s"';
begin
  QueryCB.Sql.Text := Format(Requete, [CurrentCaisse, CB, FormatDateTime('mm/dd/yyyy', Principale.CurrentDate)]);
  //reste du traitement ici
end;


Il est plus facile, à mon avis, de repérer ce genre d'erreur en pratiquant ainsi.
May Delphi be with you
Commenter la réponse de cs_Delphiprog
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 30 juil. 2004 à 18:17
0
Utile
Arf, je m'en suis souvenu trop tard.
Tu pouvais aussi utiliser cette notation :
"DetailSkim.Date" = ...
May Delphi be with you
Commenter la réponse de cs_Delphiprog
salinfopc0 4 Messages postés lundi 13 mars 2006Date d'inscription 28 mars 2006 Dernière intervention - 27 mars 2006 à 11:47
0
Utile
Bonjour,
je veut ecrie un recherche par date
Query1.SQL.Clear;
Query1.sql.Add('select * ');
query1.sql.ADD('from diplome');
Query1.sql.ADD('where (CODE_fil=:fil)and(code_opt=:opt)and(session=:ses) and (substr(date_dip,1,6)=:ddip) and (Num_boit=:numb)or (code_spe=:spe)ORDER BY Num_dos asc');//and(substr(date_dip,post,1,6)=:ddip)
Query1.ParamByName('fil').AsString:=edit1.text;
Query1.ParamByName('opt').AsString:=edit2.text;
Query1.ParamByName('spe').AsString:=edit5.text;
Query1.ParamByName('ses').AsString:=edit6.text;
Query1.ParamByName('Numb').AsInteger:=strtoint(edit8.text);
Query1.ParamByName('ddip').AsString:=edit7.text;
///
je veut tapé une anneés "2000" dans edit7 mais une erreur:
Le projet a provoqué une classe d’exception EDBEngineError
avec le message ‘Fonctionnalité non supportée .’…..
Commenter la réponse de salinfopc0
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 27 mars 2006 à 19:39
0
Utile
Quel est le type du champ date_dip ?

May Delphi be with you !

<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
salinfopc0 4 Messages postés lundi 13 mars 2006Date d'inscription 28 mars 2006 Dernière intervention - 28 mars 2006 à 11:49
0
Utile
Bonjour,
le type de champ date_dip et DATE en table paradox jj-mm-aaaa.
merci.
Commenter la réponse de salinfopc0
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 28 mars 2006 à 21:33
0
Utile
Puisque le champ date_dip est du type date, pour effectuer la comparaison tu dois extraire l'année de la date pour cela :

Query1.SQL.Clear;
Query1.sql.Add('select * ');
query1.sql.ADD('from diplome');
Query1.sql.ADD('where (CODE_fil=:fil)and(code_opt=:opt)and(session=:ses) and (EXTRACT(YEAR FROM date_dip)=:ddip) and (Num_boit=:numb)or (code_spe=:spe)ORDER BY Num_dos asc');//and(substr(date_dip,post,1,6)=:ddip)
Query1.ParamByName('fil').AsString:=edit1.text;
Query1.ParamByName('opt').AsString:=edit2.text;
Query1.ParamByName('spe').AsString:=edit5.text;
Query1.ParamByName('ses').AsString:=edit6.text;
Query1.ParamByName('Numb').AsInteger:=strtoint(edit8.text);
Query1.ParamByName('ddip').AsString:=edit7.text;

De plus, cela te met à l'abri d'une mise en forme différente de la date, ce que ne permet pas l'utilisation de la fonction SUBSTRING qui, soit dit en passant, t'oblige à transtyper le champ en chaine avant de pouvoir extraire les caractères ! (SUBSTRING(CAST(date_dip as VARCHAR(10)) FROM 9 FOR 4). Si l'année est donnée sur deux caractères, je ne sais pas qu'elles sont les conséquences !

Avec le code que je te donne, ta requête est blindée
May Delphi be with you !

<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
salinfopc0 4 Messages postés lundi 13 mars 2006Date d'inscription 28 mars 2006 Dernière intervention - 19 avril 2006 à 14:42
0
Utile
MERCI BIEN pour ton aide,
je veut affichier les années de type date comment
Query1.sql.Clear;
Query1.SQL.add('select distinct Num_boit,ROUND (DATE_dip, 'YY')');
Query1.SQL.add('from diplome');
Query1.SQL.add('where(CODE_fil=:''filf'')and (code_opt=:''optf'')');
Query1.ParamByName('filf').AsString:=fil;
Query1.ParamByName('optf').AsString:=opt;
Query1.Active:=true;

ca fonction pas, comment afficher juste les annees selement
exmple 02-07-2004 affiche 2004

merci bien.
Commenter la réponse de salinfopc0
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 19 avril 2006 à 20:54
0
Utile
Si tu prenais la peine de regarder la documentation sur la fonction EXTRACT du SQL, tu ne devrais pas avoir de peine à trouver toi même la solution. Et comme son utilisation est déjà illustrée dans ma réponse ci-dessus, je ne voudrais pas donner l'impression de me répéter...
Autres petites corrections :
Query1.sql.Clear;
Query1.SQL.add('select distinct Num_boit, EXTRACT (YEAR FROM DATE_dip ');
Query1.SQL.add('from diplome ');Query1.SQL.add('where CODE_fil :filf and code_opt :optf');
Query1.ParamByName('filf').AsString:= QuotedStr(fil);
Query1.ParamByName('optf').AsString:= QuotedStr(opt);
Query1.Active:=true;

Tu devrais quand même jeter un oeil sur la documentation livrée par Borland : cliquer [file:///C:/Program%20Files/Fichiers%20communs/Borland%20Shared/BDE/LOCALSQL.HLP ici].
May Delphi be with you !
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.