Salve.
Sono alle prime armi con Visual Basic.
Lo sto utilizzando principalmente per personalizzare maschere di un DataBase Access.
In pratica ho una maschera che deve creare, in base ad una quantità inserita (Me.Sel_Qta) da utente (n), n righe in una tabella apposita (TDettLotto) in cui vi è una matricola identificativa per riga.. tale matricola identificativa è generata dalla data inserita e un numero progressivo.
Però il numero progressivo si deve azzerare quando l'anno cambia.
La matricola è fatta così:
se la data inserita è 12/12/2007 (gg/mm/aaaa - d è il decennio)
e nella tablla TDettLotto vi è come massimo numero progressivo 12

la matricola dovrebbe essere : S/Nammgg0013d = S/N7121200130

il problema è che come ho fatto io nn mi genera mai il nuemro progressivo incrementando di 1; in pratica mi da sempre 1 come se fosse sempre null la condizione Dmax e quindi visto che Id_Matricola è chiave non mi inserisce nulla oltre la prima riga. Significa che la condizione del DMax è sbagliata. MA perchè? e poi comunque perchè non mi incrementa di 1 per la riga successiva?

io ho fatto così:


Dim Conta As Integer
Dim Num_progr_val As String
Dim Num_progr_str As String
Dim Matricola As String
Dim StrSQL As String
Dim Progr2 As String

For Conta = 1 To Me.Sel_Qta

If IsNull(DMax("[Num_progr]", "TDettLotto", (Left("Id_Matricola", 1) = Right(Year(Me.Sel_Data), 1)) And (Right("Id_Matricola", 1)) = Left(Right(Year(Me.Sel_Data), 2), 1))) Then
Num_progr_val = 1
Else
Num_progr_val = (DMax("[Num_progr]", "TDettLotto", (Left(Id_Matricola, 1) = Right(Year(Me.Sel_Data), 1)) And (Right(Id_Matricola, 1)) = Left(Right(Year(Me.Sel_Data), 2), 1))) + 1
End If

Num_progr_str = IIf(Num_progr_val > 1000, Num_progr_val, IIf(((Num_progr_val < 1000) And (Num_progr_val > 100)), "0" & Num_progr_val, IIf(((Num_progr_val < 100) And (Num_progr_val > 10)), "00" & Num_progr_val, "000" & Num_progr_val)))

Matricola = "S/N" & Right(Year(Me.Sel_Data), 1) & IIf(Month(Me.Sel_Data) > 10, Month(Me.Sel_Data), "0" & Month(Me.Sel_Data)) & IIf(Day(Me.Sel_Data) > 10, Day(Me.Sel_Data), "0" & Day(Me.Sel_Data)) & Num_progr_str & Left(Right(Year(Me.Sel_Data), 2), 1)

StrSQL = "INSERT INTO TDettLotto ([Cod_Lotto], [Id_Matricola], [Num_progr], [Note]) SELECT '" & Me.Sel_Id_lotto & "', '" & Matricola & "', " & Num_progr_val & ", '" & Me.Sel_Note & "';"
MsgBox StrSQL
DoCmd.RunSQL (StrSQL)

Next Conta