Newsgroup: it.comp.appl.access
Titolo: Query per cercare numeri mancanti...

salve a tutti... vediamo se riesco a spiegarmi dato che l'argomento
è un pò complesso..
mi occorrerebbe una query che mi calcola i numeri mancanti cominciando
da 1... ma il problema è un altro...
in una tabella ho un campo N_Protocollo
ed i numeri inseriti sono scritti così...:
1/2000/F234
23/2003/G3356
ossia il primo numero è il progressivo
il secondo è l'anno
ed il terzo è il numero di protocollo sempre
preceduto da una lettera che in tutto sono
5   (F) + (G) + (M) + (I) + (P)...
quindi il mio intento è di sapere per ciascuna lettera
alfabetica i numeri mancanti cominciando da 1...
però capita che (P) arrivi a 500 record
mentre (F) arrivi a 6000 record...
questo mi servirebbe dato che nel DB anagrafico capita
di fare delle cancellazioni per decessi per cui sono rimasti
molti "vuoti"...
spero di essermi spiegato...
Ciao a tutti...

" SuperPippo®" <ik0qddT...@TOGLISPAMlibero.it> ha scritto nel messaggio
news:zLvNa.148794$lK4.4...@twister1.libero.it...

Io te lo saprei anche fare questo, ma:
1) non dici che cosa fare con i numeri trovati liberi.
2) sei sicuro di quello che vuoi fare?
Che ti frega dei buchi? Questi sono codici univoci, quindi se c'è un buco
ciccia, basta che vengano sempre usati numeri mai usati prima. Inoltre,
comunque questi numeri potrebbero avere una storia, secondo me non è
corretto riutilizzarli...
Antonio

 me non è corretto riutilizzarli...
-------------------------
Ciao Antonio...allora rispondo alle tue..lecite domande...
1- questi numeri liberi devo essere assegnati a dei tesserini...[#]
2- SI !
3- le 5 lettere alfabetiche corrispondono all'iniziale del Comune
    ai quali sono assegnati questi numeri di protocollo di tesserino.
    supponiamo il Comune F.. a tutt'oggi è arrivato circa al numero
    6.000... mentre in realtà sono circa 5.600... vuoi per decessi,
    per trasferimenti etc. etc..."potrebbero" avere una storia..
o meglio registrare uno storico... ma supponi che il codice
F345 decede oppure il codice M3456 si trasferisce...
cosa vuoi che importi + ???
quindi quel numero può essere assegnato ad un altro utente....
il tutto per mantenere anche un esatto
    conteggio dell'anagrafica utenti...
    ho fatto queste ricerche lavorando con Excel.. un pò meno ostico
    per me...ma se avessi una routine del genere potrei inserirla
direttamente
    nel Db e risparmierei un bel pò di lavoro...
Ciao...

" SuperPippo®" <ik0qddT...@TOGLISPAMlibero.it> ha scritto nel messaggio
news:%qfOa.154318$lK4.4...@twister1.libero.it...

Faccio un altro tentativo prima di risponderti.
Se F345 decede e tu riassegni il codice ad un altro utente, se poi vai a
fare un'interrogazione, ti vengono fuori anche tutti i movimenti di quello
morto, compresa la morte!!!
Allora eventualmente dovresti salvare una data di cambio assegnazione in
modo da interrogare il sistema solo da lì in poi...
Ma la soluzione più corretta sarebbe quella di aggiungere un campo Sì/No che
ti dice se il numero è attivo o meno. In questo modo i non attivi non li
gestisci per le statistiche e lavori solo con i nuovi codici
Antonio

 codici
questa invece sarebbe stata un'ottima soluzione...se fosse stata
implementata
fin dall'inizio gestione DB (anno 2000).... anche per la ricerca dei
codici mancanti sarebbe stato facile fare un filtraggio...ma c'è un però...
io non li devo gestire solo per le statistiche..  ma anche in pratica...
è inutile scrivere su un tesserino di un paziente F 9599  quando in realtà
ne sono 5000... se dovessi seguire il tuo ragionamento tra 5 anni
si arriverebbe a 15000 ...
questo è il quanto...
se hai ulteriori idee ben vengano...
Ciao...

 > >> mentre (F) arrivi a 6000 record...
Ti prepari una query sulla tabella dei dati che ti restituisca il campo
codice ordinato crescente.
Apri un recordset sulla query.
Ne apri uno su una tabella vuota che abbia due campi, protocollo e numero.
Prendi il primo carattere del codice e lo metti in una var d'appoggio.
Inizi un ciclo su tutto il recordset query, fino all'EOF, e mediante un
contatore testi se il valore del codice è uguale al contatore. Se non lo è
sbatti il valore nella tabella vuota e sposti il contatore al valore
trovato. Ad ogni ciclo switchi il valore del protocollo corrente e lo
confronti con quello precedente. Se è diverso, ricominci col contatore da 1.
Nella tabella avrai i valori liberi.
Questa è la linea guida, poi, se proprio non riesci, vedo se trovo un po' di
tempo per scriverti 'ste du righe di codice...
Antonio

 po' di tempo per scriverti 'ste du righe di codice...
-----------
beh... se non ti disturbo troppo
 ti mando via email solo il campo N_protocollo
così ti rendi conto....
ciao...

 così ti rendi conto....
Perchè non hai aspettato che ti dessi l'ok e soprattutto se te lo davo?!!?
Antonio

 davo?!!?
------------
hai ragione... mea culpa... mi sono lasciato andare .. :o)(
-- 
;o) SuperPippo®

" SuperPippo®" <ik0qddT...@TOGLISPAMlibero.it> ha scritto nel messaggio
news:KADOa.156623$Ny5.4...@twister2.libero.it...

Ok, ora ho visto la struttura dei dati.
Non ricordavo avessi detto che davanti c'era altra schifezza...
La tua struttura è dunque
STR/STR1/Codice
dove STR e STR1 sono stringhe di dimensione variabile e codice è la parte
codice con la struttura ProtocolloNumero
La query deve restituire solo il Codice e ordinato.
La query avrà quindi un campo calcolato consistente nella chiamata ad una
funzione diciamo Spezza([CampoIntero]) dove CampoIntero è tutto il campo
descritto prima cioè STR/STR1/Codice.
Questo campo calcolato dovrà essere ordinato in maniera crescente.
La funzione Spezza sarà fatta così
Public Function Spezza(x as variant) as string
    dim i as integer
    for i = len(x) to 1 step -1
      if mid(x,i,1) = "/" then
        Spezza = right(x, len(x)-i)
        exit function
     end if
    next i
end function
Poi continui come ti avevo già detto
Antonio

 Poi continui come ti avevo già detto
-----------------
scusa Antò... ma non essendo molto pratico di Access.. vedo se ho capito...
la funzione non posso utilizzarla in una query ... giusto ???
quindi che devo fare..?  mi devo prima creare una mask di appoggio ???
potresti essere, per cortesia, un pò dettagliato ???
grazie...

 potresti essere, per cortesia, un pò dettagliato ???
SOOOOOBBBB!!!
Eravamo partiti dicendo che dovevi preparare una query su cui poi aprivi un
recordset per fare tutti i calcoli col contatore per cercare i numeri (e
quello sarà un altro bagno di sangue, già lo so...)
La query ti ho adesso detto come farla.
La funzione la devi scrivere in un modulo e la richiami dalla query come ti
ho detto, come campo calcolato e fornendo come parametro il campo
codicecompleto
Antonio

 campo codicecompleto
--------------
AAAArrgghhhh.. Antò... ma tu dai tutto per scontato....!!!
Mi ricordo quando andavo a sQuola... il mio maestro mi diceva spesso
che un grande pregio degli insegnanti è appunto
quello di riuscire a farsi capire anche da persone che ... non capiscono..
bene la materia... e poi... che termine pittoresco e tragico....
"bagno di sangue".. :-)
cmq... per il momento ho copiato il tuo codice in un modulo
chiamandolo "Spezza"... quindi un passo avanti...
ora viene "il bagno di sangue"..................
???
-- 
;o) SuperPippo®

 Antonio Biso wrote:

---------------------------
Ti sei arreso ehhh !!!

" SuperPippo®" <ik0qddT...@TOGLISPAMlibero.it> ha scritto nel messaggio
news:QXcPa.161997$Ny5.4...@twister2.libero.it...

Eh?
Antonio