Newsgroup: it.comp.appl.access
Titolo: Come recuperare il numero di posizione di un record in una query?

Ciao a tutti,
un problema legato alle classifiche/ranking.
Ho creato una query che mi mette in ordine decrescente per fatturato
tutti i miei clienti.
Ho poi un report chiamato Scheda cliente in cui vi è la storia di
ognuno di essi.
Querllio che vorrei fare è trovare un sistema per includere nel report
una casella in cui compaia la posizione in classifica del cliente
sulla base della query di cui sopra.
Sapreste dirmi se c'è una funzione che possa permettermi di recuperare
il numero di record da una query?
Ho spulciato per una settimana il'help in linea ma non arrivo a
trovare quello che mi serve.
Grazie in anticipo per ogni suggerimento utile.
Buona giornata
Andrea
Andrea W. GUAGLIO (Mr.)
Milan, ITALY
PPL ASEL
To reply, please remove NO SPAM from my e-mail address.

"Andrea W. GUAGLIO" <flying...@SPAMhotmail.com> ha scritto nel messaggio
news:3b819c1d...@news.genie.it...

Prova con la funzione DCount(); vedi help...
Ciao.

Ciao.
Grazie, Sergio, ma se ho capito bene la finzione DCOUNT fornisce il
numero di record di una tabella o di una query che rispondono a
determinati criteri.
Nel mio caso io ho una query che mi fornisce 100  records, ognuno dei
quali composto dal nome di un cliente e dal fatturato annuo ad esso
associato.
I 100 record - uno diverso dall'altro - sono ordinati in modo
decrescente per fatturato.
Ora, se uso DCOUNT dicendo di reperire nella query quel record cui
corrsiponde il nome cliente "Cippa Lippa", il risultato che mi dà sarà
di derto 1, ma non mi dirà, come invece cerco io, che il cliente
"Cippa Lippa" occupa ad esempio la posizione 36 su 100 della lista.
Comprendi qual'è il mio problema?


 Comprendi qual'è il mio problema?
Una strada potrebbe essere questa:
Costruisci una tabella di appoggio con gli stessi campi della query che
restituisce la lista dei top 100. Aggiungi un campo che chiamerai NProg di
tipo intero e salvala con un nome comprensibile: Top100. Ora trasforma la
query che ti fornisce i 100 record in una query di accodamento verso la
tabella appena costruita e salvala con un'altro nome. Ancora, realizza una
query che ti elimina il contenuto della tabella Top100.
In una sub esegui prima la query di eliminazione, poi la query di
accodamento e poi chiama la funzione seguente che ti numera progressivamente
i record.
Public Function ContaAuto() As Long
On Error Resume Next
Dim RCS As Recordset, N As Long
Set RCS = CurrentDb.OpenRecordset("Top100")
RCS.MoveLast
RCS.MoveFirst
For N = 1 To RCS.RecordCount
With RCS
.Edit
!NProg = N
.Update
.MoveNext
End With
Next N
RCS.Close
End Function
Su questa tabella, Top100, appena riempita e numerata potrai compiere tutte
le operazioni che vuoi, compresa la classifica.
La logica è questa: ad una tabella di appoggio accodo tutti i dati che mi
servono, con la funzione "ContaAuto" numero progressivamente i record appena
accodati ma prima di tutto svuoto la tabella per fare posto ai nuovi dati.
Infine uso la tabella numerata per i miei scopi.
Ciao, Carlo

"Andrea W. GUAGLIO" <flying...@SPAMhotmail.com> ha scritto nel messaggio
news:3b81a145...@news.genie.it...

Sì, scusa ho risposto in maniera frettolosa...
Ciao.


Se il report ha come origine record la tua query.
Se la tua query č basata su TABELLA1.
Se il campo di TABELLA1 che contiene il fatturato si chiama FATTURATO.
Nella query creati un campo calcolato cosě fatto:
GRADUATORIA: DCount("[FATTURATO]"; "TABELLA1"; "FATTURATO>" & FATTURATO)+1
Nel report inserisci anche un controllo associato al campo GRADUATORIA della
query.
Se invece il report ha come origine record la tabella anagrafica dei clienti
e la query serve solo a stabilire le graduatorie in base al fatturato.
Se la tabella anagrafica clienti ha come chiave primaria un campo chiamato
IDCliente di tipo numerico o contatore.
Se anche la query contiene un campo Numerico chiamato IDCliente.
Se nel report il controllo associato a IDCliente si chiama anche lui
IDCliente.
Se la tua query si chiama Query1.
Fermo restando il fatto che devi crearti in Query1 il campo calcolato
GRADUATORIA come sopra indicato, nel report inserisci una casella di testo
non associata nella cui Origine controllo scriverai:
= DLookup("[GRADUATORIA]"; "Query1"; "IDCLiente=" & IDCliente)
Naturalmente se esistono due clienti con lo stesso fatturato, essi avranno
lo stesso numero di graduatoria.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

"Andrea W. GUAGLIO" <flying...@SPAMhotmail.com> ha scritto nel messaggio
news:3b819c1d...@news.genie.it...

Prova a dare un'occhiata alla proprietà AbsolutePosition.
Ciao


Andrea W. GUAGLIO (Mr.)



Sembrerebbe proprio di si, anche se non riesco a spiegarmene il motivo.
Comunque, se i decimali significativi del campo fatturato sono 2, prova a
scrivere:
GRADUATORIA: DCount("[FATTURATO]";"TABELLA1";"Int(FATTURATO*100) >" &
Int([FATTURATO]*100))+1
