07/10/2023 - Eolo ha scritto:
onestamente ho catto altri DB con lo stesso sistema, francamente non conosco altri metodi, tuttavia ad oggi non mi era mai capitato che facesse questo difetto.
Ciao,
adoperi un concetto e un approccio totalmente sbagliato, non affidabile e imprevedibile.
Devi assolutamente cambiare approccio se vuoi non affidarti alla fortuna.
Per esempio in un modulo puoi creare una function public che restituisce il valore desiderato.
Poi questa la richiami in ogni contesto che vuoi, in una form, in una query, in un report, da codice Vba, etc etc etc…
Esempio:
' GET FIRST FREE CODE
Public Function MyGetFirstFreeCode() As Variant
' retrieve last code
MyGetFirstFreeCode = DBEngine(0)(0).OpenRecordset("SELECT MAX(Code) AS MaxCode FROM TestLastCode;", dbReadOnly).Fields(0).Value
' set retun first free code
If IsNull(MyGetFirstFreeCode) Then MyGetFirstFreeCode = 1 Else MyGetFirstFreeCode = MyGetFirstFreeCode + 1
End Function
Per esempio per ottenere tale valore in una form :
Oppure in una Query :
Per esempio puoi parametrizzare la function passando il nome della tabella e della colonna per la quale si vuole ottenere il primo codice libero, etc etc etc … In questo caso sfrutti la function anche con altre tabelle e sarà sufficiente passare il nome della tabella e il nome della colonna che contiene il codice per il quale si vuole reperire il primo codice libero:
Esempio di come richiamare la function parametrizzata da codice (vedere la sub myTestFirstFreeCode() :
' TEST
Sub myTestFirstFreeCode()
' get first free code
Dim lngNewCodeValue As Long
lngNewCodeValue = MyGetFirstFreeCode("TestLastCode", "Code")
' display first free code
MsgBox lngNewCodeValue
End Sub
'----------------------------------------------------------------
' GET FIRST FREE CODE
Public Function MyGetFirstFreeCode(strYourTableName As String, strYourColumnName As String) As Variant
' retrieve last code
MyGetFirstFreeCode = DBEngine(0)(0).OpenRecordset("SELECT MAX(" & strYourColumnName & ") AS MaxCode FROM " & _
strYourTableName & ";", dbReadOnly).Fields(0).Value
' set retun first free code
If IsNull(MyGetFirstFreeCode) Then MyGetFirstFreeCode = 1 Else MyGetFirstFreeCode = MyGetFirstFreeCode + 1
End Function
In questo caso da Form o da Query si richiamerà la function come segue:
Ricordati che per le colonne di ricerca o come in questo caso per un Numero Progressivo, indicizza sempre la colonna per avere delle prestazioni ottimali.
Per esempio: per la colonna che contiene il codice progressivo impostare:
Insomma, è un semplice esempio che garantisce in ogni circostanza di avere di ritorno un valore certo, sicuro e affidabile e non lasci nulla al caso o alla fortuna sperando che vada sempre bene.
;-))