SQL et Date [Résolu]

lacerto84
Messages postés
9
Date d'inscription
lundi 20 octobre 2003
Dernière intervention
5 décembre 2004
- 30 juil. 2004 à 01:42 - Dernière réponse : cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
- 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 

Votre réponse

11 réponses

Meilleure réponse
lacerto84
Messages postés
9
Date d'inscription
lundi 20 octobre 2003
Dernière intervention
5 décembre 2004
- 30 juil. 2004 à 17:04
3
Merci
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

Merci lacerto84 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de lacerto84
cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
- 30 juil. 2004 à 08:58
0
Merci
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
Messages postés
9
Date d'inscription
lundi 20 octobre 2003
Dernière intervention
5 décembre 2004
- 30 juil. 2004 à 13:36
0
Merci
J'ai essayé ca mais j'ai toujours la même erreur !
Commenter la réponse de lacerto84
cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
- 30 juil. 2004 à 14:05
0
Merci
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
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
- 30 juil. 2004 à 18:17
0
Merci
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
Messages postés
4
Date d'inscription
lundi 13 mars 2006
Dernière intervention
28 mars 2006
- 27 mars 2006 à 11:47
0
Merci
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
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
- 27 mars 2006 à 19:39
0
Merci
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
Messages postés
4
Date d'inscription
lundi 13 mars 2006
Dernière intervention
28 mars 2006
- 28 mars 2006 à 11:49
0
Merci
Bonjour,
le type de champ date_dip et DATE en table paradox jj-mm-aaaa.
merci.
Commenter la réponse de salinfopc0
cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
- 28 mars 2006 à 21:33
0
Merci
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
Messages postés
4
Date d'inscription
lundi 13 mars 2006
Dernière intervention
28 mars 2006
- 19 avril 2006 à 14:42
0
Merci
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
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
- 19 avril 2006 à 20:54
0
Merci
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.