Il 15/05/2019 12:51, @Alex ha scritto:
> Per fare queste cose io di solito scrivo un campo Calcolato valorizzato da 1 Funzione che ha il compito di Leggere il MAX(Progr) alla prima chiamata, poi di incrementarlo...
>
> Es da mettere in un Modulo:
> Option Compare Database
> Option Explicit
>
>
> Private vValue As Variant
>
> Public Function fIncrementa(Optional SetStart) As long
> If not IsMissing(SetStart) Then
> vValue = SetStart
> Exit Function
> End If
> vValue = vValue +1
> End Function
>
> Ovviamente devi impostare il valore di partenza... e lo si fa così:
>
> Quindi:
> Call fIncrementa(Dmax("TuoCampo","TuaTabella"))
> sSQL="INSERT INTO ..... SELECT fIncrementa() As TuoCampoProgressivo, ...."
> DbEngine(0)(0).Execute sSQL,dbFailOnerror
>
> Dovrebbe andare... fai qualche prova.
>
> @Alex
Perdona Alex, ma mi sono dimenticato che il numero progressivo va
incrementato secondo un prezzo di un prodotto che ... decrementa.
In pratica, andrebbe così:
n° Prezzo
1 3,5
2 2,5
3 1,5
4 1,0
5 0,5
per cui applicando la ricerca del massimo valore (Dmax) mi è
controproducente, anche in virtu' del fatto che questa tabella deve
contenere diversi dati che hanno un indice differente (Data fattura in
yyymmdd, num fattura e nome dell'articolo), ma hanno dei progressivi che
comunque si ripetono sempre.
Anyway, seppure lo vedo come una mastur.....ne mentale (e forse e'
proprio cosi'), ho risolto in un modo che secondo me e' formalmente
contorto pero' funzionante:
eseguo dapprima la query di accodamento in modo con il campo del valore
del prezzo decrescente (ovviamente il campo del numero progressivo
rimane vuoto...), dopodiche' apro un recordset e mi ricavo una query che
ha per parametro di ricerca l'indice della fattura (yyyymmdd_NNNN); una
volta che si posiziona sul primo record, imposto Prog=1 e faccio
eseguire una query di aggiornamento inserendo Prog nel campo del
progressivo; scorro il recordset eseguendo un Prog=Prog+1 fino a che il
loop non si esaurisce.
Ho fatto diverse prove e nonostante quello che (a mio avviso e')
l'orrore, mi funziona una meraviglia.