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