Discussione:
azzerare progressivo a inizio anno
(troppo vecchio per rispondere)
diego
2006-07-19 09:30:50 UTC
Permalink
Salve a tutti avrei un quesito da porre e spero di trovare risposta,
la mia necessità sarebbe quella di azzerare un progressivo ad inizio
anno e farlo ripartire da zero, ho letto i suggerimenti postati
precedentemente in questo N.G. e ho anche visionato l'esempio
pubblicato sul sito comune alla voce General 6.17, ma benche'
funzionante alla grande non posso utilizzarla in quanto non funziona in
un db condiviso in rete e quindi in multiutenza, come posso fare a
crearmi l'azzeramento automatico ad inizio anno da codice vb
considerando che per incrementare il numerico uso la funzione DMax+1 ?
grazie per l'eventuale aiuto che mi verrà dato.

Saluti

Diego
Alessandro Baraldi
2006-07-19 09:53:21 UTC
Permalink
Post by diego
Salve a tutti avrei un quesito da porre e spero di trovare risposta,
la mia necessità sarebbe quella di azzerare un progressivo ad inizio
anno e farlo ripartire da zero, ho letto i suggerimenti postati
precedentemente in questo N.G. e ho anche visionato l'esempio
pubblicato sul sito comune alla voce General 6.17, ma benche'
funzionante alla grande non posso utilizzarla in quanto non funziona in
un db condiviso in rete e quindi in multiutenza, come posso fare a
crearmi l'azzeramento automatico ad inizio anno da codice vb
considerando che per incrementare il numerico uso la funzione DMax+1 ?
grazie per l'eventuale aiuto che mi verrà dato.
Saluti
Diego
Perchè dici che non funziona in MultiUtenza....?
Se non erro si tratta di Generare l'Indice su Evento BeforeUpdate come
si deve
fare in Multiutenza con qualsiasi sistema di Numerazione da codice.

@Alex
diego
2006-07-19 10:06:40 UTC
Permalink
Ciao Alex sempre disponibile ad aiutare e di questo ti ringrazio
enormemente, allora il codice postato qui sotto e' inserito nell'evento
click del pulsante,


Dim NewProt As Long, varANNO As String
Set miodb = CurrentDb
Set miorst = miodb.OpenRecordset("SELECT * FROM Protocollo WHERE
NPROT=(SELECT MAX(NPROT) FROM Protocollo)")
If miorst.EOF = False Then
NewProt = miorst!NPROT + 1
varANNO = Format(Date, "YY")
miorst.Close
Else
NewProt = 1
varANNO = Format(Date, "YY")

il mio problema sarebbe quello di far ripartire la tabella da zero ad
inizio anno lasciando naturalmente i dati precedenti e non azzerarla,
ho provato con la query pubblicata nel sito comune, inserendo
l'espressione: =Format(Date();"aa") & "/" &
Format(IIf(IsNull(DMax("MioContatore";"MiaTabella";"MioContatore like
'?" &
Format(Date();"aa") &
"/????'"));1;Right(DMax("MioContatore";"MiaTabella";"MioContatore like
'?" & Format(Date();"aa") & "/????'");4)+1);"0000"), debitamente
modificata per l'occorrenza, nella proprietà ValorePredefinito del
controllo ma in multiutenza non funziona se io ed un mio collega lo
proviamo contemporaneamente non c'e' progressione entrambi immetiamo lo
stesso numero progressivo, ecco il mio cruccio, ho pensato di
appoggiarmi ad una tabella per poi svuoltarla manualmente ad inizio
anno ma non mi sembra una cosa elegante da fare se la soluzione puo'
essere diversa.

grazie di nuovo

Diego
Alessandro Baraldi
2006-07-19 11:13:05 UTC
Permalink
Post by diego
Ciao Alex sempre disponibile ad aiutare e di questo ti ringrazio
enormemente, allora il codice postato qui sotto e' inserito nell'evento
click del pulsante,
Dim NewProt As Long, varANNO As String
Set miodb = CurrentDb
Set miorst = miodb.OpenRecordset("SELECT * FROM Protocollo WHERE
NPROT=(SELECT MAX(NPROT) FROM Protocollo)")
If miorst.EOF = False Then
NewProt = miorst!NPROT + 1
varANNO = Format(Date, "YY")
miorst.Close
Else
NewProt = 1
varANNO = Format(Date, "YY")
il mio problema sarebbe quello di far ripartire la tabella da zero ad
inizio anno lasciando naturalmente i dati precedenti e non azzerarla,
ho provato con la query pubblicata nel sito comune, inserendo
l'espressione: =Format(Date();"aa") & "/" &
Format(IIf(IsNull(DMax("MioContatore";"MiaTabella";"MioContatore like
'?" &
Format(Date();"aa") &
"/????'"));1;Right(DMax("MioContatore";"MiaTabella";"MioContatore like
'?" & Format(Date();"aa") & "/????'");4)+1);"0000"), debitamente
modificata per l'occorrenza, nella proprietà ValorePredefinito del
controllo ma in multiutenza non funziona se io ed un mio collega lo
proviamo contemporaneamente non c'e' progressione entrambi immetiamo lo
stesso numero progressivo, ecco il mio cruccio, ho pensato di
appoggiarmi ad una tabella per poi svuoltarla manualmente ad inizio
anno ma non mi sembra una cosa elegante da fare se la soluzione puo'
essere diversa.
grazie di nuovo
Diego
Come ti dicevo non va inserita nel DefaultValue, ma su Evento
BeforeUpdate
o Prina di Aggiornare relativamente alla Form.

Per il resto non ci sono problemi.

@Alex
diego
2006-07-19 13:19:59 UTC
Permalink
Post by Alessandro Baraldi
Come ti dicevo non va inserita nel DefaultValue, ma su Evento
BeforeUpdate
o Prina di Aggiornare relativamente alla Form.
Per il resto non ci sono problemi.
@Alex
forse e' meglio che inizi dal principio, io uso questa funzioneper
determinarmi il progressivo NUMERICO:

Public Function progressivo(NomCampo As String, NomeTab As String)

Dim db As Database
Dim rst As Recordset
Dim Qry1 As String
Set db = CurrentDb
Qry1 = "SELECT 1+Max(" & NomCampo & ") AS newid FROM " & NomeTab

DBEngine.BeginTrans
Set rst = db.OpenRecordset(Qry1, dbOpenDynaset)

progressivo = rst!newid
If IsNull(progressivo) Then progressivo = 1
rst.Close
DBEngine.CommitTrans

End Function

normalmente la uso per gli ID anzicche' usare il campo contatore, ed in
multiutenza funciona in modo eccellente, adesso il volevo usare questa
funzione per creare un protocollo progressivo del tipo 000001/06 e
pensavo di modificare questa funzione implementandola con quella
esptrapolata da sito comune di cui sopra, ebbene non riesco a farla
funzionare mi da sempre errore su AS newid dicendo che occorre la
parentesi o il separatore di campo, comunque caro alex ho provato a
seguire il tuo suggerimento inserendo la query pubblicata nel S.C. non
su valore predefinito ma sull'evento before ed anche after UpDate ma
nulla non funziona ...se io ed il mio collega clicchiamo
contemporaneamente assegna ad entrambi lo stesso numero, sinceramente
nn so come fare, le sto tentando se non tutte , quasi, ma non mi riesce
di trovare la soluzione adeguata sopratutto per azzerare ad inizio
anno, spero in un tuo suggerimento illuminante.

grazie sempre per la tua disponibilità e pazienza, e ringrazio
ovviamente tutti coloro che vorranno darmi suggerimenti in merito.

Saluti

Diego
cidi
2006-07-19 14:41:34 UTC
Permalink
Post by Alessandro Baraldi
Come ti dicevo non va inserita nel DefaultValue, ma su Evento
BeforeUpdate
o Prina di Aggiornare relativamente alla Form.
Per il resto non ci sono problemi.
@Alex
forse e' meglio che inizi dal principio, io uso questa funzioneper
determinarmi il progressivo NUMERICO:

Public Function progressivo(NomCampo As String, NomeTab As String)

Dim db As Database
Dim rst As Recordset
Dim Qry1 As String
Set db = CurrentDb
Qry1 = "SELECT 1+Max(" & NomCampo & ") AS newid FROM " & NomeTab

DBEngine.BeginTrans
Set rst = db.OpenRecordset(Qry1, dbOpenDynaset)

progressivo = rst!newid
If IsNull(progressivo) Then progressivo = 1
rst.Close
DBEngine.CommitTrans

End Function

normalmente la uso per gli ID anzicche' usare il campo contatore, ed in
multiutenza funciona in modo eccellente, adesso il volevo usare questa
funzione per creare un protocollo progressivo del tipo 000001/06 e
pensavo di modificare questa funzione implementandola con quella
esptrapolata da sito comune di cui sopra, ebbene non riesco a farla
funzionare mi da sempre errore su AS newid dicendo che occorre la
parentesi o il separatore di campo, comunque caro alex ho provato a
seguire il tuo suggerimento inserendo la query pubblicata nel S.C. non
su valore predefinito ma sull'evento before ed anche after UpDate ma
nulla non funziona ...se io ed il mio collega clicchiamo
contemporaneamente assegna ad entrambi lo stesso numero, sinceramente
nn so come fare, le sto tentando se non tutte , quasi, ma non mi riesce
di trovare la soluzione adeguata sopratutto per azzerare ad inizio
anno, spero in un tuo suggerimento illuminante.

grazie sempre per la tua disponibilità e pazienza, e ringrazio
ovviamente tutti coloro che vorranno darmi suggerimenti in merito.

Saluti

Diego


Ciao Alex e Diego
mi pare che per funzionare il campo della tabella deve essere di tipo testo.

Daniele
Alessandro Baraldi
2006-07-19 15:42:37 UTC
Permalink
Post by diego
Post by Alessandro Baraldi
Come ti dicevo non va inserita nel DefaultValue, ma su Evento
BeforeUpdate
o Prina di Aggiornare relativamente alla Form.
Per il resto non ci sono problemi.
@Alex
forse e' meglio che inizi dal principio, io uso questa funzioneper
Public Function progressivo(NomCampo As String, NomeTab As String)
Dim db As Database
Dim rst As Recordset
Dim Qry1 As String
Set db = CurrentDb
Qry1 = "SELECT 1+Max(" & NomCampo & ") AS newid FROM " & NomeTab
DBEngine.BeginTrans
Set rst = db.OpenRecordset(Qry1, dbOpenDynaset)
progressivo = rst!newid
If IsNull(progressivo) Then progressivo = 1
rst.Close
DBEngine.CommitTrans
End Function
normalmente la uso per gli ID anzicche' usare il campo contatore, ed in
multiutenza funciona in modo eccellente, adesso il volevo usare questa
funzione per creare un protocollo progressivo del tipo 000001/06 e
pensavo di modificare questa funzione implementandola con quella
esptrapolata da sito comune di cui sopra, ebbene non riesco a farla
funzionare mi da sempre errore su AS newid dicendo che occorre la
parentesi o il separatore di campo, comunque caro alex ho provato a
seguire il tuo suggerimento inserendo la query pubblicata nel S.C. non
su valore predefinito ma sull'evento before ed anche after UpDate ma
nulla non funziona ...se io ed il mio collega clicchiamo
contemporaneamente assegna ad entrambi lo stesso numero, sinceramente
nn so come fare, le sto tentando se non tutte , quasi, ma non mi riesce
di trovare la soluzione adeguata sopratutto per azzerare ad inizio
anno, spero in un tuo suggerimento illuminante.
grazie sempre per la tua disponibilità e pazienza, e ringrazio
ovviamente tutti coloro che vorranno darmi suggerimenti in merito.
Saluti
Diego
Ciao Alex e Diego
mi pare che per funzionare il campo della tabella deve essere di tipo testo.
Daniele
Esatto, ma spero non sia questo il moptivo del Malfunzionamento.....

@Alex
diego
2006-07-19 18:08:09 UTC
Permalink
Post by Alessandro Baraldi
Post by cidi
Ciao Alex e Diego
mi pare che per funzionare il campo della tabella deve essere di tipo testo.
Daniele
Esatto, ma spero non sia questo il moptivo del Malfunzionamento.....
@Alex
ma infatti è un campo testo....ma non va...e non capisco il
motivo...AIUTATEMI !!! (come disse il vigile De Sica)

Continua a leggere su narkive:
Loading...