Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

estrapolare numeri mancanti da query (access)

166 views
Skip to first unread message

marco

unread,
Mar 11, 2010, 10:28:05 AM3/11/10
to
Ciao a tutti ho creato questo codice per estrapolare i numeri mancanti
(le commesse) da una query inserendo l'anno in una casella di testo
all'interno di una form.
Il risultato è un msgbox con il primo numero mancante, ma vorrei che
mi creasse una tabella o query con tutto l'elenco dei numeri mancanti.
Grazie

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

giorgio rancati

unread,
Mar 11, 2010, 3:59:06 PM3/11/10
to

"marco" <mark...@gmail.com> ha scritto nel messaggio
news:cd07ed82-3bb1-4ed7...@g11g2000yqe.googlegroups.com...

Ciao a tutti ho creato questo codice per estrapolare i numeri mancanti
(le commesse) da una query inserendo l'anno in una casella di testo
all'interno di una form.
Il risultato è un msgbox con il primo numero mancante, ma vorrei che
mi creasse una tabella o query con tutto l'elenco dei numeri mancanti.

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]


marco

unread,
Mar 12, 2010, 4:26:59 AM3/12/10
to
On 11 Mar, 21:59, "giorgio rancati"
<giorgio_No_Spalmer_ranc...@tiscali.it> wrote:
> "marco" <marko...@gmail.com> ha scritto nel messaggionews:cd07ed82-3bb1-4ed7...@g11g2000yqe.googlegroups.com...

> Ciao a tutti ho creato questo codice per estrapolare i numeri mancanti
> (le commesse) da una query inserendo l'anno in una casella di testo
> all'interno di una form.
> Il risultato è un msgbox con il primo numero mancante, ma vorrei che
> mi creasse una tabella o query con tutto l'elenco dei numeri mancanti.
>
> 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

giorgio rancati

unread,
Mar 12, 2010, 4:53:17 AM3/12/10
to

"marco" <mark...@gmail.com> ha scritto nel messaggio
news:830fc599-e15c-40da...@z11g2000yqz.googlegroups.com...

On 11 Mar, 21:59, "giorgio rancati"
>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

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]

marco

unread,
Mar 12, 2010, 5:39:42 AM3/12/10
to
On 12 Mar, 10:53, "giorgio rancati"
<giorgio_No_Spalmer_ranc...@tiscali.it> wrote:
> "marco" <marko...@gmail.com> ha scritto nel messaggionews:830fc599-e15c-40da...@z11g2000yqz.googlegroups.com...

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

giorgio rancati

unread,
Mar 12, 2010, 9:32:53 AM3/12/10
to

"marco" <mark...@gmail.com> ha scritto nel messaggio
news:85f8ecf9-3269-4a7b...@a18g2000yqc.googlegroups.com...

On 12 Mar, 10:53, "giorgio rancati"
<giorgio_No_Spalmer_ranc...@tiscali.it> wrote:

>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.
:-)

marco

unread,
Mar 15, 2010, 6:49:55 AM3/15/10
to
On 12 Mar, 15:32, "giorgio rancati"
<giorgio_No_Spalmer_ranc...@tiscali.it> wrote:
> "marco" <marko...@gmail.com> ha scritto nel messaggionews:85f8ecf9-3269-4a7b...@a18g2000yqc.googlegroups.com...

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

giorgio rancati

unread,
Mar 15, 2010, 8:24:27 AM3/15/10
to

"marco" <mark...@gmail.com> ha scritto nel messaggio
news:804f0330-1b5f-428a...@t20g2000yqe.googlegroups.com...

On 12 Mar, 15:32, "giorgio rancati"

>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

marco

unread,
Mar 16, 2010, 4:16:24 AM3/16/10
to
On 15 Mar, 13:24, "giorgio rancati"
<giorgio_No_Spalmer_ranc...@tiscali.it> wrote:
> "marco" <marko...@gmail.com> ha scritto nel messaggionews:804f0330-1b5f-428a...@t20g2000yqe.googlegroups.com...

Grande Giorgio!
Funziona alla grande!! è proprio quello che volevo!
Ti ringrazio infinitamente.
Ciao Marco

0 new messages