Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Numerazione progressiva record estrati dacon query con campo in query e non in tabella

76 views
Skip to first unread message

Bruno - S95

unread,
Dec 29, 2008, 4:01:02 AM12/29/08
to
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


Bruno - S95

unread,
Dec 29, 2008, 4:07:30 AM12/29/08
to

[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


CIDI

unread,
Dec 29, 2008, 4:33:17 AM12/29/08
to

"Bruno - S95" <mus...@virgilio.it> 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


S95bruno

unread,
Dec 29, 2008, 3:39:10 PM12/29/08
to

[CUT]

>
> ciao Bruno
> vedi se risolvi con questo:
> http://tinyurl.com/9rtk83
>
> 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


CIDI

unread,
Dec 29, 2008, 6:43:34 PM12/29/08
to

"S95bruno" <mus...@virgilio.it> ha scritto nel messaggio
news:gjbcha$1r1$1...@tdi.cu.mi.it...

>
> [CUT]
>>
>> ciao Bruno
>> vedi se risolvi con questo:
>> http://tinyurl.com/9rtk83
>>
>> 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)

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


S95bruno

unread,
Dec 30, 2008, 8:51:04 AM12/30/08
to

"CIDI" <dado...@spamtin.it> 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


CIDI

unread,
Dec 30, 2008, 11:30:26 AM12/30/08
to

"S95bruno" <mus...@virgilio.it> ha scritto nel messaggio
news:gjd91d$btl$1...@tdi.cu.mi.it...

>
> "CIDI" <dado...@spamtin.it> ha scritto nel messaggio

>> 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
> ---
>
> Ciao Daniele, vista l'ora del tuo post devi essere un notturno (tipo
> vampiro), scherzo!

a volte capita di non aver sonno....la vecchiaia ;-)

> 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.

allora questa numerazione automatica dei record puoi ottenerla con due
funzioni simili
3.106 Numerare progressivamente le righe di una maschera/sottomaschera
continua
http://tinyurl.com/85d3gj

>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.

ma questo, pare, che non c'entri niente con la numerazione.
questo dipende da come sono relazionate maschera e sottomaschera, e
collegate
con campi master e secondari. ma potrei non aver capito il problema.

> Strano questo comportamento! Per questo volevo provare l'altra soluzione
> che mi ispira, purtroppo anche l'SQL è arabo per me; non so per te.

pure!...però io parlo un dialetto simile: il siciliano :<))

>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.

ciao Bruno
Daniele


S95bruno

unread,
Jan 2, 2009, 8:18:08 AM1/2/09
to

"CIDI" <dado...@spamtin.it> 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


CIDI

unread,
Jan 2, 2009, 9:27:27 AM1/2/09
to

"S95bruno" <mus...@virgilio.it> 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


S95bruno

unread,
Jan 3, 2009, 8:28:56 AM1/3/09
to

"CIDI" <dado...@spamtin.it> 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


0 new messages