Newsgroup: it.comp.appl.access
Titolo: Criterio in Query...

ciao a tutti...
ho una query che mi restituisce
tutti i risultati di una stinga di Protocollo
che č composto cosě:
23/2003/F456
1234/2002/P345
i primi numeri sono variabili (Campo Contatore)
il secondo č l'anno
il terzo č il protocollo anch'esso variabile...
e questo č il codice SQL....
SELECT Anagrafe.N_Protocollo
FROM Anagrafe
WHERE (((Anagrafe.N_Protocollo) Like "*P*"));
----------
ebbene vorrei chiedere se e come č possibile
fare 2 cose...
la prima come ordinarli in forma crescente
partendo chiaramente dai numeri dopo la lettera...
la seconda, piů difficilotta, trovare i buchi di protocollo
Ciao e grazie per l'aiuto...

 [CUT]
Xchè non continui con il thread che avevi iniziato un pò di tempo fa?
Antonio Biso ti aveva portato a buon punto ed era anche interessante.
Ora, se ricominci da capo, mi sa che non ne esce niente.
Io continuerò a tener d'occhio il vecchio thread.
Ciao.

 1234/2002/P345
Ho come una sensazione di dejavu
Vuoi dirmi che mi hai fatto sprecare tempo fino a questo punto?!?
Antonio


------------------
hai ragione ... però non sono arrivato ad alcun risultato...

> ora viene "il bagno di sangue"..................

 ricevuto piů risposta... ecco il perchč del mio nuovo 3D !!!
Ho capito...
Perň mi pare che tu non abbia recepito nulla di quanto io avevo detto e mi
stai chiedendo di ricominciare tutto da capo?!?!?
Se non č cosě, potresti riassumere cosa hai capito e dove invece ti stai
bloccando?
Antonio

 stai bloccando?
----------------
allora mi dovresti spiegare in forma elementare e cronologica
cosa devo creare per primo....poi per secondo etc...
questo tuo ultimo messaggio è poco conmprensibile per me..
""....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
---
e qui non ti ho seguito più   :-(

 Antonio Biso wrote:
Devo trovare del tempo da dedicarti...
Antonio

 Devo trovare del tempo da dedicarti...
-------------
Ok... quando avrai tempo ... :-)


Ricapitoliamo:
tu hai una tabella con dei record che hanno un campo fatto cosě
XXX/YYY/A999 che chiamiamo CAMPO
dove XXX e YYY sono stringhe che non ci interessano, A č una lettera che puň
assumere alcuni valori, 999 č un numero intero di grandezza variabile.
Lo scopo č quello di trovare, per ciascuna lettera A usata, tutti i numeri
da 1 al piů grande, che non sono presenti nella tabella.
Il lavoro va scorporato in due fasi:
1) ottenere con una query un recordset ordinato che contenga un solo campo
consistente nella sola parte A999 descritta sopra.
2) Utilizzare questo recordset, via codice, per trovare i numeri mancanti e
sbattere questi numeri in una tabella (che chimiamo RISULTATO) dove pescarli
per usi futuri.
1)
Dopo aver scritto in un modulo la funzione Spezza che ti ho giŕ fornito,
prepara una query sulla tabella originale che restituisca un solo campo
calcolato, fatto cosě
Spezza([CAMPO])
Questo campo calcolato dovrai ordinalo Crescente.
Otterrai qualcosa del genere:
A001
A005
A234
B002
B123
C001
C002
C123
e cosě via
Salva questa query, chiamiamola per esempio QUERY.
2) Ti apri un recordset sulla query QUERY(rst) e un recordset sulla tabella
RISULTATO(rst1). La tabella risultato ha un campo dove mettere la lettera e
uno dove mettere i numeri liberi.
La funzione che DEVI analizzare nel dettaglio sarŕ qualcosa del genere (non
l'ho testata)
cont = 0
old_app = ""
rst.movefirst
do until rst.EOF
  app = left(rst(0),1)
  myval = mid(rst(0),2)
  if app <> old_app then 'se sono passato ad un'altra lettera
    cont = 1
  end if
  if myval <> cont then 'se c'č un buco di numeri non usati
    for j = cont to myval - 1
      rst1.addnew
      rst1(0) = app
      rst1(1) = j
      rst1.update
    next j
    cont = myval
  end if
  cont = cont + 1
  rst.movenext
loop
Antonio

   if myval <> cont then 'se c'è un buco di numeri non usati


 attendo istruzioni....grazie...
Se il campo di cui sopra si chiama n° protocollo, invece di mettere quel
campo nella query scriverai
Spezza([n° protocollo])
