Newsgroup: it.comp.appl.access
Titolo: Controllo record prima di aggiornamento

Ho la seguente tabella così composta:
ID [Contatore] chiave prrimaria
Mese [Data/ora]
DataVers [Data/ora]
CC [Numerico, Intero Lungo]
Cognome [Testo]
Nome [Testo]
Ho associato la tabella ad una maschera.
Volevo sapere se è possibile avere un controllo dei dati prima di
aggiornarli?
Ad esempio primo record:
campo Mese: set-02
campo CC: 1324
Secondo record:
campo Mese: set-02
campo CC: 1324
Dove va messo il controllo e soprattutto come si costruisce???
Vi prego aiutatemi...
Alessandra
--------------------------------
Inviato via 
http://usenet.libero.it

 Dove va messo il controllo e soprattutto come si costruisce???
Premi F1, cerca per BeforeUpdate, e trovi esempi già fatti su "Esempio di
convalida di dati utilizzando una routine evento" per la realizzazione via
codice, e "Esempio di convalida dei dati utilizzando una macro" per farlo via
macro.
Ciao. Claudio.

 Dove va messo il controllo e soprattutto come si costruisce???
    E, sopra-soprattutto, di che controllo stiamo parlando?
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------


L'esempio era riferito ai due campi Mese e CC
Ho provato ad impostare il seguente codice, ma non verifica nulla... dov'è
che sbaglio...
Private Sub Form_BeforeUpdate(Cancel As Integer)
If (Not IsNull(DLookup("[Mese]", "tVersamenti", "[Mese]=" &
Forms!mVersamenti!Mese))) _
And (Not IsNull(DLookup("[CC]", "tVersamenti", "[CC]=" &
Forms!mVersamenti!CC))) Then
    MsgBox "Attenzione: lo stipendio è già inserito!", vbCritical, conNomeApp
 
    Cancel = True
    Me.Mese.SetFocus
End If
End Sub
Ciao. Alessandra
+++++++++++++++++++++



Intendo verificare se non vi sono dati duplicati per lo stesso Conto
corrente nello stesso mese.
Ho provato ad impostare il seguente codice, ma non verifica nulla... dov'è
che sbaglio...
Private Sub Form_BeforeUpdate(Cancel As Integer)
If (Not IsNull(DLookup("[Mese]", "tVersamenti", "[Mese]=" &
Forms!mVersamenti!Mese))) _
And (Not IsNull(DLookup("[CC]", "tVersamenti", "[CC]=" &
Forms!mVersamenti!CC))) Then
    MsgBox "Attenzione: lo stipendio è già inserito!", vbCritical, conNomeApp
 
    Cancel = True
    Me.Mese.SetFocus
End If
End Sub
Ciao. Alessandra
+++++++++++++++++++++


 End Sub
    A te interessa quindi verificare se c'e' *almeno* un record con i
criteri immessi. Quindi DCount e non DLookup:
        DCount("*" , "tVersamenti" , ... )
    Poi considera la formula:
        Format([Mese],"yyyymm") & CStr([CC])
che, nel caso:
        [Mese] = set-02
        [CC] = 1324
restituisce:
        2002091324
    Allora dovrai verificare che:
        DCount( _
            "*" _
          , "tVersamenti" _
          , "Format([Mese],'yyyymm') & CStr([CC]) = " _
          & Format(Me.Mese.Value,"yyyymm") & CStr(Me.CC.Value))
sia uguale a zero.
[AC2000;SE&O]


     Perche' allora non...
    Scusa. Ho dimenticato che avevo lasciato questo in sospeso ed ho
inviato.
    Volevo dire: perche' allora non aggiungere alla tabella un indice
univoco sui campi Mese e CC?
    Considera anche che usare un campo Dara/ora per registrare
l'informazione "Mese Anno" potrebbe crearti problemi perche' tu non
consideri la parte Giorno della data ma questa c'e' comunque e potrebbe non
essere sempre quella che ti aspetti, quindi ogni volta che valuti il campo
Mese ne devi tenere conto. Potresti invece usare un campo in cui registri
solo AAAAMM, come testo o come numero. Meglio come testo, forse.



Nel post del 26/09/02 intitolato Aggiornare un campo num...
avevo chiesto se era possibile inserire un numero...
se adesso lo trasformo in testo, la funzione Day che mi avevi proposto non
funziona più!
        Day(DateSerial(Year(DATA),Month(DATA)+1,0))
considera che il campo mese è a tutti gli effetti un campo "data" dove
fisicamente inserisco il giorno mese e anno che poi avevo formattato in
"mmm-aa" nelle proprietà della tabella per visualizzare solo mese e anno.
Se inserisco sempre lo stesso giorno (ad esempio, 1) dici che non funziona
lo stesso?
Mi sono proprio incasinata...
Ciao. Alessandra



Prova con:
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Not IsNull(DLookUp("[Mese]", "tVersamenti", _
"Mese=#" & Format(Me!Mese, "mm/dd/yyyy") & _
"# And CC=" & Me!CC) Then
    MsgBox "Attenzione: lo stipendio è già inserito!"
    Cancel = True
    Me!Mese.Undo
End If
End Sub
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 lo stesso?
    Tranquilla, funziona.
    La mia osservazione era riferita unicamente al fatto che con un campo
data usato solo ai fini di tener conto del mese ed anno devi stare solo un
po' piu' attenta ed operare effettivamente solo con mese ed anno. Quindi in
scrittura devi ricordare di imputare la data come primo giorno del mese, in
lettura devi trascurare la parte giorno o forzarla al valore 1 e nei
confronti ricordarti sempre di confrontare date "primo del mese" e non "date
cosi' come stanno".
