Newsgroup: it.comp.appl.access
Titolo: progressivare secondo alcune condizioni

Ciao a tutti è la prima volta che scrivo al NG e spero possiate
aiutarmi a risolvere il mio problema:
ho la seguente tabella (collegata, fa parte di un programma di
gestione presenze)
codice   data        causale  valore
118      01/01/03      3        60
118      01/01/03      4        30
118      02/01/03      3        30
117      01/01/03      3        60
117      01/01/03      4        30
117      02/01/03      3        30
e vorrei crearne un'altra uguale con l'aggiunta di un particolare
campo progressivo:
codice   data        causale  valore  progress
118      01/01/03      3        60        1
118      01/01/03      4        30        2
118      02/01/03      3        30        1
117      01/01/03      3        60        1
117      01/01/03      4        30        2
117      02/01/03      3        30        1
ovvero creare un campo progressivo che riparta da 1 ogni volta che
cambia la data o che cambi il codice.
Come fare? Grazie per il vostro aiuto.

 Ciao a tutti č la prima volta che scrivo al NG e spero possiate

Devi farlo scrivendo del codice.
Preparati una query sulla tabella che ordini per codice quindi per data.
Poi ti prepari una tabella vuota uguale alla tua, ma con quel campo in piů.
Poi da codice apri due recordset, uno sulla query e uno sulla tabella vuota
Ti fai un ciclo su tutto il recordset della query e, utilizzando delle
variabili d'appoggio, verifichi se il valore del codice o della data č
cambiato rispetto al precedente.
Se non č cambiato incrementi un contatore altrimenti ricominci da 1.
Inoltre, per ogni record scrivi nell'altro recordset, tramite addnew, gli
stessi dati piů il valore del contatore.
Antonio

Ciao a tutti è la prima volta che scrivo al NG e spero possiate
aiutarmi a risolvere il mio problema:
ho la seguente tabella (collegata, fa parte di un programma di
gestione presenze)
codice   data        causale  valore
118      01/01/03      3        60
118      01/01/03      4        30
118      02/01/03      3        30
117      01/01/03      3        60
117      01/01/03      4        30
117      02/01/03      3        30
e vorrei crearne un'altra uguale con l'aggiunta di un particolare
campo progressivo:
codice   data        causale  valore  progress
118      01/01/03      3        60        1
118      01/01/03      4        30        2
118      02/01/03      3        30        1
117      01/01/03      3        60        1
117      01/01/03      4        30        2
117      02/01/03      3        30        1
ovvero creare un campo progressivo che riparta da 1 ogni volta che
cambia la data o che cambi il codice.
Come fare? Grazie per il vostro aiuto.

 Ciao a tutti è la prima volta che scrivo al NG e spero possiate
Veramente è la seconda, con lo stesso quesito.
Perchè non provi a leggere prima le risposte, invece di continuare a postare
le domande'
Antonio

 Ciao a tutti č la prima volta che scrivo al NG e spero possiate

1) copia della tabella origine
2) aggiunta nuovo campo (ha da esse a null inizialmente)
3) update tabella set progress = nz(dmax("progress","tabella","CODICE =
" & CODICE & " and data = "  & data),0)+1
temo pero' che la soluzione di Biso sia piu' performante 
Questa l'ho provata, i risultati ci sono, continuo a essere scettico,
continuero' a farmi i miei bei recordset cosi' come suggerisce Antonio
--
a.cara 
Togli qualcosa dall'email

...



ua.....ua...ua...ua...
ma allora te li cerchi. Pure questo si chiama marco.
Ti vogliono bene, pero'.


 ha scritto nel messaggio
news:d4311add.03020...@posting.google.com...

Se la tabella che contiene i dati si chiama Tabella1 ed ha una struttura
simile a questa:
ID                Contatore e chiave primaria
codice          Numerico
data              Data/ora
causale         Numerico
valore           Numerico
Creati una query che abbia il seguente codice SQL:
SELECT Tabella1.*, DCount("*", "Tabella1", "codice=" & [codice] & " AND
data= #" & Format([data], "mm/dd/yyyy") & "# AND ID < =" & [ID]) AS progress
FROM Tabella1
ORDER BY Tabella1.codice, Tabella1.data, Tabella1.ID;
Se invece il campo codice fosse di tipo Testo, prova con:
SELECT Tabella1.*, DCount("*", "Tabella1", "codice='" & [codice] & "' AND
data= #" & Format([data], "mm/dd/yyyy") & "# AND ID < =" & [ID]) AS progress
FROM Tabella1
ORDER BY Tabella1.codice, Tabella1.data, Tabella1.ID;
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 a.cara
Naturalmente ho postato quella query a Marco solo per farti piacere e per
permetterti quindi di bestemmiare in piena libertà! :-))


 necessario alla risoluzione del mio problema? Grazie di tutto. Ciao.
Magari se replicavi al vecchio thread con la mia risposta era meglio...
dim rst1 as recordset, rst2 as recordset
dim oldcod as string, olddata as string
dim i  as integer, cod as integer
set rst1 = currentdb.openrecordset("Queryordinata")
set rst2 = currentdb.openrecordset("Nuovatab")
oldcod = "W JUVE"
oldData = "01-01-01"
rst1.movefirst
do until rst1.EOF
  newcod = rst1.fields("cod")
  newData = rst1.fields("data")
  if newcod <> oldcod or newdata <> olddata then
    cont = 1
  else
    cont = cont + 1
  end if
  rst2.addnew
  for i = 0 to rst1.fields.count - 1
    rst2.fields(i) = rst1.fields(i)
  next i
  rst2.fields("prog") = cont
  rst2.update
  rst1.movenext
  oldcod = newcod
  olddata = newdata
loop
set rst1 = nothing
set rst2 = nothing
Buttata giů ad occhio senza testarla...
Antonio

 ---------------------------------------------


 
sarebbe cmq molto "dura". Dovrei fare il fioretto sul fioretto.
L'innominabile sta facendo di tutto per farmelo rompere


 necessario alla risoluzione del mio problema? Grazie di tutto. Ciao.
marco! il codice del Biso non e' buono.
Contiene un errore fondamentale.


 Contiene un errore fondamentale.
Stai parlando della Juve, o di qualcosa di serio?!?
Antonio


ovviamente, la prima che hai detto


 Togli qualcosa dall'email
--


...


 ciao.
Tu hai definito rst1 come recordset?
Il problema però può essere che usi A2000 e quindi ci sono le librerie ADO
che io non conosco e non uso e non so la sintassi.
Deve essere solo lì il problema.
Lancia un thread sulla sintassi DAO/ADO caso mai...
o guardati l'help sulla dichiarazione e l'uso dei recordset
Antonio


Nel codice VBA che ti ha postato Antonio, sostituisci questa riga:
dim rst1 as recordset, rst2 as recordset
 con:
dim rst1 as DAO.recordset, rst2 as DAO.recordset
e poi aggiungi al tuo database i riferimenti alla libreria Microsoft DAO.


...



Una domandina un po' OT:
ma dove č possibile leggere e imparare bene la sintassi di questi
comandi relativi ai recordset?
Per esempio vedo che rst.fields accetta sia un parametro stringa es:
("cod") che un parametro numerico (i).
Mi piacerebbe inparerne di piů
Grazie
Filippo

 Mi piacerebbe inparerne di più
Io ho imparato queste cose facendo le prove e spulciando pesantemente l'help
on line.
Ovviamente la parte di algoritmo è un retaggio dell'università, quando ti
insegnavano 'ste cose, i cicli ecc., ma nulla che con l'esperienza non si
possa imparare.
Però va "perso" (e sottolineo le virgolette) del tempo con l'help!!!
Antonio

 metterò a studiare qualche manuale di codice per Access.
Se poi studiassi anche il post "istruzioni per l'uso" di Roberto, dove trovi
anche che si scrive DOPO il quoting, sarebbe anche meglio!!!
Antonio