Spero di essere stato chiaro.
Grazie.
Se la tabella si chiama Tabella1 e i buchi contengono solo un record come
nel tuo esempio (ovvero non possono mancare due record consecutivi), il
codice SQL della query potrebbe essere questo:
SELECT IIf([ID]<>1,IIf(IsNull(DLookUp("ID","Tabella1","ID=" &
[ID]-1)),[ID]-1,Null),Null) AS Pippo
FROM Tabella1
WHERE ((Not (IIf([ID]<>1,IIf(IsNull(DLookUp("ID","Tabella1","ID=" &
[ID]-1)),[ID]-1,Null),Null)) Is Null));
Se invece è prevista la mancanza di più record consecutivi, ad esempio 1 2 e
5, la query restituirebbe solo il valoro dell'ultimo, ovvero 4, ma non ti
segnalerebbe come mancante anche il 3.
Potresti però risolvere il problema avendo il risultato che ti serve in una
tabella di appoggio chiamata Mancanti, costituita da un solo campo di tipo
numerico chiamato NumMancante (che ne sarebbe anche la chiave primaria); la
tabella verrebbe popolata con questo codice VBA:
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM Mancanti;"
DoCmd.SetWarnings True
Dim rst As Recordset
Dim rstManca As Recordset
Dim Manca As Long
Dim Pippo As Long
Manca = 1
Set rstManca = CurrentDb.OpenRecordset("Mancanti")
Set rst = CurrentDb.OpenRecordset("Tabella1")
rst.MoveFirst
Do Until rst.EOF
If Manca = rst!ID Then
Manca = Manca + 1
rst.MoveNext
Else
For Pippo = Manca To rst!ID - 1
rstManca.AddNew
rstManca!NumMancante = Pippo
rstManca.Update
Next Pippo
Manca = Pippo + 1
rst.MoveNext
End If
Loop
Set rst = Nothing
Set rstManca = Nothing
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
[CUT]
> --
> Roberto
>
> ---------------------------------------------
> il Sito Comune di it.comp.appl.access:
> http://www.sitocomune.com
> ---------------------------------------------
Grazie Roberto,
visto le mie esigente ho scelto la seconda strada...
Ciao.
Machiavellico! ;-))
--
Silvio
il sito comune di it.comp.appl.access:
http://www.sitocomune.com
[CUT]
Scusa se riprendo un un vecchio quesito, ma mi sorto un dubbio, il tutto
funziona se il campo è un ID, e se invece vorrei controllare un salto di
numerazione di un campo numerico, come dovrei fare?
Grazie.
Old-Jack!
Forse vuoi dire nel caso in cui il Tipo dati del campo ID anziché essere di
tipo Contatore è di tipo Numerico?
Se le cose stanno così, occorre che, per tranquillità, tu apra il recordset
rst, anziché direttamente su Tabella1, su una query basata su Tabella1 che
ordini le sue righe per il campo che contiene il valore progressivo "con i
buchi".
Questo è comunque indispensabile per come è architettata la routine VBA che
ti ho postato.
Il problema cambia sostenzialmente nel caso in cui il campo che contiene il
numero progressivo da controllare abbia un tipo dato di tipo Testo.