Newsgroup: it.comp.appl.access
Titolo: Campo Contatore particolare

Ciao a tutti, vi pongo il mio quesito
su una maschera ho posto una casella di testo [NumeroVerbale] nelle cui
propriet� come ho messo quanto segue:
VALORE PREDEFINITO="V" &
Format(IIf(IsNull(DMax("[NumeroVerbale]";"[tb_RegistroVerbali]";"[NumeroVerbale]
like 'V???/" & Format(Date();"yyyy") &
"'"));1;Mid(DMax("[NumeroVerbale]";"[tb_RegistroVerbali]";"[NumeroVerbale]
like 'V???/" & Format(Date();"yyyy") & "'");2;3)+1);"000") & "/" &
Format(Date();"yyyy")
Che � un contatore che ad ogni apertura della maschera mi da un
progressivo:
V001/2010
V002/2010
V003/2010
.........
NB che all'inizio di ogni anno il contatore riparte da 1
Fino qui � ok.
Sulla stessa maschera oltre alla casella di testo di cui sopra c'� anche
una Listbox "lbx_Compartimento" che pesca dati dalla tabella
tb_Compartimento (e che contiene solo il campo "NomeCompartimento")
                             DOMANDA:
E' possibile modificare quella stringa SQL (di cui sopra) in modo tale da
far si che facendo click su un elemento della listbox
il campo contatore [NomeVerbale] si comporti quanto segue?:
- Il campo contatore deve ripartire da 1 all'inizio di ogni anno
- Facendo click su un elemento della listbox deve verificare che se:
   1)se non c'� nessun [NomeVerbale] per quel elemento selezionato 
     allora parte da 1.
   2)se � gia presente uno o piu [NomeVerbali] allora verr� incrementato
di 
     1
Forse chiedo i numeri, ma vi garantisco che mi risolve una grossa rogna 
Spero che qualcuno di voi di buon cuore voglia darmi una mano.
Vi ringrazio
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Ovviamente sono aperto a considerare alternative da voi proposte



Ciao Domy,
tempo fa ho fatto una cosa del genere legando il numero incrementale
alla persona (ID=" & ID); cioè per ogni persona diversa il contatore
riparte da 1 ( e ricomincia da 1 con un nuovo anno):
Me.TuaCasella = Format(Nz(Mid(DMax("TuoCampo", "TuaTabella", "ID=" &
ID & " and TuoCampoContatore like '????/" & _
Format(TuoCampoData, "yyyy") & "'"), 1, 4), 0) + 1, "0000") & "/" &
Format(TuoCampoData, "yyyy")
Naturalmente devi adattare il nome vero dei campi e della tabella
cercando di interpretare bene la routine per adattarla alle tue
esigenze.
Ciao Vladimiro.

 Ciao Vladimiro.
Ciao Vladimiro non riesco ad adattare il codice che mi hai scritto.
Non sono pratico.
Potresti darmi una mano ???  ..se puoi???
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnala
 gli abusi ad 
ab...@newsland.it
Vediamo se riesco con un piccolo esempio.
Ho due tabelle, la prima "Tbl_Fornitori" con due campi
"ID" (contatore), "Nominativo" (testo); la seconda tabella
"Tbl_Ordini" con quattro campi "IDfornitore" (numerico),"Prodotto
(testo), "DataConsegna" (Data/ora),"Progressivo" (numerico).
Creo la relazione 1 a molti tra "ID" e "IDfornitori" in modo da avere
per ogni fornitore tanti prodotti.
Creo una maschera principale con origine record "Tbl_Fornitori" e una
sottomaschera con origine record "Tbl_Ordini" collegando campi master
con "ID" e campi secondari con "IDfornitore" ( puoi anche crearti
maschera e sottomaschera con la creazione guidata).
A questo punto, dopo aver inserito nella maschera principale i
fornitori, comincio ad inserire nella sottomaschera i prodotti con la
relativa data di consegna inserendo su dopo aggiornamento della
casella di testo che trae origine controllo dal campo "DataConsegna"
il suddetto codice( ho fatto in modo per non farti sbagliare, di
inserirlo tutto su una stessa riga) così modificato:
If Not IsNull(Me.DataConsegna) Then
Me.Progressivo = Format(Nz(Mid(DMax("Progressivo", "Tbl_Ordini",
"IDfornitore=" & Parent!ID & " and Progressivo like '????/" & _
Format(DataConsegna, "yyyy") & "'"), 1, 4), 0) + 1, "0000") & "/" &
Format(DataConsegna, "yyyy")
End If
Fammi sapere
Ciao Vladimiro.

 - Mostra testo citato -
Scusa, ho notato due errori, uno è che il campo "Progressivo" deve
essere di tipo testo e non numerico in quanto c'è la barra rovesciata
( / ) e l'altro che non ho eliminato un undescore ( _ ) nel codice:
If Not IsNull(Me.DataConsegna) Then
Me.Progressivo = Format(Nz(Mid(DMax("Progressivo", "Tbl_Ordini",
"IDfornitore=" & Parent!ID & " and Progressivo like '????/" &
Format(DataConsegna, "yyyy") & "'"), 1, 4), 0) + 1, "0000") & "/" &
Format(DataConsegna, "yyyy")
End If
Di nuovo Vladimiro.

 Di nuovo Vladimiro.
Buongiorno e grazie Vladimiro, appena finisco ti faccio sapere.
ps. In pratica il "Progressivo"  viene scritto automaticamente in funzione
della "DataConsegna" inserita (e non in funzione della data del pc, cio�
della funzione Date()? )
Quindi inserendo il codice nell'evento AfterUpdate della casella di testo
[DataConsegna] in [Progressivo] verr� scritto il numero progressivo?
Ti terro' aggiornato sullo sviluppo
Grazie ancora
 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 Di nuovo Vladimiro.
**********************************************************************
Ciao Vladimiro io ho fatto cos�.
Ho due tabelle,
1)la prima "tb_Compartimenti" con un campo "NomeCompartimento" (testo);
2)la seconda tabella "tb_RegistroVerbali" con tre campi
"IdNomeCompartimento" (testo),"DataVerbale" (Data/ora),"NumeroVerbale"
(testo).
Creo la relazione 1 a molti tra "NomeCompartimento" e "
IdNomeCompartiment" in modo da avere per ogni NomeCompartimento  tanti
NumeriVerbali.
Creo una maschera principale con origine record " tb_Compartimenti " 
e una sottomaschera con origine record " tb_RegistroVerbali " collegando
campi master con " NomeCompartimento " e campi secondari con
"IdNomeCompartimento " 
A questo punto, dopo aver inserito nella maschera principale la casella di
testo �NomeCompartimento�, 
Comincio ad inserire nella sottomaschera  le caselle di testo:
�DataVerbale� e �NumeroVerbale�
              FINO QUI TUTTO OK
POI  su DOPO AGGIORNAMENTO della  casella di testo che trae origine
controllo dal campo "DataVerbale"
Private Sub DataVerbale_AfterUpdate()
'GENERA NUMERO VERBALE PROGRESSIVO
If Not IsNull(Me.DataVerbale) Then
Me.NumeroVerbale = Format(Nz(Mid(DMax("NumeroVerbale",
"tb_RegistroVerbali", "IdNomeCompartimento=" & Parent!NomeCompartimento &
" and NumeroVerbale like '????/" & Format(DataVerbale, "yyyy") & "'"), 1,
4), 0) + 1, "0000") & "/" & Format(DataVerbale, "yyyy")
End If
End Sub
           MI DA IL SEGUENTE ERRORE:
�Errore di run-time  2471
L�espressione immessa come parametro di una query ha generato l�errore
seguente: �Bologna� �
Dove 'Bologna' per me era il Compartimento che avevo selezionato prima di
inserire la data.
Secondo te dove sbaglio???
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 seguente: ‘Bologna’ ”
Infatti, non c'entra nulla il campo dove indichi il  compartimento:
IdNomeCompartimento=" & Parent!NomeCompartimento
deve diventare:
IdNomeCompartimento=" & Parent!ID_Compartimento
La proprietà Parent serve per indicare un campo della maschera
principale nel momento in cui l'azione parte dalla sottomaschera.
Ciao Vladimiro.

 Ciao Vladimiro.
Ok Vladimiro risoltoooooooooooooo fungeeeeeeeeeeeeeeeeeeee
grazie infinitamente , senti un ultimissima cosa 
se volessi formattare in questo modo il contatore (con una lettera
davanti):  V001/2010
come dovrei modificare il codice? io ci� smanettato ma non riesco a farlo
funzionare, ho fatto tipo cosi:
Me.NumeroVerbale = "V" & Format(Nz(Mid(DMax("NumeroVerbale",
"tb_RegistroVerbali", "IdNomeCompartimento=" & Parent!ID & " and
NumeroVerbale like '???/" & Format(DataVerbale, "yyyy") & "'"), 1, 3), 0)
+ 1, "000") & "/" & Format(DataVerbale, "yyyy")
ma non funziona. 
che ne dici?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 - Mostra testo citato -
Ciao Domy, puoi fare così, crei nella tabella un altro campo chiamato
NumeroVerbale1 e sulla maschera modifichi tutti i nomi all'interno del
codice "NumeroVerbale" con "NumeroVerbale1", poi sotto allo stesso
codice inserisci Me.NumeroVerbale="V" & Me.NumeroVerbale1"
Ciao Vladimiro.

 - Mostra testo citato -
Ciao Domy, ti scrivo tutta la rouitine :-)
If Not IsNull(Me.DataVerbale) Then
Me.Numeroverbale1 = Format(Nz(Mid(DMax("NumeroVerbale1",
"tb_RegistroVerbali", "IdNomeCompartimento=" & Parent!
NomeCompartimento & " and NumeroVerbale1 like '????/" &
Format(DataVerbale, "yyyy") & "'"), 1, 4), 0) + 1, "0000") & "/" &
Format(DataVerbale, "yyyy")
Me.NumeroVerbale = "V" & Me.Numeroverbale1
End If
Ciao Vladimiro.