Newsgroup: it.comp.lang.visual-basic
Titolo: Ancora query aggiornabile.... ma che vuole???

Raga ma possibile che un group by mi rende ineseguibile una query?
Ho fatto questa query verso un db Access 2000:
UPDATE T1 LEFT JOIN
  (SELECT UserID, Count(*) AS Conto
   FROM B
   WHERE B.Valore=2
   GROUP BY B.UserID
  ) AS T2
ON T1.UserID = T2.UserID
SET T1.Somma = T2.Conto
Ma ADO in VB mi risponde con:
E' necessaria una query aggiornabile... bla bla bla.
Che cavolo vuole?
-- 
Quando noi ignoranti eravamo di più,
tutto era più bello...
(Adriano Celentano)

 SET T1.Somma = T2.Conto
Non uso Access, ma generalmente per gli Update uso una sintassi molto
diversa, del tipo:
Update Tabella
Set Campo=T2.Campo
From Tabella Join Tabella2 as T2
On <condizioni di Join>
Where <Condizioni di where>
La cosa che tu segnali ha una sua logica. Se leggi in
'italiese/informatichese' la tua istruzione, ottieni:
Modifica T1 e ciò che ottieni con un group by chiamandolo T2, impostando
Somma=Conto.
Ma ancora prima di 'Impostando' sei già fermo, perchè un group by è
*necessariamente* non modificabile.
Ciao
Alberto


Ciao,
vuol dire che non puoi usare aggregazioni in una query di aggiornamento. E'
un limite di Access.
Prova cosě.
-------------------
UPDATE T1
SET T1.Somma = DCount('1','B','Valore=2 AND UserId=' & UserId)
-----------------------
Ciao Giorgio

 *necessariamente* non modificabile.
Si ma la tabella T2 è una tabella derivata dalla tabella B, che non ha 
nulla a che fare con T1.
Io ho due tabelle: T1 e B.
Se faccio un group by su b, questo in che modo dovrebbe influenzare un 
join con t1?
Se faccio T1 LEFT JOIN (...b...group by...) as TX
perchè non mi viene data la possibilità di aggioranre T1 visto che il 
group by interessava solo B (da una subquery)?



Questa sintassi (che va bene per Sql Server) non funziona con Access, la
sintassi della query di Darkbyte è corretta ma non funziona a causa di un
limite di Access.
Ciao Giorgio

 [CUT]
[CUT]
per maggiori informazioni
----------------
ACC: Update Query Based on Totals Query Fails
http://support.microsoft.com/default.aspx?scid=kb;en-us;116142&Product=acc
----------------
Ciao Giorgio

 group by interessava solo B (da una subquery)?
E' parizalmente vero.
Nella clausola Set, infatti, lavori solo su un campo di T1.
Ma da un punto di vista logico, l'argomento di UPDATE è 'T1 join T2'.
Cioè, stai chiedendo di modificare sia T1 che T2, ma T2 è ottenuta per Group
by, e quindi non aggiornabile.
Solo dopo, entrando nel dettaglio di quale campo modificare, ci si accorge
che l'update 'scrive' solo su T1.
Leggo da altri post che si tratta di una limitazione di Access, per cui non
insisto oltre. Però, da un punto di vista puramente logico, a me torna che
questa cosa non sia permessa.
Stupisce, piuttosto, che non ci sia una sintassi più logica per fare ciò che
ti serve.
Ciao
Alberto

 ti serve.
Effettivamente mi sto scervellando a trovare una soluzione che non sia 
una tabella temporanea, perchè di quelle mi sto riempiendo parecchio 
(per fare le stampe uso tabelle temporanee del tipo TempWXYZ con WXYZ 
numero casuale) che poi cancello a fine conteggi, dato che il database 
sarà accessibile da più persone e nessuno mi garantisce che più persone 
contemporaneamente vadano a eseguire una stampa (quindi se usassi nomi 
'statici' tutti vorrebbero creare/usare le stesse tabelle temporanee in 
quel momento).
Ma non trovo altra soluzione... :(
Ho provato su MySQL e quella mia query funziona che è una meraviglia...
