Newsgroup: it.comp.appl.access
Titolo: Far ripartire da 1 un progressivo ad inizio anno

Buona sera a tutto il NG, avrei un problema e spero di poterlo
risolvere con il vostro aiuto visto che da solo non ci sono ancora
riuscito, allora il mio problema sarebbe il seguente; ho implementato
questa funzioncina per estrapolarmi un progressivo numerico, per non
essere vincolato al contatore di default di access, che uso in ogni
form dove ho bisogno di un id, un numero di pratica e tutto quello che
deve essere necessariamente incrementale, escluso purtroppo un
protocollo, che pure mi necessita tantissimo per non dire che e'
indispensabile.
Ora volevo sapere o capire se fosse possibile apportare delle modifiche
alla funzione postata sotto affinche' possa ottenere un protocollo,
considerando che la progressione numerica va bene cosi' com'è c'e'
pero' il problema di abbinare l'anno, ed inoltre da considerare che ad
ogni inizio anno dovrebbe ripartire da 1, il database gira in
multiutenza e devo dire che ho provato a svuotare le tabelle con
l'inizio dell'anno mettendo una form di presentazione che parte
all'apertura dell'applicazione dove in un campo invisibile passavo il
valore dell'anno in corso, quindi con un move last sulla tabella
protocollo andavo a vedere l'ultimo record con quale anno era stato
registrato se l'anno dell'ultimo record era minore dell'anno che
riportava la textbox nascosta allora partiva un query di eliminazione
che mi svuotava la tabella, il problema sta che non appena la tabella
si svuotava mi partiva l'errore perche' giustamente non c'era piu'
nessun record e di conseguenza l'errore di run time era nessun record
trovato, errore che non sono riuscito a gestire...purtroppo non si puo'
dire io sia molto addentrato nella programmazione, scrivo un po di
codice in DAO, ADO lo sconosco totalmente, comunque tutto qui,  mi
scuso per essermi dilungato ma ci tenevo a spiegare bene la cosa.
saluti
Diego
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

diego ha scritto:

nella tua maschera crea un pulsante nuovo record e digita il seguente
codice:
Private Sub nuovo_Click()
On Error GoTo Err_nuovo_Click
'definisce le variabili
Dim pippo As String
Dim Anno, annpip As String
'si posiziona sull'ultimo record
    DoCmd.GoToRecord , , acLast
'cattura dalla data di sistema l'anno corrente
Anno = Right(Year(Now()), 2)
'cattura il numero trasmissione dall'ultima trasmissione
anpip = Right(Me!NrTrasmissione.Value, 2)
pippo = Left(Me!NrTrasmissione.Value, 2) + 1
'se n° trasm. è ad una cifra aggiunge uno zero
If anpip <> Anno Then
pippo = 1
End If
If pippo < 10 Then
'aggiunge al n° trasm. l'anno corrente
    pippo = "0" + pippo + "/" + Anno
Else
    pippo = pippo + "/" + Anno
End If
'nuovo record
DoCmd.GoToRecord , , acNewRec
'setta il n° trasm. al valore elaborato prima
Me!NrTrasmissione.Value = pippo
Exit_nuovo_Click:
    Exit Sub
Err_nuovo_Click:
    MsgBox Err.Description
    Resume Exit_nuovo_Click
 
End Sub


Grazie ora provo e ti faccio sapere

makke' nulla da fare, creo la tabella1 con un campo chiamato pippo, poi
creo la maschera con origine record tabella1 ed il pulsante dove
inserisco la routine, ma apopena clicco mi dice tipo non corrispondente
ed inoltre il prmo record nella tabella1 lo devo inserire manualmente
altrimenti mi dice utilizzo non valido di null
Boh!!!!
comunque grazie per esserti interessato
lo apprezzo moltissimo
saluti 
Diego

diego ha scritto:

pippo è una variabile che contiene il campo NRtrasmissione (formato
indice/anno 01/06)
per evitare di inserire manualmente il primo record, si potrebbe
scrivere
if isnull(me.nrtrasmissione) = true then
anpip = year(now())
pippo = "01"
end if

 end if
Ehm...che vergogna...scusa...Funziona!!!
Grazie di cuore
Saluti 
Diego

diego ha scritto:
scusa br1 pensavo funzionasse ma mi da sempre questo messaggio "Tipo
Non Corrispondente" Su questa stringa: pippo =
Left(Me!NrTrasmissione.Value, 2) + 1
il campo della tabella e' settato come testo cosi' come anche il campo
della maschera, ma dov'è che sbaglio?
Grazie e scusa
Diego

diego ha scritto:

A me funziona,
prova a compilare il progetto se ti dà errore forse manca una
libreria, io ho le seguenti:
visual basic for application
microsoft access xx.0 object library
microsoft DAO 3.6 objects library
ole automation
microsoft activeX data objects 2.1 library
microsoft visual basic for application extensibility 5.3
se non ti funziona dopo aver flaggato queste librerie prova a settare
le variabili come variant

 le variabili come variant
nulla non riesco proprio a farlo funzionare le librerie di riferimento
sono le stesse ed anche impostando le variabili come variant non va...
che dirti 
pazienza
scusa ancora per il disturbo
saluti 
Diego

diego ha scritto:
scusa non e' che posso mandartelo per email cosi' magari vedi dove
sbaglio?

 sbaglio?
TE LO MANDO IO

BR1 ha scritto:

ok grazie tante

mi sono arrivati i due db in acc 97 e 2000 ma non posso scaricarli
perche' nn sono zippati....non voglio darti ulteriori paranoie...ma e'
davvero l'ultima spiaggia!!!
me li potresti rimandare zippati??

diego ha scritto:

e io che non te li avevo zippati per farti un piacere :-)

 diego ha scritto:
ed io ti ringrazio.....ma purtroppo hotmail e' schizzinoso che ci vuoi
fare !!!  :=))

diego ha scritto:
scusami andrea i due file non sono arrivati perche' non li hai mandati
o non sono arrivati perche' hotmail a volte se li perde per strada,
perche' se li ha persi strada facendo sono proprio sfigato!
ciao 
diego

allora ...ci sono riuscito...il problema era che il numero che settavo
manualmente all'inizio non era 01 ma 1 ecco il perche' del tipo non
corrispondente...roba da rimanerci cretini!!!
comunque caro andrea il problema del nullo rimane
se la tabella e' vuota mi da errore nonostante abbia messo
isnull(NrTrasmissione)=true in tutte  le posizioni possibilii ed
immaginabili lungo la routine, il problema rimane, che devo fare???
AIUTOOOOOOOOO!!!

diego ha scritto:

Sull'esempio che ti ho mandato non è così!

> Sull'esempio che ti ho mandato non è così!
BOH.... a me non e' arrivato nulla Hotmail colpisce ancora...che schifo
di popserver

 di popserver
fatto

 di popserver
fatto
Ciao BR1
saresti cosě gentile da mandarlo anche a me l'esempio?
grazie in anticipo
Daniele
ps. togli nospam 

 ps. togli nospam
fatto