Newsgroup: it.comp.appl.access
Titolo: numero progressivo di riga in una tabella!

Salve a tutti,
ho la necessità di numerare progressivamente i campi di una
sottomaschera partendo da zero ad ogni nuovo record. Ho letto già
tutti gli altri post sul tema e provato gli esempi sul sito comune e
scaricato l'esempio dal sito della microsoft. Il mio problema
principale è che questo numeretto deve essere salvato in un campo di
una tabella!
Come posso risolvere? Qualche suggerimento!
Ciao e grazie,
Luigi

 ha scritto nel messaggio 
news:1170520901.2...@m58g2000cwm.googlegroups.com...


Ciao e grazie,
Luigi
-------------------------
Maschera e sottomaschera saranno legate da un join di tipo uno a molti: ad 
un record della maschera corrispondono uno o più record della sottomaschera. 
Giusto?
Immagino che il "numeretto" lo devi salvare nella tabela secondaria, giusto?
Se è così nella sottomaschera (tabella) avrai un ID progressivo (opzionale), 
un ID di join con la maschera (tabella) principale e un "numeretto" (campo) 
che dovrebbe ripartire da zero per ogni nuovo record inserito nella maschera 
(tabella) principale. Giusto?
Per esempio alla fattura 1 corrispenderanno 1 o più dettagli articolo che 
avranno questa numerazione:
IDFattura 1
Numeretto 1
Articolo 1
IdFattura 1
Numeretto 2
Articolo 2
IDFattura 1
Numeretto 3
Articolo 3
e così via
Dimmi se è così che funziona o se è così che vuoi funzioni.
Ciao, Carlo

 ha scritto nel messaggionews:1170520901.2...@m58g2000cwm.googlegroups.com...

Perfettamente così!
è possibile?
Ciao e grazie,
luigi

 ha scritto nel messaggio 
news:1170525733....@s48g2000cws.googlegroups.com...

Perfettamente così!
è possibile?
Ciao e grazie,
luigi
---------------------
In questo caso la cosa è molto semplice.
La chiave di tutto è il numero di fattura a video (è solo un esempio). 
Conosciuto questo il "numeretto" sarà il dmax di tutti i record 
dettagliFattura il cui idFattura è quello della maschera, + 1.
Per fare questo è necessario (meglio) creare una query con la sola tabella 
dei dettagli (quella che usi nella sottomaschera) e con due soli campi: il 
campo di join (IDFattura) e il campo "numeretto"; nei criteri del campo 
IDFattura scriverai: Forms!TuoNomeMascheraPrincipale!TuoControlloChiave. 
Salvi la query per esempio con "DimmiNumeretto" e poi fai così:
nella sottomaschera, al controllo "numeretto" scrivi questo codice su 
attivato:
Private Sub Numeretto_GotFocus()
If IsNull(Me.Numeretto) Or Me.Numeretto = 0 Then
Me.Numeretto = Nz(DMax("Numeretto", "DimmiNumeretto"), 0) + 1
End If
End Sub
Ora appena il controllo "numeretto" della sottomaschera riceve il focus.....
Ciao, Carlo

 ha scritto nel messaggionews:1170525733....@s48g2000cws.googlegroups.com...

Bella idea! Non ci sarei mai arrivato!
Ho cambiato i nomi dei campi e dei controlli adegauandoli ai miei e mi
dà errore nella riga dell'if dicendo che c'è un punto, un punto
escalamativo o delle parentesi non utilizzate validamente!
Ho scritto sia come mi hai sugerito tu sia così
Private Sub ProgressivoRigaPerRicetta_GotFocus()
If IsNull(Me.ProgressivoRigaPerRicetta) Or
(Me.ProgressivoRigaPerRicetta = 0) Then
Me.ProgressivoRigaPerRicetta = Nz(DMax("Numeretto", "DimmiNumeretto"),
0) + 1
End If
End Sub
ma mi da sempre errore! Un'ultima cortesia...
grazie
Luigi

 ha scritto nel messaggio 
news:1170529921.0...@s48g2000cws.googlegroups.com...
cut
Bella idea! Non ci sarei mai arrivato!
Ho cambiato i nomi dei campi e dei controlli adegauandoli ai miei e mi
dà errore nella riga dell'if dicendo che c'è un punto, un punto
escalamativo o delle parentesi non utilizzate validamente!
Ho scritto sia come mi hai sugerito tu sia così
Private Sub ProgressivoRigaPerRicetta_GotFocus()
If IsNull(Me.ProgressivoRigaPerRicetta) Or
(Me.ProgressivoRigaPerRicetta = 0) Then
...................
qui ci sono due parentesi di troppo, la prima e l'ultima. La stringa 
diventa:
Private Sub ProgressivoRigaPerRicetta_GotFocus()
If IsNull(Me.ProgressivoRigaPerRicetta) Or
Me.ProgressivoRigaPerRicetta = 0 Then
ecc....
Ciao, Carlo

 ha scritto nel messaggionews:1170529921.0...@s48g2000cws.googlegroups.com...

Continua a darmi lo stesso errore:
uso dell'operatore punto, punto esclamativo o delle parentesi non
valide.
Quando clicco su debug mi porta su questa riga:
If IsNull(Me.ProgressivoRigaPerRicetta) Or
Me.ProgressivoRigaPerRicetta = 0 Then
Il codice completo è il seguente:
Private Sub ProgressivoRigaPerRicetta_GotFocus()
If IsNull(Me.ProgressivoRigaPerRicetta) Or
Me.ProgressivoRigaPerRicetta = 0 Then
   Me.ProgressivoRigaPerRicetta = (Nz(DMax("Numeretto",
"DimmiNumeretto"), 0) + 1)
End If
End Sub
ho provato a scriverla in diecimila modi diversi ma non va!
Un suggerimento...
Ciao e grazie.
Luigi

 ha scritto nel messaggio 
news:1170594457.0...@a75g2000cwd.googlegroups.com...





Ciao e grazie.
Luigi
-----------------------------
Ci sono sempre una o due parentesi parentesi di troppo. Questo il giusto 
codice:
Private Sub ProgressivoRigaPerRicetta_GotFocus()
If IsNull(Me.ProgressivoRigaPerRicetta) Or Me.ProgressivoRigaPerRicetta = 0 
Then
   Me.ProgressivoRigaPerRicetta = Nz(DMax("Numeretto","DimmiNumeretto"), 0) 
+ 1
End If
End Sub
Accertati inoltre che esista la query chiamata "DimmiNumeretto" e che al suo 
interno esista il campo "numeretto".
Il codice va scritto nella sottomaschera in corrispondenza del controllo 
"ProgressivoRigaPerRicetta". Accerta anche la correttezza di questo nome.
La riga incriminata deve risiedere su di un unico rigo e non a capo come qui 
riportata (ma potrebbe essere l'impaginazione di OE).
Così come l'ho scritta io:
If IsNull(Me.ProgressivoRigaPerRicetta) Or Me.ProgressivoRigaPerRicetta = 0 
Then
In ultimo controlla se il tipo di dati di "ProgressivoRigaPerRicetta" è di 
tipo numerico.
Dimenticavo: tra i riferimenti hai DAO?
Al limite mandami il db zippato che te lo aggiusto io.
Ciao, Carlo

 ha scritto nel messaggionews:1170594457.0...@a75g2000cwd.googlegroups.com...

Ciao Carlo,
grazie mille per la pazienza dimostrata. Avevo un valore nel campo
"valore predefinito" della finestra delle proprietà e non me ne ero
accorto! Ora funziona tutto alla perfezione.
Ciao e grazie,
Luigi