DBExpress SQL Server

DBExpress SQL Server - Delphi/Pascal - Programmation

Marsh Posté le 01-07-2004 à 16:53:07    

Bonjour,  
 
J'utilise dbexpress et sql server.  
Quand je veux affecter une date à un paramètre de ma requête avec mon composant TSQLQuery, j'obtiens une erreur : 'MPRI_DATEBDX' nom de colonne incorrect.  
 
Le problème est que ma requête fonctionne, mais c'est mon parambyname qui fonctionne pas.  :pfff:  
 
Code:  
 
sqlquerytravail.sql.add('AND MPRI_DATEBDX BETWEEN :DATEDEB AND :DATEFIN');  
...  
sqlquerytravail.ParamByName('DATEDEB').asSQLTimeStamp := sqlquerytravail.DateTimeToSQLTimeStamp(trunc(FDateDeb));  
sqlquerytravail.ParamByName('DATEFIN').asSQLTimeStamp := sqlquerytravail.DateTimeToSQLTimeStamp(trunc(FDateFin));  
 
 
Merci d'avance  :)

Reply

Marsh Posté le 01-07-2004 à 16:53:07   

Reply

Marsh Posté le 02-07-2004 à 14:15:00    

quand tu inseres des parametres dans une requête SQL, tu dois mettre ':' devant pour qu'ils soient reconnus comme tels
exemple : 'AND MPRI_DATEBDX BETWEEN :DATEDEB AND :DATEFIN'
si tu les met dans une query et que tu créé des paramètres dynamiquement, il faut les rajouter égalament dans la propriété params pour qu'ils existent comme paramètre
 
donc : après avoir fait ton :
sqlquerytravail.sql.add('AND MPRI_DATEBDX BETWEEN :DATEDEB AND :DATEFIN');  
tu dois aussi faire :
sqlquerytravail.params.add(':DATEDEB');  
sqlquerytravail.params.add(':DATEFIN');  
(le code dua params.add n'est peut-être pas bon, mais c'est dans ce sens qu'il faut travailler)
et ensuite seulement tu peu faire :
sqlquerytravail.ParamByName('DATEDEB').asSQLTimeStamp := sqlquerytravail.DateTimeToSQLTimeStamp(trunc(FDateDeb));  
sqlquerytravail.ParamByName('DATEFIN').asSQLTimeStamp := sqlquerytravail.DateTimeToSQLTimeStamp(trunc(FDateFin));
 

Reply

Marsh Posté le 02-07-2004 à 15:09:57    

Merci pour ton aide auredauv,
 
Mes ':' y sont devant c'est juste que ':''D' ca fait un smiley. lol :D
 

Reply

Marsh Posté le 04-07-2004 à 12:24:24    

Solution plus simple, je trouve (j'aime pas utiliser ces trucs de paramètres, c'est lent et ça apporte plein de problèmes) :

Code :
  1. sqlquerytravail.sql.add(Format('AND MPRI_DATEBDX BETWEEN %s AND %s', [QuotedStr(FormatDateTime('yyyy''-''mm''-''dd', FDateDeb)), QuotedStr(FormatDateTime('yyyy''-''mm''-''dd', FDateFin))]));


(ce que je fais perso c'est une fonction qui fait l'équivalent du QuotedStr+FormatDateTime pour ne pas devoir répéter ces deux fonctions et le format de la date à chaque coup)


Message édité par antp le 04-07-2004 à 12:24:51
Reply

Marsh Posté le 05-07-2004 à 12:08:39    

Merci antp,
 
J'avais déjà essayé cette méthode, ca fonctionne très bien, mais je doi utilisé des parambyname.
 
Es ce que SQL Server avec dbexpress accepte les parambyname?
 
merci d'avance

Reply

Marsh Posté le 06-07-2004 à 09:47:00    

je suis d'accord avec antp pour dire que les params c'est pas top,
sauf que :
quand tu fais un web server là t'es obligé d'utiliser les params et que quand tu fais un web service, tu peux contourner les paramètres et passer la chaîne SQL, mais c'est quand même galère
 
conclusion : autant se mettre au paramètre le + vite possible et ça vaut pour tous les langages
(en plus, avec des paramètres, tu peux rajouter un contrôle sur les types (integer, string, date, ...) directement dans ton application cliente)

Reply

Marsh Posté le 08-07-2004 à 14:52:46    

Quelqu'un a t-il déjà eu ce problème?
Si oui, existe-t-il une solution?
 
Merci d'avance :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed