maxiteris ha scritto:
Direi che è una ottima risposta e che hai centrato il problema.
Ho fatto un ibrido che funzione bene. Il thread nasce dalla necessità come hai indicato tu
di concentrare tutti i controlli in un solo punto e cioè nel beforeupdate che poi permette
di personalizzare i messaggi per ogni campo e richiedere una conferma all'utente cose che
ovviamente delegando al DB non si possono fare.
Diciamo che non ho detto esattamente questo, ed è palese la tua interpretazione volta a sostenere la tua strategia attuale... ma è bene distinguere le cose...!!
La gestione sulle Tabelle consente di fare MOLTISSIMO, anche di discriminare il Controllo/Campo che ha generato il problema in quanto è di norma l'active control... o al massimo il Prevous se si è premuto un Button...
Questo codice poi consente di sapere qual'è il Testo che ha generato l'errore, sempre che l'errore dia di JET...
Private Sub Form_Error(DataErr As Integer, Response As Integer)
End Sub
Tuttavia ci possono essere delle limitazioni, e su questo posso concordare.
maxiteris ha scritto:
Quindi ricapitolando e seguendo questa strada
ho due problemi:
1. duplicazione: nei campi obbligatori la logica è molto semplice una serie di if a cascata. Nel caso però di duplicazione del campo (per esempio nome prodotto) il problema nasce dal fatto che in apertura della maschera non cè un parametro in inserimento o modifica quindi non basta verificare se il nome esiste già come per l'inserimento perchè in modifica chiaramente non funziona. Occorre ricorrere ad una logica che verifichi prima se si è in ins o modif ecc.... molto contorta usando oldvalue etc... Non cè un modo di trovare con una sola condizione se si tratta di duplicato sia in caso di inserimento che di modifica cosi da ricondurre il tutto ad una semplice cascata di IF? Da qui putroppo la scelta ibrida!
Quando sei in modalità di Inserimento Nuovo... c'è una proprietà di Maschera che viene attivata
ma fai attenzione che in questo caso prima di BeforeUpdate viene generato il BeforeInsert...
La proprietà da leggere è [NewRecord].
maxiteris ha scritto:
2. gestione della query su campo esterno:
utilizzando i campi esterni mediante chiave esterna, cosa molto gradita, se viene posto a null il campo da parte dell'utente prima di ogni evento la query definita su "origine riga" del tab dati del campo va giustamente va in errore. Come fare? Stavo pensando di usare il parametro "valido se" ma non riesco a farlo funzionare a dovere? Hai delle idee?
Grazie
Se il Campo non è obbligatorio il campo non è necessario che venga compilato, tuttavia se il campo è Numerico o Stringa l'errore viene generato se viene posto a NULL.
Ti ricordo che NULL è un valore molto particolare e completamente diverso da NullString o "" come si usa spesso in modo erroneo...