[ vujkev @ 14.09.2004. 20:29 ] @
Prepravljam jedan program da koristi ADO 2.6 umesto DAO 3.6 i sad imam problem. Pri otvaranju jednog query-a ADO mi prijavljuje ovu gresku
Citat:
You tried to execute a query that does not include the specified expression 'DateDiff("n",[datum],Now())' as part of an aggregate function.


Kod sa kojim pokusavam da otvorim query je sledeci:
Code:
rcSet.Open "Select * from quSySK where razlika<0 order by razlika", Base, adOpenStatic, adLockReadOnly


Napominjem da je sve radilo pod DAO kontrolom i da ovaj query radi kad ga startujem iz Access-a.

Usput imao sam problem pri otvaranju tabele sa nazivom "Zone". Nikako nije hteo da otvori tu tabelu i uspeo sam tako sto sam promenio naziv tabele u "tblZone". Zasto se ovo desilo?
[ mladenovicz @ 15.09.2004. 09:31 ] @
A gde ti je DateDiff("n",[datum],Now()) u ovom upitu?

EDIT: Verovatno je razlika taj DateDiff
[ vujkev @ 15.09.2004. 10:37 ] @
OK evo ga ceo upit, ali opet napominjem da u Access-u RADI, kao i sa DAO
Code:
SELECT Max([Istorija].[Datum]+[Istorija].[Vreme]) AS Datum, DateDiff("n",[datum],Now()) AS Minuta, ([Objekti].[SySKontrolaDan]*24*60-10-minuta) AS Razlika, Istorija.PanelID, Last(Istorija.TipDogadjaja) AS Tip, Last(Istorija.ID) AS ID, Objekti.Obrisan, Objekti.SysKontrola, Objekti.Aktiv, Objekti.Naziv, Last(Istorija.Dogadjaj) AS Dogadjaj, Objekti.SySKontrolaDan, Objekti.ID AS IDObjekta
FROM Istorija INNER JOIN Objekti ON Istorija.PanelID = Objekti.PanelID
GROUP BY Istorija.PanelID, Objekti.Obrisan, Objekti.SysKontrola, Objekti.Aktiv, Objekti.Naziv, Objekti.SySKontrolaDan, Objekti.ID
HAVING (((Objekti.Obrisan)=0) AND ((Objekti.SysKontrola)=1) AND ((Objekti.Aktiv)=1));
[ Zidar @ 15.09.2004. 14:21 ] @
Tvoj kveri ne izgleda dobro, sintaksno nije potpuno ispravan. Imas
SELECT ..... Objekti.Obrisan, Objekti.SysKontrola, Objekti.Aktiv .....
FROM .....
GROUP BY ..... Objekti.Obrisan, Objekti.SysKontrola, Objekti.Aktiv .....
HAVING Objekti.Obrisan=1 AND Objekti.SysKontrola=1 AND Objekti.Aktiv=1

To ne bi tebalo tako, i ako ti radi u Accessu to je slucajno i rezultat nekog buga ili nedoslednosti Accessa u pracenj SQL standarda. ADO je verovatno stroziji nego DAO u proveravanju SQL sintakse.
HAVING moze da ide samo za ona polja koja se nalaze u nekoj agragatnoj funkciji za GROUP BY (SUM, COUNT, MAX, MIN...), a koje ti nemas u kveriju. Probaj da napises nesto kao:

SELECT ..... Objekti.Obrisan, Objekti.SysKontrola, Objekti.Aktiv .....
FROM .....
WHERE Objekti.Obrisan=1 AND Objekti.SysKontrola=1 AND Objekti.Aktiv=1
GROUP BY ..... Objekti.Obrisan, Objekti.SysKontrola, Objekti.Aktiv .....

:-)
[ vujkev @ 15.09.2004. 16:01 ] @
Pa ni ovo nisam ja pisao vec sam napravio u Query Wizardu, a Access je sam napisao sta treba Probao sam tvoj primer i u Access-u je odradio lepo, ali ADO opet prijavljuje gresku ;(
[ Zidar @ 16.09.2004. 13:55 ] @
Probaj neki mnogo prostiji, obican SELECT kveri koji upotrebljava DateDiff ffunkciju i vidi sta ce da bude.

A to sto si upotrebio kveri wizard ne znaci da je kveri automatski dobar. Ako si samo u Criteria polje upisao jedinice na tri mesta, wizzard je pretvorio to u HAVING. Medjutim, postavljanje kriterijuma u Group By kveriju ne radi se tako, nego se iz Group By combo boxa (tamo gde visis izbor SUM, COUNT, MIN, MAX, GROUP BY itd) izabere WHERE. WHERE se nazalost ne vidi odmah kad se kombo otvori, nalazi se na dnu liste i mora da se skroluje do tamo. To sto ti kveri radi u Accessu, to je rezultat lose implementacije SQL standarda, il drugim recima to je BUG u Accessu kojiti dozvoljava da napises los kveri i da to radi.

Drugo ne znam.

:-)