Questo il codice:
Private Sub cmdfiltra_Click()
Dim rs As DAO.Recordset
Dim lngC As Long
Dim lngIndex As Long
Dim lngArr() As Long
If IsNull(txtDaNum) And IsNull(txtANum) Then
CWhere = ""
ElseIf IsNull(txtANum) And txtDaNum <> "" Then
CWhere = " QComm.Comm >='" + txtDaNum + "'"
ElseIf txtANum <> "" And IsNull(txtDaNum) Then
CWhere = " QComm.Comm <= '" + txtANum + "'"
ElseIf txtANum <> "" And txtDaNum <> "" Then
CWhere = " QComm.Comm >='" + txtDaNum + "' AND QComm.Comm <=
'" + txtANum + "'"
End If
If CWhere <> "" Then CWhere = CWhere & " AND "
Set rs = CurrentDb.OpenRecordset("SELECT * FROM QComm WHERE " & CWhere
& " QComm.Anno ='" & Me.txtAnno & "' ORDER BY QComm.Comm")
If rs.EOF Then Exit Sub
rs.MoveFirst
lngC = rs!Comm
Do Until rs.EOF
Do Until lngC <> rs!Comm
If rs!Comm <> lngC Then
lngIndex = lngIndex + 1
ReDim Preserve lngArr(lngIndex)
lngArr(lngIndex) = lngC
End If
lngC = lngC + 1
Loop
rs.MoveNext
Loop
MsgBox "Primo numero mancante trovato n. " & [lngC] & ""
End Sub
Ciao Marco,
vedi:
----
http://www.sitocomune.com/
Sezione Query
2.32 Visualizzare gli eventuali numeri mancanti di un contatore che numera
progressivamente i record di una tabella
----
Ciao
--
Giorgio Rancati
[Office Access MVP]
Ciao Giorgio,
avevo già visto quella soluzione, ma non fa al caso mio.
A me serve una sola colonna con tutti i numeri e non DA A
Nel mio codice il primo numero e in teoria tutti gli altri li trova,
ma non so come fare via codice per restituirmeli in una query.
Grazie
Ciao
ok, allora è semplice, crea una tabella temporanea con un solo campo
numerico, con VBA ci inserisci i numeri che vanno dal numero più basso al
numero più alto della tua tabella, poi per ottenere i numeri mancanti, basta
fare una query di ricerca dati non corrispondenti (c'è anche
l'autocomposizione per farla) tra la tua tabella e la tabella temporanea.
[CUT]
Scusa ma non ho capito molto bene (sono un novello di access).
il mio codice non estrapola già tutti numeri mancanti? (se metto
l'anno nella casella di testo e premo il pulsante filtra il primo
numero mancante me lo da nell msgbox)
quello che manca non è solo il codice che mi inserisce in una query
temporanea tale numeri? (è questo che non riesco a capire come fare)
Grazie
>Scusa ma non ho capito molto bene (sono un novello di access).
>il mio codice non estrapola già tutti numeri mancanti?
a prima vista direi che mostra solo il primo numero mancante.
>(se metto
>l'anno nella casella di testo e premo il pulsante filtra il primo
>numero mancante me lo da nell msgbox)
>quello che manca non è solo il codice che mi inserisce in una query
>temporanea tale numeri? (è questo che non riesco a capire come fare)
Una query non è un contenitore di dati, devi creare una tabella
"TabellaOutput" con almeno un campo "NumeroMancante"
Ipotizzando che nel tuo codice memorizzi i numeri mancanti nell'array lngArr
(altrimenti non saprei proprio a cosa possa servire) allora puoi scorrere
l'array e memorizzare i numeri nella tabella.
In fondo al tuo codice puoi mettere:
----
Dim i As Long
Dim Rsout As DAO.Recordset
'Pulizia TabellaOutput
CurrentDb.Execute "DELETE * FROM TabellaOutput"
'Popolo la TabellaOutput con i valori memorizzati nell'array
Set Rsout = CurrentDb.OpenRecordset("TabellaOutput")
For i = 1 To lngIndex
Rsout.AddNew
Rsout!NumeroMancante = lngArr(i)
Rsout.Update
Next
Rsout.Close
----
ovviamente se hai scritto tu il codice saprai bene a cosa serve l'array.
:-)
Ciao Giorgio,
ti rompo ancora le scatole. Ho provato a fare come mi hai detto, ma
non ottengo alcun risultato aprendo la tabella (TabellaOutput)
Il codice l'ho copiato da un altro post perchè poteva fare al caso
mio, ma è ovvio che per me è ancora un po complicato capire tutto.
L'ho preso come esempio perchè è l'unica cosa che ho trovato che si
avvicina al mio problema.
Tralasciando la seconda parte di codice che ho copiato non riesco a
capire come poter estrapolare dalla lista di numeri che ottengo
lanciando la mia stringa sql quelli mancanti e crearmi una tabella con
tali numeri.
Ti ringrazio per l'aiuto che mi potrai dare.
Ciao Marco
>Ciao Giorgio,
>ti rompo ancora le scatole. Ho provato a fare come mi hai detto, ma
>non ottengo alcun risultato aprendo la tabella (TabellaOutput)
>Il codice l'ho copiato da un altro post perchè poteva fare al caso
>mio, ma è ovvio che per me è ancora un po complicato capire tutto.
>L'ho preso come esempio perchè è l'unica cosa che ho trovato che si
>avvicina al mio problema.
>Tralasciando la seconda parte di codice che ho copiato non riesco a
>capire come poter estrapolare dalla lista di numeri che ottengo
>lanciando la mia stringa sql quelli mancanti e crearmi una tabella con
>tali numeri.
>Ti ringrazio per l'aiuto che mi potrai dare.
Ciao Marco,
ok, ho dato un'occhiata al codice, e non capisco in che modo possa
funzionare!
Compunque per memorizzare i numeri mancanti nella tabellaOutput, cancella
dalla tua riga
>>If rs.EOF Then Exit Sub<<
(compresa) fino alla End Sub (non compresa)
e inserisci al loro posto questo codice.
----
If rs.EOF Then
rs.Close
Set rs = Nothing
Exit Sub
End If
Dim i As Long
Dim Rsout As DAO.Recordset
'Pulizia TabellaOutput
CurrentDb.Execute "DELETE * FROM TabellaOutput"
'Popolo la TabellaOutput
Set Rsout = CurrentDb.OpenRecordset("TabellaOutput", dbOpenDynaset)
rs.MoveFirst
lngC = 1 'Parto dal numero 1
Do Until rs.EOF
Do While lngC < rs!Comm
Rsout.AddNew
Rsout!NumeroMancante = lngC
Rsout.Update
lngC = lngC + 1
Loop
lngC = rs!Comm + 1
rs.MoveNext
Loop
rs.Close
Rsout.Close
Set rs = Nothing
Set Rsout = Nothing
If Nz(DMin("NumeroMancante", "TabellaOutput"), 0) > 0 Then
DoCmd.OpenTable "TabellaOutput"
Else
MsgBox "Non ci sono numei mancanti", vbExclamation
End If
----
Cia
Grande Giorgio!
Funziona alla grande!! è proprio quello che volevo!
Ti ringrazio infinitamente.
Ciao Marco