Campi obbligatori di una maschera di access.

venerdì 04 gennaio 2008 - 18.16

salinis Profilo | Junior Member

Come faccio a definire l'obbligatorietà di inserimento dati dei campi di una maschera di access 2003?

Grazie in anticipo per l'aiuto.

SSUPERPIPPO Profilo | Guru

>Come faccio a definire l'obbligatorietà di inserimento dati dei
>campi di una maschera di access 2003?
>
>Grazie in anticipo per l'aiuto.

Non esiste (che io sappia) una soluzione automatica o gestita da Wizard.

Devi gestire tutto via codice:

Potresti intercettare l'evento Validate del campo di cui vuoi controllare l'obbligatorietà e qui inserire il codice per la verifica del dato inserito, a questo punto potrai decidere se annullare la validazione (cancel=true) oppure no.

Un'altra possibilità è quella di inserire un Command Button che confermi il salvataggio dei dati inseriti, qui inserirai il codice che verificherà se i campi obbligatori sono stati completati o meno.

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

alx_81 Profilo | Guru

>>Come faccio a definire l'obbligatorietà di inserimento dati dei
>>campi di una maschera di access 2003?
>>
>>Grazie in anticipo per l'aiuto.
>
>Non esiste (che io sappia) una soluzione automatica o gestita
>da Wizard.
Non so se ti basta, però puoi impostare i campi obbligatori (che saranno destinazione dell'inserimento) come "Richiesti".
Quando crei una maschera che usa quei campi, viene lanciata un'eccezione che ti nega la possibilità di omettere i campi obbligatori.
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

giordix Profilo | Newbie

dopo che lßutente inserisce i dati tu dovrai fare una faunzione giusto? tipo insert o altro...
se devi fare cosi puoi tramite codice vba fare un istruzione di IF prima della funzione

esempio:
ok=0 IF IsNull(box) Then resp = MsgBox(´devi inserie bla bla´) else ok=1 end if IF ok=1 Then ""la funzione che devi fare""

box e´il nome del box dove l´utente inserisce l´informazione

ps prendi solo l´idea dal mio codice e nn la sintassi che sará sicuramente sbagliata, anche sei il comando IsNull(....) e´quello che ti serve(verifica se quello fra parentesi e´vuoto cioé é NULL)

alpanix Profilo | Junior Member

ciao
la cosa più semplice mi sembrerebbe porre a "Is Not Null" la proprietà "Valido Se" dei campi della maschera
in questo caso, se il record resta completamente vuoto (tutti i campi = Null) non avviene alcun inserimento, altrimenti viene visualizzato un errore nel caso almeno uno dei campi sia = Null
ha lo stesso risultato dei precedenti suggerimenti, ma non intervieni da codice e l'errore si genera direttamente durante l'inserimento

spero ti sia utile
AlPanix

salinis Profilo | Junior Member

E' possibile da codice definire l'obbligatorietà dei campi dell'intera maschera? Cioè scrivere codice solo sulla maschera di nome PIPPO e non su ogni singolo campo. E' una maschera che attraverso un button mi lancia una query di inserimento.


Grazie

alpanix Profilo | Junior Member

>E' possibile da codice definire l'obbligatorietà dei campi dell'intera
>maschera? Cioè scrivere codice solo sulla maschera di nome
>PIPPO e non su ogni singolo campo. E' una maschera che attraverso
>un button mi lancia una query di inserimento.
la soluzione che ti ho proposto io funziona solo se la maschera ha come sorgente una tabella (cioè scrive in tabella direttamente durante la digitazione) con la proprietà "Richiesto" = "Sì" per tutti i campi, come suggerito da Alx81
se vuoi invece un controllo a priori per poi passare all'inserimento tramite query in base alla validità dei dati presenti sulla maschera, in questo caso allora devi intervenire da vba, come hanno scritto Alessandro e giordix
in soldoni, una volta che premi il pulsante che dovrebbe lanciare la query d'inserimento, prima di lanciare detta query deve analizzare il valore di tutti i campi della maschera ed al primo controllo nullo deve uscire un messaggio d'errore
un po' di tempo fa mi pare di aver postato un mdb d'esempio proprio su un tuo thread, con un ciclo For Each ... Next per ogni controllo sulla maschera (non un ciclo per ogni casella di testo o simili ma un ciclo che iniziava il controllo dal primo e finiva all'ultimo, quindi codice scritto direttamente sull'evento "Click" del pulsante)
se lo trovo te lo segnalo



>Grazie
prego

AlPanix

salinis Profilo | Junior Member

Il codice che ho ricevuto è il seguente: Dim oggetto As Object

' E inizio il ciclo per ogni oggetto sull'insieme "Me", la maschera in questo momento attiva
For Each oggetto In Me

' Se l'oggetto è un combo o un textbox lo svuoto
If oggetto.ControlType = acTextBox Or _
oggetto.ControlType = acComboBox Then
' Se l'oggetto non è associato lo svuoto, altrimenti lo lascio com'è
If oggetto.ControlSource = "" Then
oggetto = Null
End If
End If

Next oggetto


Come posso modificare il seguente codice per verificare che tutti i campi siano stati inseriti?

Grazie

alpanix Profilo | Junior Member

>Il codice che ho ricevuto è il seguente: Dim oggetto As Object

grande! non ero ancora riuscito a trovarlo..


>Come posso modificare il seguente codice per verificare che tutti
>i campi siano stati inseriti?

per prima cosa devi automatizzare l'autoincrementazione del campo contatore
questo puoi farlo tramite la funzione DMax (se hai bisogno chiedi pure)
dopo potrai controllare i dati presenti sulla maschera nel seguente modo
(poniamo che sulla maschera ho il pulsante "cmdInserisci" preposto al lancio della query di inserimento, oltre ai campi utili all'inserimento stesso - all'evento Click devi attribuire il seguente codice)

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

>Grazie
prego

AlPanix

salinis Profilo | Junior Member

Nel Button d'insert record ho inserito il seguente codice:

"DoCmd.GoToRecord , , acNewRec

' Inizializza il contatore automatico

Dim StrSqlString As String
StrSqlString = "SELECT Max([IDMatricola]) As MaxID FROM InventarioH WHERE IDTipologiaArticolo='" & Me.TipologiaArticolo & "';"

Dim DbDbase As DAO.Database
Set DbDbase = CurrentDb

Dim RsetInventarioH As Recordset
Set RsetInventarioH = DbDbase.OpenRecordset(StrSqlString)

Dim IntMax As Integer

If IsNull(RsetInventarioH("MaxID")) Then
IntMax = 1
Else
IntMax = RsetInventarioH("MaxID")
IntMax = IntMax + 1
End If

Me.IDMatricola = IntMax
Me.TipologiaArticolo = Me.TipologiaArticolo


Dim varCampo As Object
Dim strSQL As String

' Inizio il ciclo di controllo sugli oggetti (varCampo) della maschera (Me) attiva
For Each varCampo In Me

' Se il campo attuale ha valore = Null visualizzo un messaggio d'errore e non procedo con l'inserimento
If IsNull(varCampo) Then
MsgBox "Errore d'inserimento" & Chr(10) & "Mancano dati obbligatori", vbOKOnly, "Errore"
Exit Sub
End If

' Altrimenti controllo il prossimo campo
Next

Dim varOK As Integer
Dim ins_password As String


varOK = MsgBox("Vuoi inserire la nuova matricola?", vbOKCancel, "Inserimento Matricola")
If varOK = vbOK Then
ins_password = InputBox("Inserire password", "Controllo autorizzazione")
If UCase(ins_password) = txtpwd Then
DoCmd.SetWarnings False
DoCmd.OpenQuery "query_inserimento"


Else
MsgBox "Utente non autorizzato. Modifica non effettuata.", vbOKOnly, "Password errata"
End If
Else
Exit Sub

End If
lista.Requery
CodiceProdotto.SetFocus

Dim oggetto As Object

' E inizio il ciclo per ogni oggetto sull'insieme "Me", la maschera in questo momento attiva
For Each oggetto In Me

' Se l'oggetto è un combo o un textbox lo svuoto
If oggetto.ControlType = acTextBox Or _
oggetto.ControlType = acComboBox Then
' Se l'oggetto non è associato lo svuoto, altrimenti lo lascio com'è
If oggetto.ControlSource = "" Then
oggetto = Null
End If
End If

Next oggetto


End Sub"

Nonostante l' inserimento di tutti i campi mi genera un messaggio di errore.
C'è errore nel codice?

Grazie



alpanix Profilo | Junior Member

quando posti del codice formattalo come codice, così non prende tutto quello spazio
per quanto riguarda l'errore, dopo aver letto il codice presumo che il controllo "lista" sia una listbox
nel caso fosse così, se non selezioni niente sulla lista il controllo assume valore "Null", per cui ti genera l'errore di inserimento
la cosa da fare è evitare di confrontare il valore di quel controllo con Null, e questo puoi farlo inserendo una If mirata, subito dopo il comando "For Each varCampo in Me"

' Controllo che il campo in questione non sia la ListBox "lista" If varCampo.Name <> "lista" then
e fai tutti il resto. poi, prima del "Next" inserisci "End If"

se hai altre ListBox e vuoi che nessuna sia controllata, invece di

' Controllo che il campo in questione non sia la ListBox "lista" If varCampo.Name <> "lista" then

scrivi

' Controllo che il campo in questione non sia una ListBox If varCampo.ControlType <> 110 then
questo nel caso l'errore visualizzato sia quello del MsgBox dei dati indispensabili
Se così non fosse, descrivi l'errore che ti viene generato e vediamo di capire meglio


AlPanix

salinis Profilo | Junior Member

ho inserito il codice "if varCampo.Name <> "lista" then" ma comunque mi esce la finestra:

Errore d' inserimento Mancano dati obbligatori. Come mai?

Grazie


alpanix Profilo | Junior Member

>ho inserito il codice "if varCampo.Name <> "lista" then"
>ma comunque mi esce la finestra:
>
>Errore d' inserimento Mancano dati obbligatori. Come mai?

a questo punto ho bisogno di vedere la maschera, perché a quanto pare c'è qualche controllo che non viene compilato e che risulta Null durante il check
puoi fare uno screenshot della maschera (vuota, meglio se in visualizzazione struttura) e postarla zippata?


>Grazie

prego


AlPanix

alpanix Profilo | Junior Member

in alternativa puoi fare tu un controllo tramite debug, impostando un punto d'interruzione sul comando msgbox in modo che quando ti si arresta l'esecuzione dell'evento digiti nella finestra Immediata "? varCampo.Name" senza virgolette e scopri qual è il controllo che ti fa uscire il messaggio d'errore


AlPanix

salinis Profilo | Junior Member

Ti invio in allegato l'immagine della maschera.


grazie

alpanix Profilo | Junior Member

ad una prima, veloce occhiata, noto che i controlli utili presenti sono tutti TextBox e ComboBox
in questo caso puoi correggere il check sul valore Null nel modo seguente

' Esamino il controllo attuale e verifico di che tipo è ' Se è un TextBox o un ComboBox faccio il check sul valore If varCampo.ControlType = acTextBox Or varCampo.ControlType = acComboBox Then If IsNull(varCampo) Then MsgBox... Exit Sub End If End If

dimmi se funziona e se soddisfa le aspettative
tieni presente che non viene verificata la presenza di dati in campi che non siano TextBox o ComboBox


AlPanix

salinis Profilo | Junior Member

Ok funziona!!!!!!!!!!

6 Grande!!!

Scusa quando posto del codice come lo formatto, così evito di prendere tutto quello spazio?


Grazie

alpanix Profilo | Junior Member

>Scusa quando posto del codice come lo formatto, così evito di
>prendere tutto quello spazio?

prima di inviare il messaggio selezioni tutti il codice che hai inserito e clicchi sull'etichetta "Formatta Codice" sopra la sezione Corpo del post


>Grazie

prego



AlPanix

salinis Profilo | Junior Member

OK Grazie!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5