Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Can someone tell me why this query does not work?
Message
 
 
À
10/12/2013 11:51:03
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows 7
Network:
Windows 2008 Server
Database:
Visual FoxPro
Application:
Desktop
Divers
Thread ID:
01589692
Message ID:
01589700
Vues:
90
>Hi all.
>
>I have beat my head on the keyboard for long enough. Here is the query (angle brackets have been replaced by square brackets for readability here)
>
>
>TEXT TO lcSQL TEXTMERGE NOSHOW PRETEXT 15
>    SELECT DATETIME(YEAR(VEH.EvtDate), MONTH(VEH.EvtDate), DAY(VEH.EvtDate), VAL(GETWORDNUM(VEH.EvtTime, 1, ":")), VAL(GETWORDNUM(VEH.EvtTime, 2, ":"))) AS start_time, 
>	DATETIME(YEAR(VEH.EvtDate), MONTH(VEH.EvtDate), DAY(VEH.EvtDate), VAL(GETWORDNUM(VEH.EvtTime, 1, ":")), VAL(GETWORDNUM(VEH.EvtTime, 2, ":"))) + ((VAL(GETWORDNUM(VEH.duration, 1, ':')) * 3600) + (VAL(GETWORDNUM(VEH.duration, 2, ':')) * 60)) AS end_time, 
>	ST.descr AS SvcType_dsc, SVC.servref 
>    FROM funeral!ServiceVehicle VEH WITH (BUFFERING = .T.) 
>	JOIN aserdet SVC WITH (BUFFERING = .T.) ON VEH.service_id = SVC.serviceid 
>	JOIN psvctype ST ON SVC.servtype = ST.code 
>	WHERE VEH.VehCode =  '[[tcVehCode]]'  
>		AND VEH.SvcVehID # [[tiSvcVehID]]  
>		AND DATETIME(YEAR(VEH.EvtDate), MONTH(VEH.EvtDate), DAY(VEH.EvtDate), VAL(GETWORDNUM(VEH.EvtTime, 1, ":")), VAL(GETWORDNUM(VEH.EvtTime, 2, ":"))) < {[[ttEndTime]]} 
>		AND DATETIME(YEAR(VEH.EvtDate), MONTH(VEH.EvtDate), DAY(VEH.EvtDate), VAL(GETWORDNUM(VEH.EvtTime, 1, ":")), VAL(GETWORDNUM(VEH.EvtTime, 2, ":"))) + ((VAL(GETWORDNUM(VEH.duration, 1, ':')) * 3600) + (VAL(GETWORDNUM(VEH.duration, 2, ':')) * 60)) > {[[ttStartTime]]}
>ENDTEXT 
>
>
>It hands me back Function argument value, type, or count is invalid.
>
>Now the goofy thing is that this one works:
>
>
>TEXT TO lcSQL TEXTMERGE NOSHOW PRETEXT 15
>    SELECT DATETIME(YEAR(VEH.EvtDate), MONTH(VEH.EvtDate), DAY(VEH.EvtDate), VAL(GETWORDNUM(VEH.EvtTime, 1, ":")), VAL(GETWORDNUM(VEH.EvtTime, 2, ":"))) AS start_time, 
>	DATETIME(YEAR(VEH.EvtDate), MONTH(VEH.EvtDate), DAY(VEH.EvtDate), VAL(GETWORDNUM(VEH.EvtTime, 1, ":")), VAL(GETWORDNUM(VEH.EvtTime, 2, ":"))) + ((VAL(GETWORDNUM(VEH.duration, 1, ':')) * 3600) + (VAL(GETWORDNUM(VEH.duration, 2, ':')) * 60)) AS end_time, 
>	ST.descr AS SvcType_dsc, SVC.servref 
>    FROM funeral!ServiceVehicle VEH WITH (BUFFERING = .T.) 
>	JOIN aserdet SVC WITH (BUFFERING = .T.) ON VEH.service_id = SVC.serviceid 
>	JOIN psvctype ST ON SVC.servtype = ST.code 
>	WHERE VEH.VehCode =  '[[tcVehCode]]'  
>		AND VEH.SvcVehID # [[tiSvcVehID]] 
>		AND DATETIME(YEAR(VEH.EvtDate), MONTH(VEH.EvtDate), DAY(VEH.EvtDate), VAL(GETWORDNUM(VEH.EvtTime, 1, ":")), VAL(GETWORDNUM(VEH.EvtTime, 2, ":"))) < {[[ttEndTime]]} 
>ENDTEXT 
>
>
>and this one works:
>
>TEXT TO lcSQL TEXTMERGE NOSHOW PRETEXT 15
>    SELECT DATETIME(YEAR(VEH.EvtDate), MONTH(VEH.EvtDate), DAY(VEH.EvtDate), VAL(GETWORDNUM(VEH.EvtTime, 1, ":")), VAL(GETWORDNUM(VEH.EvtTime, 2, ":"))) AS start_time, 
>	DATETIME(YEAR(VEH.EvtDate), MONTH(VEH.EvtDate), DAY(VEH.EvtDate), VAL(GETWORDNUM(VEH.EvtTime, 1, ":")), VAL(GETWORDNUM(VEH.EvtTime, 2, ":"))) + ((VAL(GETWORDNUM(VEH.duration, 1, ':')) * 3600) + (VAL(GETWORDNUM(VEH.duration, 2, ':')) * 60)) AS end_time, 
>	ST.descr AS SvcType_dsc, SVC.servref 
>    FROM funeral!ServiceVehicle VEH WITH (BUFFERING = .T.) 
>	JOIN aserdet SVC WITH (BUFFERING = .T.) ON VEH.service_id = SVC.serviceid 
>	JOIN psvctype ST ON SVC.servtype = ST.code 
>	WHERE VEH.VehCode =  '[[tcVehCode]]'  
>		AND VEH.SvcVehID # [[tiSvcVehID]] 
>		AND DATETIME(YEAR(VEH.EvtDate), MONTH(VEH.EvtDate), DAY(VEH.EvtDate), VAL(GETWORDNUM(VEH.EvtTime, 1, ":")), VAL(GETWORDNUM(VEH.EvtTime, 2, ":"))) + ((VAL(GETWORDNUM(VEH.duration, 1, ':')) * 3600) + (VAL(GETWORDNUM(VEH.duration, 2, ':')) * 60)) > {[[ttStartTime]]}
>ENDTEXT 
>
>
>So why doesn't it work with both the start time and the end time in the where clause?
>
>TIA

Why are you using such complex expressions to get rid of the seconds part in the datetime if I understood what the intent is in that expression?

I suggest to simplify the query, e.g.
TEXT TO lcSQL TEXTMERGE NOSHOW PRETEXT 15
   SELECT * FROM (
    SELECT DTOT(VEH.EvtDate) + HOUR(VEH.EvtTime)+3600 + MINUTE(VEH.EvtTime) * 60 AS start_time, 
	... as end_Time
	ST.descr AS SvcType_dsc, SVC.servref 
    FROM funeral!ServiceVehicle VEH WITH (BUFFERING = .T.) 
	JOIN aserdet SVC WITH (BUFFERING = .T.) ON VEH.service_id = SVC.serviceid 
	JOIN psvctype ST ON SVC.servtype = ST.code 
	WHERE VEH.VehCode =  '[[tcVehCode]]'  
		AND VEH.SvcVehID # [[tiSvcVehID]]  ) X
WHERE 
		Start_time < {[[ttEndTime]]}  AND End_Time >={[[ttStartTime]]}
ENDTEXT
If it's not broken, fix it until it is.


My Blog
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform