Newsgroup: it.comp.appl.access
Titolo: Numerazione progressiva record estrati dacon query con campo in query e non in tabella

Access 2003
Ciao a tutti, ho la necessità di poter numerare progressivamente i record di 
una query collegata come origine dati ad una sottomaschera.
La numerazione dovrebbe costruirsi quando vengono inseriti i record e 
ricostruirsi quando ne viene cancellato qualcuno.
ho provato gli esempi del sito comune e qualche altro trovato in rete, ma 
non riesco al farli funzionare correttamente, mi da sempre errore nel codice 
"Dim DBCorrente As DAO.Database" (vedi sotto una delle routine che ho 
provato).
Ho trovato quanto segue che parla di numerazione progressiva; qualcuno del 
news ben più competente di me potrebbe trovare spunto, se non ha già 
provato, a risolvere questo tipo di problema.
Per me è arabo.
Ciao, Bruno
----------------
Può esser utile affiancare a ciascun record di una lista, proveniente da una 
query select, un numero progressivo (attenzione non si tratta di un campo 
della tabella autoincrementante ma di un elemento a sé).
Per rendere meglio l'idea, si supponga di avere una tabella come la 
seguente:
CREATE TABLE `table1` (
  `name` varchar(20) default NULL,
  `machine` varchar(20) default NULL
)
Lo scopo è di effettuare una select in cui accanto al nome utente appaiano 
sia il nome macchina che un numero progressivo di ordinamento.
A tal fine si deve ricorrere, prima dell'effettuazione della select, alla 
creazione di un contatore, mediante la dichiarazione di una variabile il cui 
valore sarà impostato a 0 (zero). La variabile @ListaNumerica verrà 
incrementata di una unità per ciascun record trovato nella query.
mysql> set @ListaNumerica = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @ListaNumerica := @ListaNumerica +1 AS Lista, Name, Machine 
from table1;
+-------+-------+----------+
| Lista | Name  | Machine  |
+-------+-------+----------+
|     1 | jack  | radio    |
|     2 | jack  | computer |
|     3 | jack  | cdplayer |
|     4 | bill  | radio    |
|     5 | bill  | shoes    |
|     6 | larry | shoes    |
|     7 | larry | trouser  |
|     8 | larry | gps      |
+-------+-------+----------+
8 rows in set (0.00 sec)-------------------------------Option Compare 
DatabaseOption Explicit
Function ContaRecord()
Dim DB As Database
Dim RS As DAO.Recordset
Dim SQL As String
SQL = "SELECT ID FROM Copia di Qry_141_Località_Itinerario"
Set DB = CurrentDb
Set RS = DB.OpenRecordset(SQL)
If RS.EOF And RS.BOF Then
Exit Function
Else
Do While Not RS.EOF
Debug.Print (RS.AbsolutePosition + 1 & ": " & RS("ID"))
MsgBox RS.AbsolutePosition + 1 & ": " & RS("ID")
RS.MoveNext
Loop
End If
RS.Close
DB.Close
Set RS = Nothing
Set DB = Nothing
End Function 

[CUT]
Per risolvere potrebbe andar bene anche creare un campo con 1 costante e poi 
effettuare ina somma progressiva. Cosa ne pensate ?
Capisco che il metodo non č molto pulito, perň!
Ciao; Bruno 

 ha scritto nel messaggio 
news:495891cc$0$1124$4faf...@reader1.news.tin.it...

ciao Bruno
vedi se risolvi con questo:
http://tinyurl.com/9rtk83
Daniele 

 Daniele
-----
Grazie Daniele, quando ho guardato nel sito Comune non ho notato che  c'era 
l'esempio per  inserire nella query un campo progressivo (titolo: 2.1 Come 
posso inserire nella mia query un campo progressivo? di Stefano Bettini).
Purtroppo non  riesco a far funzionare il tutto; mi restituisce il seguente 
errore:
E' stat scritta una sotto query  che può restituire più campi senza la 
parola riservata EXISTS nella clausola FROM della query pryncipale.
Puoi aiutarmi, Grazie.
La mia tabella si chiama: tbl_141_Località_Itinerario
L'id univoco (contatore) si chiama: ID
-------------
NrProgr: (SELECT tbl_141_Località_Itinerario.ID, 
tbl_141_Località_Itinerario, Progressione((ID)) AS Progressione FROM 
tbl_141_Località_Itinerario WHERE (((Progressione("Azzera"))=0)) ORDER BY 
tbl_141_Località_Itinerario)
---------------
<< ESEMPIO SITO COMUNE>>
[Funzione e modulo]
Option Compare Database
Option Explicit
Dim rval As Integer    ' La variabile globale di appoggio
Public Function Progressione(Valore As String) As Integer
   If Valore = "Azzera" Then
      rval = 0
   Else
      rval = rval + 1
   End If
   Progressione = rval
End Function
[Utilizzo in query]
----------------------------------------------------------------
SELECT MiaTab.ID, MiaTab.Nome, Progressione((ID)) AS Progressione
FROM MiaTab
WHERE (((Progressione("Azzera"))=0))
ORDER BY MiaTab.Nome;
----------------------------
Grazie, Bruno

 tbl_141_Località_Itinerario)
Ciao Bruno
scusa forse non ho capito bene il tuo problema della progressività dei 
record.
se devi numerare progressivamente i record in una query allora
potresti usare questo codice tratto dalla faq  3.11 del sito di Karl
se non va bene fai un esempio concreto.
aggiungi un campo calcolato nella tua query:
NumIncr: DCount("Id";"tbl_141_Località_Itinerario";"Id<" & [Id])+1
Daniele

 ha scritto nel messaggio 
news:495960a6$0$1110$4faf...@reader3.news.tin.it...

---
Ciao Daniele, vista l'ora del tuo post devi essere un notturno (tipo 
vampiro), scherzo!
Scusa per il ritardo con cui rispondo; oggi si corre sempre.
L'espressione del DCount () già la utilizzo, però quando vado a cancellare 
un record della sottomaschera, pur facendogli fare un requery dopo la 
conferma di cancellazione record ed anche un aggiornamento, il numero 
progressivo non cambia. Mi spiego meglio: inserisco la prima località che 
all'estrazione dei record avrà il nr 1 , poi la 2, poi la 3, e così via, ma 
se vado a cancellare la località 2, la query dovrebbe riaggiornarsi mettendo 
in ordine  i record con i nr. 1 e 2, invece restituisce i record lasciando i 
nr. 1 e 3. Inoltre se vado al record successivo della form principale, nella 
sottomaschera delle località visualizzo i progressivi delle località 
inserite in collegamento ai record precedenti della form principale, mentre 
io vorrei che nella sottomaschera ci fosse l'ordine numerico delle località 
inserite in quella sottomaschera e non un progressivo di tutte le località 
inserite nella sottomaschera per ogni record della form principale. Strano 
questo comportamento! Per questo volevo provare l'altra soluzione che mi 
ispira, purtroppo anche l'SQL è arabo per me; non so per te. Se ci capisci 
in materia ti sarei grato se provassi un dbase con due campi denominati come 
i miei; a tal fine ti scrivo il nome della mia query che è uguale  a quello 
della tabella:  Qry_141_Località_Itinerario.
Mille grazie, Bruno 

uguale  a quello della tabella:  Qry_141_Località_Itinerario.
ciao Bruno
Daniele 

 ha scritto nel messaggio 
news:495a4ca0$0$1117$4faf...@reader3.news.tin.it...

-----------------
Ciao Daniele,
sono a conoscenza ancher di questa funzione tratta dal sito comune, 
purtroppo ho la necessità di una funzione che mi numeri le righe estratte e 
le rinumeri se cancello un record. questo al fine di avere un numero univoco 
per poter leggere un campo del record successivo.
Mille grazie comunque, Bruno

 ha scritto nel messaggio 
news:gjl46g$3qs$1...@tdi.cu.mi.it...

Ciao Bruno
credo di aver capito ....
in pratica ti servirebbe un requery della maschera o query dopo eliminazione 
record
giusto?
allora nell'intestazione maschera ci metti un pulsante e su clic:
DoCmd.RunCommand acCmdDeleteRecord
Me.Requery
nella query usa la funzione di Karl:
NumIncr: DCount("Id";"Prodotti";"Id<" & [Id])+1
Daniele 

 ha scritto nel messaggio 
news:495e2444$0$1124$4faf...@reader1.news.tin.it...

--------------------
Ciao e buon inizio anno 2009.
Per ora ho risolto aggiungendo un numero costante "1" in tabella ed ho 
utilizzato una'espressione somma DSum(), sembra funzionare bene; vorrei 
evitare requery ad ogni modifica apportata ai record. comunque ci voglio 
studiare ancora un pò sù.
Inoltre con tale metodo, forse da me applicato in modo errato, non rinumera 
i record correlati alla chiave primaria dela form principale, ma da una 
sequenza per tutti i record inseriti.
Ciao e mille grazie per il consiglio.
Bruno