Newsgroup: it.comp.appl.access
Titolo: Blocco Record con relazione tra tabella e query

Salve a tutti.
 
Ho due tabelle in relazione uno-a-molti:
 
Tabella "Documenti" con Campi:
IdDocumento (contatore, chiave primaria)
DesDocumento (testo)
 
Tabella "RigheDocumento" con Campi:
IdRiga (contatore, chiave primaria)
IdDocumento (numerico, intero lungo, richiesto=si)
ValoreRiga (numerico, precisione doppia)
 
Mi serve avere per ogni documento il totale del valore delle righe 
corrispondenti. Ho quindi creato una query di selezione con i record della 
tabella "Documenti" e un campo calcolato 
=Dsum("ValoreRiga";"RigheDocumento";"IdDocumento=" & [IdDocumento])
 
Per rendere più veloce la query evitando di usare la funzione DSum(), ho 
creato una seconda query (una query di Raggruppamento basata sulla tabella 
RigheDocumento con campi IdDocumento e SommaDiValoreRiga), poi nella prima 
query ho creato una relazione tra il campo IdDocumento della tabella 
"Documenti" e il campo IdDocumento della query di raggruppamento.
 
Il problema è che ora i record della prima query sono bloccati (non è 
possibile modificare, eliminare o aggiungere record).
Dove sto sbagliando?
 
Grazie per l'aiuto.
Davide
 
 
 
 
 
 

 Davide
 
Le query di raggruppamento rendono il recordset non aggiornabile (per
forza di cose.....)
Cmq puoi usare Sum (=SQL) al posto di Dsum (=Access)

 Davide
 


 ha scritto nel messaggio 
news:dd505b2e-f2cb-45e9...@h24g2000yqm.googlegroups.com...

Potresti farmi un piccolo esempio di questo Sum (=SQL)?
Lo devo inserire come formula in un campo della query?
 
 
 
 
 


Cosa gli cambia? La dsum non e' altro che una sum mascherata. Solo che 
te la fa access invece di farla tu.
dall'esempio che fa :
  =Dsum("ValoreRiga";"RigheDocumento";"IdDocumento="&  [IdDocumento])
sta roba sta (o dovrebbe) sulla proprieta' origine controllo del campo 
calcolato ed e' ovviamente "time consuming" se la sposta sulla query 
origine si ha un raggruppamento e di conseguenza una query non 
aggiornabile. Tra l'altro ho la vaga impressione che ha un form continuo 
e questo,ovviamente, complica la faccenda di una possibile soluzione 
(i.e. imputare il valore campo prelevando il dato da un insieme "ad hoc" 
sull'evento di current).
 
-- 
 
ac (x=y-1)

 - Mostra testo citato -
 
Mah.....se il suo problema erano le prestazioni....il Sum (SQL) su set
molto grossi ha miglior efficenza (ricordo una discussione di @alex
taaaaanto tempo fa sull'argomento) e poi, pensando alla portatilità, è
sicuramente + standard.
Cmq qua il problema mi sembra + di base no? Il GROUP rende la qry non
aggiornabile (e fin qui...). Mi chiedevo solo perchè nn usi le
proprietà delle Form (o del report) piuttosto che il vba x ottenere i
totali....
Davide, mi spieghi meglio? Hai una maschera continua con le testate e
vuoi i totali? Li vuoi per ogni documento singolo? altrimenti nn ti
posso aiutare.....

 posso aiutare.....
 
Ciao
@Alex

 ha scritto nel messaggio 
news:0669053d-8ce5-4f34...@er6g2000vbb.googlegroups.com...

Grazie a tutti per l'aiuto.
Si, ho una form a maschere continue.
Ho l'abitudine di usare il Dsum direttamente nella query per poter ordinare 
o filtrare (in caso di bisogno) i dati sulla maschera. Se uso il Dsum sulla 
proprietà origine del controllo non posso ordinare o filtrare i valori che 
vengono calcolati.
Mi son sempre chiesto se esiste un modo alternativo al DSUM per avere i 
totali su form continue, per questo ho posto il problema.
 
Quello che ho provato a fare è stato un "DLOOKUP tramite sql". Mi spiego 
meglio:
1) creare una query di raggruppamento basata sulla tabella RigheDocumento 
per avere la SommaDiValoreRighe per ogni IdDocumento
2) creare una seconda query basata sulla tabella Documenti in relazione 
uno-a-uno con la query di raggruppamento, e associare ad ogni record della 
tabella Documenti il relativo valore SommaDiValoreRighe.
 
Ma non pensavo che la query diventasse ReadyOnly.
Non c'è proprio modo di ottenere quel valore dalla query di raggruppamento 
senza usare DLOOKUP o rendere ReadyOnly i record? Inizialmente pensavo fosse 
un problema di chiavi primarie, di relazioni di univocità dei record o 
qualcosa del genere...
 
Davide
 
 
 
 
 
 
 
 
 
 

 Davide
 
Le funzioni di Aggregazione sui domini sono poco efficienti, e l'unica
cosa che puoi fare è rosicare qualche msecondo rendendo la funzione
DCOUNT
più veloce.
Per farlo ti basterebbe evitare di usarla a vantaggio di una
Equivalente fatta con Recordset.
 
Quì trovi il codice:
http://allenbrowne.com/ser-66.html
 
 
Sostituisci la chiamata al DCOUNT e potresti guadagnare qualche
manciata di secondi.
 
@Alex


Qui la questione e' che non solo vuoi, come si suol dire, la botte piena 
e la moglie ubriaca ma vuoi che ad ogni ubriacatura della moglie ti 
aumenti anche il conto in banca ;-{)
 
1) Vuoi i totali parziali a livello della singola riga, e passi
2) Vuoi che i dati siano aggiornabili, e ripassi
3) Vuoi la possibilita' di filtrare/ordinare sulla colonna totali, 
cominci a essere scostumato
4) E magari vuoi anche colorare in modo diverso le righe in funzione di 
quel totale, quando e' troppo e' troppo ;-{)
5) E naturalmente il sistema deve rispondere in un batter di ciglio (o 
ciglia)
 
 
 
Metti il campo sulla tabella (oppure usa una temporanea 1-1 con 
idocumento) e non se ne parli piu'. Naturalmente tenere quei totali 
coerenti e' a tuo carico
-- 
 
ac (x=y-1)