Newsgroup: it.comp.appl.access
Titolo: Dmax e doppio criterio

Buonasera a tutti,
la società in cui lavoro sta per "entrare in qualità" e io sto lavorando ad un
piccolo database per la gestione della documentazione che inviamo ai clienti.
Ho due tabelle
Tbl_Documento_doc (descrizione generale del documento)
Tbl_Versioni_doc (elenco delle revisioni del documento)
e relative maschera e sottomaschera di inserimento dati.
Il mio problema è questo: dato che la documentazione puo' avere diverse
revisioni, non necessariamente consecutive (cioè non 01, 02, 03 etc., ma anche
01, 03, 06 e così via, nel caso versioni intermedie venissero scartate prima
della distribuzione al cliente), ho bisogno di controllare che quando io vado ad
inserire una nuova revisione essa non possa essere inferiore alla precedente.
Ad es, se il documento "Pippo" ha già le revisioni 01 e 04 non devo poter
inserire la 02 o la 03.
All'inizio avevo pensato ad una cosa così:
If Me.Revisione <= DMax("[Cod_Versione]", "TBL_VERSIONI_DOC" ) then
Msgbox "ferma tutto, cancella e riscrivi usando il cervello"
E funziona, ma ovviamente mi tiene conto di TUTTA la tabella e di tutti i
documenti.
E' evidente che dovrei limitare il campo d'azione SOLO a quel documento nello
specifico, quindi devo operare sul controllo Revisione, ma anche sul controllo
ID_Documento che è il campo master (si dice così?).
Come posso concatenarli?
Grazie in anticipo per l'aiuto!
Erika

 ha 
scritto nel messaggio news:ocl0h25sn3u6hd265...@4ax.com...

...DMax("[Cod_Versione]", "TBL_VERSIONI_DOC", "nomeCampo1=" & valore1 & " 
And nomeCampo2=" & valore2 & ... )
Ciao.
-- 
Sergio MAZZA 

 And nomeCampo2=" & valore2 & ... )
Ciao Sergio e grazie per l'aiuto, però mi sono un po' incartata (non
è una novità) e sono arrivata qui (ho diviso i due controlli):
Private Sub Revisione_BeforeUpdate(Cancel As Integer)
If Dlookup ("[ID_DOCUMENTO]", "TBL_VERSIONI_DOC", _
            "[Cod_Versione]='" & Me.Revisione & "'") Then
MsgBox "Attenzione! Revisione uguale alla precedente! È impossibile!"
Me.Undo
elseif Me.revisione < DMax("[ID_DOCUMENTO]", "TBL_VERSIONI_DOC", _
            "[Cod_Versione]='" & Me.Revisione & "'") Then
MsgBox "Attenzione! Revisione inferiore alla precedente! È
impossibile!"
Me.Undo
Il Dlookup funziona, ma il Dmax no.
PROBLEMA 1 = Cod_Versione, per una serie di motivi, è testuale. E' un
problema? L'ordinamento è possibile anche con campi non numerici,
quindi...
PROBLEMA2 La condizione posta non funziona neanche per sbaglio.
Ora mi ritrovo nella situazione in cui, se ho inserite le rev. 01 e 04,
non posso inserire un altro 04, ma posso inserire 02 e 03.
Forse ho proprio sbagliato la logica di partenza e mi sto perdendo in
un bicchier d'acqua.
Mi date una dritta, per favore?
Thanks
Erika

 ha scritto nel messaggio news:1158934913....@m73g2000cwd.googlegroups.com...
Questa volta scrivo dall'ufficio, visto che è una cosa di lavoro :)
Ciao Sergio e grazie per l'aiuto, però mi sono un po' incartata (non
è una novità) e sono arrivata qui (ho diviso i due controlli):
Private Sub Revisione_BeforeUpdate(Cancel As Integer)
If Dlookup ("[ID_DOCUMENTO]", "TBL_VERSIONI_DOC", _
            "[Cod_Versione]='" & Me.Revisione & "'") Then
MsgBox "Attenzione! Revisione uguale alla precedente! È impossibile!"
Me.Undo
elseif Me.revisione < DMax("[ID_DOCUMENTO]", "TBL_VERSIONI_DOC", _
            "[Cod_Versione]='" & Me.Revisione & "'") Then
MsgBox "Attenzione! Revisione inferiore alla precedente! È
impossibile!"
Me.Undo
Il Dlookup funziona, ma il Dmax no.
PROBLEMA 1 = Cod_Versione, per una serie di motivi, è testuale. E' un
problema? L'ordinamento è possibile anche con campi non numerici,
quindi...
PROBLEMA2 La condizione posta non funziona neanche per sbaglio.
Ora mi ritrovo nella situazione in cui, se ho inserite le rev. 01 e 04,
non posso inserire un altro 04, ma posso inserire 02 e 03.
Forse ho proprio sbagliato la logica di partenza e mi sto perdendo in
un bicchier d'acqua.
Mi date una dritta, per favore?
Thanks
Erika
[risposta]
Se il problema è non inserire numeri con valore minore di quello appena registrato, la DMax va bene; il vero problema è non hai 
numeri nel campo da controllare ma testo.
Quindi o trasformi il numero in testo quando leggi per il confronto con quello (trasformato) che si sta tentando di inserire o 
(giustamente come hai notato tu) cambi approccio (semplificandoti la vita) cambiando la tipologia del campo nella tabella da testo a 
numerico. Il problema è che manca uno zero davanti al numero? Lo risolvi, in visualizzazione (form/report/etc.etc.), con la funzione 
Format (vedi help attivabile con ALT-F11, poi F1); ma il controllo della "validità" del numero da inserire la faresti così:
(evento prima di aggiornare)
If Me!revisione < DMAx("revisione","TBL_VERSIONI_DOC", _
            "[Cod_Versione]='" & Me.Revisione & "'") then
    msgbox "Riprova! Sarai più fortunato..."
    Cancel = true
    me!revisione.setfocus
endif
La condizione non funzionava perchè probabilmente confrontavi pere (testo: me.revisione) con mele (numeri: [ID_DOCUMENTO]); ma in 
ogni caso non ha senso tutto sto' ambaradam...
Ciao.
-- 
Sergio MAZZA 

endif
Avevo proprio sbagliato tutto. Adesso l'ho sistemato così:
If Me!revisione < DMAx("Cod_Versione","TBL_VERSIONI_DOC", _
            "[ID_Documento]='" & Me.ID_Documento & "'") then
    msgbox "Riprova! Sarai più fortunato..."
    Me.Undo
Solo un'ultima domanda da niubba: perché me!revisione e non me.revisione??
Grazie ancora per l'aiuto!
Erika

Solo un'ultima domanda da niubba: perché me!revisione e non me.revisione??
Ok, mi rispondo da sola:
http://www.mvps.org/access/forms/frm0031.htm
Pero'... perché all'interno della funzione posso continuare ad usare
Me.Revisione?
E, soprattutto, io ho sempre usato il . e non ! in quase tutte le occasioni,
com'č che funziona lo stesso?
Grazie!
Erika

 Erika
Ci sono varie scuole di pensiero (trovi con google i vari messaggi); di sicuro per far riferimento a proprietà/metodi dell'oggetto 
devi utilzzare il punto, da questo io parto per scrivere codice che riesco a leggere in modo semplice utilizzando il punto o punto 
esclamativo.
Ricapitolando:
nomeOggettoPadre!nomeOggettoFiglio.nomeMetodoPropritetà
Ciao.
-- 
Sergio MAZZA 

nomeOggettoPadre!nomeOggettoFiglio.nomeMetodoPropritetà
Chiarissimo!
Grazie ancora
Erika

 Erika
Ciao.
-- 
Sergio MAZZA 

Un po' di libertà non fa mai male...
Sì, è vero, ma non in certi database :))))
In questo sono per la dittatura :)
Grazie!
Erika