Discussion:
Inserire un numero progressivo in un campo di una tabella
(troppo vecchio per rispondere)
Sergio
2008-07-26 17:30:40 UTC
Ciao a tutti,
nella TblOrdini, che contiene già numerosi ordini, ho il campo NumOrd,
numerico, attualmente vuoto, ed il campo AnnOrd, Testo di 2.
Nel campo NumOrd vorrei inserire un numero progressivo che cominci con 1,
nel campo AnnOrd devo inserire "08".
Mentre questa seconda cosa la faccio facilmente con una query di
aggiornamento, per la prima non so come fare.
(Potrei portare la tabella in Excel, sistemarla e riportarla in Access, ma
vorrei capire come fare con Access).
Grazie e a tutti.
Sergio
lucio
2008-07-26 19:56:01 UTC
Ciao Sergio
Post by Sergio
Ciao a tutti,
nella TblOrdini, che contiene già numerosi ordini, ho il campo NumOrd,
numerico, attualmente vuoto, ed il campo AnnOrd, Testo di 2.
Nel campo NumOrd vorrei inserire un numero progressivo che cominci con 1,
nel campo AnnOrd devo inserire "08".
Mentre questa seconda cosa la faccio facilmente con una query di
aggiornamento, per la prima non so come fare.
(Potrei portare la tabella in Excel, sistemarla e riportarla in Access, ma
vorrei capire come fare con Access).
Grazie e a tutti.
Sergio
Consiglio: anno a 4 cifre, è verò che il millenium bug è già passato, ma se
metti le quattro cifre non ti sbagli. Io ti suggerirei di registrare la data
dell'ordine, se ti serve l'anno è sufficiente la funzione year(DataOrdine).

Veniamo al tuo problema.
Usando le query di accodamento (che mi pare sia la tecnica che hai
utilizzato tu), la query potrebbe essere:

INSERT INTO TabellaOrdini ( NumeroOrdine, DataOrdine, .....)
SELECT dmax("NumeroOrdine","TabellaOrdini","year(DataOrdine) = " &
year(date()) +1 AS NumOrd, #" & date() &"# AS DataOrdine, .......

ciao
Sergio
2008-07-27 08:56:07 UTC
Ciao Lucio,
innanzitutto grazie per la risposta.
Io uso una query di aggiornamento, non di accodamento, perchè il mio
problema è intervenire su dati esistenti, non aggiungere record alla
TblOrdini.
Inoltre lavoro con la query in Visualizzazione Struttura, non in
Visualizzazione SQL (perchè non sono capace!), quindi non so come adattare
il codice che mi hai scritto alle mie esigenze.
Detto ciò, ho impostato DatOrd a Testo di 4, come da tuo suggerimento.
Nella riga Aggiorna della query ho impostato, sotto al campo DatOrd,
Year([DataOrdine]), e fin qui ci siamo, sotto NumOrd ho messo, per fare una
prova, 1.
Il codice SQL che ho ottenuto è:

UPDATE TblOrdini SET TblOrdini.AnnOrd = Year([dataordine]), TblOrdini.NumOrd
= 1;

... e qui sono fermo.

Se hai voglia di aiutarmi di nuovo, ti ringrazio.
Ciao!
Sergio
Post by lucio
Ciao Sergio
Post by Sergio
Ciao a tutti,
nella TblOrdini, che contiene già numerosi ordini, ho il campo NumOrd,
numerico, attualmente vuoto, ed il campo AnnOrd, Testo di 2.
Nel campo NumOrd vorrei inserire un numero progressivo che cominci con 1,
nel campo AnnOrd devo inserire "08".
Mentre questa seconda cosa la faccio facilmente con una query di
aggiornamento, per la prima non so come fare.
(Potrei portare la tabella in Excel, sistemarla e riportarla in Access, ma
vorrei capire come fare con Access).
Grazie e a tutti.
Sergio
Consiglio: anno a 4 cifre, è verò che il millenium bug è già passato, ma se
metti le quattro cifre non ti sbagli. Io ti suggerirei di registrare la data
dell'ordine, se ti serve l'anno è sufficiente la funzione
year(DataOrdine).
Veniamo al tuo problema.
Usando le query di accodamento (che mi pare sia la tecnica che hai
INSERT INTO TabellaOrdini ( NumeroOrdine, DataOrdine, .....)
SELECT dmax("NumeroOrdine","TabellaOrdini","year(DataOrdine) = " &
year(date()) +1 AS NumOrd, #" & date() &"# AS DataOrdine, .......
ciao
giorgio rancati
2008-07-27 09:40:37 UTC
Post by Sergio
Ciao a tutti,
nella TblOrdini, che contiene già numerosi ordini, ho il campo NumOrd,
numerico, attualmente vuoto, ed il campo AnnOrd, Testo di 2.
Nel campo NumOrd vorrei inserire un numero progressivo che cominci con 1,
nel campo AnnOrd devo inserire "08".
Mentre questa seconda cosa la faccio facilmente con una query di
aggiornamento, per la prima non so come fare.
(Potrei portare la tabella in Excel, sistemarla e riportarla in Access, ma
vorrei capire come fare con Access).
Ciao Sergio,

dunque...
Io metterei il campo AnnOrd come Intero che occupa solo 2 byte e permette di
memorizzare, oltre ai negativi, valori positivi da 0 a 32.767 quindi anche
l'anno in formato esteso 2008 (poca spesa tanta resa)
Per il campo NumOrd metterei InteroLungo che occupa 4 byte e permette di
memorizzare, oltre ai negativi, numeri positivi da 0 a 2.147.483.647
Poi andrei a creare un indice univoco composto dai due campi AnnOrd+NumOrd

Adesso veniamo alla numerazione.
In base a quale criterio si vuole numerare gli ordini ?
Sicuramente il primo criterio è la data da cui si ricava anche l'anno, ma
ovviamente possono esserci più ordini in una stessa data, quindi seconda
domanda: hai un campo ti tipo contatore o di altro tipo che identifica in
modo univoco il record ?
Se la risposta è sì possiamo fare una query di aggiornamento, se la risposta
è no bisogna ricorrere a VBA.

Ciao
--
Giorgio Rancati
[Office Access MVP]
Sergio
2008-07-27 09:54:07 UTC
Ciao Giorgio,
d'accordo per le modifiche sul tipo dei campi.
Sì, la tabella ha un campo IDOrdine, contatore e chiave.
Il criterio con cui voglio numerare gli ordini è:
posto che la tabella è in ordine di contatore (IDOrdine), vorrei immettere 1
nel campo NumOrd del primo ordine, 2 nel successivo e così via fino in fondo
alla tabella.
Grazie e ciao.
Sergio
Post by giorgio rancati
Post by Sergio
Ciao a tutti,
nella TblOrdini, che contiene già numerosi ordini, ho il campo NumOrd,
numerico, attualmente vuoto, ed il campo AnnOrd, Testo di 2.
Nel campo NumOrd vorrei inserire un numero progressivo che cominci con 1,
nel campo AnnOrd devo inserire "08".
Mentre questa seconda cosa la faccio facilmente con una query di
aggiornamento, per la prima non so come fare.
(Potrei portare la tabella in Excel, sistemarla e riportarla in Access,
ma vorrei capire come fare con Access).
Ciao Sergio,
dunque...
Io metterei il campo AnnOrd come Intero che occupa solo 2 byte e permette
di memorizzare, oltre ai negativi, valori positivi da 0 a 32.767 quindi
anche l'anno in formato esteso 2008 (poca spesa tanta resa)
Per il campo NumOrd metterei InteroLungo che occupa 4 byte e permette di
memorizzare, oltre ai negativi, numeri positivi da 0 a 2.147.483.647
Poi andrei a creare un indice univoco composto dai due campi AnnOrd+NumOrd
Adesso veniamo alla numerazione.
In base a quale criterio si vuole numerare gli ordini ?
Sicuramente il primo criterio è la data da cui si ricava anche l'anno, ma
ovviamente possono esserci più ordini in una stessa data, quindi seconda
domanda: hai un campo ti tipo contatore o di altro tipo che identifica in
modo univoco il record ?
Se la risposta è sì possiamo fare una query di aggiornamento, se la
risposta è no bisogna ricorrere a VBA.
Ciao
--
Giorgio Rancati
[Office Access MVP]
giorgio rancati
2008-07-27 10:30:31 UTC
Post by Sergio
Ciao Giorgio,
d'accordo per le modifiche sul tipo dei campi.
Sì, la tabella ha un campo IDOrdine, contatore e chiave.
posto che la tabella è in ordine di contatore (IDOrdine), vorrei immettere
1 nel campo NumOrd del primo ordine, 2 nel successivo e così via fino in
fondo alla tabella.
ok, perfetto, mi sembra di capire che vuoi numerare secondo la sequenza di
IDOrdine quindi la cosa si semplifica ulteriormente.
Crea una query di aggiornamento, poi....
1) Sotto al campo AnnOrd nella riga "Aggiorna a" metti
----
Year([dataordine])
----
(questo l'hai già fatto nella tua query)

2) Sotto al campo NumOrd nella riga "Aggiorna a" metti
----
DCount('*';'TblOrdini';'Year([dataordine])=' & Year([dataordine]) & ' AND
IdOrdine<=' & [IdOrdine])
----

ovvero aggiorna il campo con il conteggio dei record il cui Anno è uguale e
il cui IdOrdine è uguale o inferiore a quello della riga in esame.

Ciao
--
Giorgio Rancati
[Office Access MVP]
giorgio rancati
2008-07-27 10:35:20 UTC
Post by giorgio rancati
ok, perfetto, mi sembra di capire che vuoi numerare secondo la sequenza di
IDOrdine quindi la cosa si semplifica ulteriormente.
Ovviamente per uno stesso anno, se cambia anno la numerazione riparte da 1.
Post by giorgio rancati
----
DCount('*';'TblOrdini';'Year([dataordine])=' & Year([dataordine]) & ' AND
IdOrdine<=' & [IdOrdine])
----
la riga sopra è intesa come una sola, se vuoi fare il copia/incolla tira su
la parte che è andata a capo.

Ciao
--
Giorgio Rancati
[Office Access MVP]
Sergio
2008-07-27 12:29:36 UTC
Geniale, direi!
Grazie mille Giorgio!
Ciao
Sergio
Post by giorgio rancati
Post by giorgio rancati
ok, perfetto, mi sembra di capire che vuoi numerare secondo la sequenza
di IDOrdine quindi la cosa si semplifica ulteriormente.
Ovviamente per uno stesso anno, se cambia anno la numerazione riparte da 1.
Post by giorgio rancati
----
DCount('*';'TblOrdini';'Year([dataordine])=' & Year([dataordine]) & ' AND
IdOrdine<=' & [IdOrdine])
----
la riga sopra è intesa come una sola, se vuoi fare il copia/incolla tira
su la parte che è andata a capo.
Ciao
--
Giorgio Rancati
[Office Access MVP]