Finestra Messaggio:Vuoi salvare le modifiche?

lunedì 19 novembre 2007 - 14.23

salinis Profilo | Junior Member

Help!!!!!!!!!!

Dovrei integrare nella maschera una funzione che al momento dell'immissione dei dati mi esce un messaggio avente oggetto: vuoi salvare le modifiche? SI o NO.


Grazie

alx_81 Profilo | Guru

>Help!!!!!!!!!!
>
>Dovrei integrare nella maschera una funzione che al momento dell'immissione
>dei dati mi esce un messaggio avente oggetto: vuoi salvare le
>modifiche? SI o NO.
Ciao! Cerca di essere più chiaro, di cosa stai parlando?

Alx81 =)

http://blogs.dotnethell.it/suxstellino

salinis Profilo | Junior Member

Quando vado ad effettuare in una maschera una modifica sui dati, prima di effettuarla definitivamente mi deve chiedere se voglio salvare o meno le modifiche. Non solo quando attraverso la maschera aggiungo un record il campo contatore va avanti senza che io abbia di fatto salvato il nuovo record creato. Infatti anche se decido di non aggiungere più il record il campo contatore comunque è avanzato di 1 senza che io salvassi di fatto il movimento.

Spero di essere stato chiaro.

Grazie

SSUPERPIPPO Profilo | Guru

E' da capire se usi un DataGridView, se lavori in modalità connessa o disconnessa, che tipo di database usi, con cosa sviluppi le tue maschere...


http://blogs.dotnethell.it/alebadalin

salinis Profilo | Junior Member

Il database che uso è ACCESS 2003. Creo le maschere da access.

SSUPERPIPPO Profilo | Guru

Devi intercettare l'evento AfterUpdate (Dopo aggiornamento) oppure l'evento Change (Su modifica) del controllo sul quale apporti le modifiche.

Per quanto riguarda il contatore mi sà che con Access c'è ben poco da fare... a meno che tu non ti gestisca tutto a mano... dipende dalle tue conoscenze di VBA.

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

alpanix Profilo | Junior Member

Ciao
scusate se mi intrometto
io ho avuto lo stesso problema già dai tempi di access 97
ho risolto da poco tempo con delle pseudo stored-queries
praticamente agisco così:

1) creo la maschera con i campi non associati che però hanno come definizioni tipi di dato le stesse che sono sulla tabella (praticamente una maschera trasparente che rifletta un record vuoto della tabella)
2) inserisco un pulsante per la registrazione dei dati inseriti
3) creo una stored-query di inserimento sulla tabella dei valori presenti sulla maschera (tutti tranne il contatore, che si auto-aggiorna)
4) alla pressione del tasto di inserimento presente sulla maschera eseguo un codice che come prima cosa mi chieda se sono sicuro di voler inserire (tramite msgbox, che mi restituirà un valore di ritorno relativo al codice del pulsante premuto ["OK" o "Annulla"])
5) in caso il tasto premuto sia "OK" richiamo la query di inserimento tramite il comando docmd.

con me ha funzionato alla grande
il contatore non viene toccato finché non clicchi su OK, per cui puoi fare tutte le modifiche che vuoi e tornare indietro senza incrementare il valore dell'ID.

AlPanix

salinis Profilo | Junior Member

Sarebbe perfetto!!

Solo che non mi è chiaro come debbo procedere praticamente sui tre punti da te elencati:
3)creo una stored-query di inserimento sulla tabella dei valori presenti sulla maschera (tutti tranne il contatore, che si auto-aggiorna)
4) alla pressione del tasto di inserimento presente sulla maschera eseguo un codice che come prima cosa mi chieda se sono sicuro di voler inserire (tramite msgbox, che mi restituirà un valore di ritorno relativo al codice del pulsante premuto ["OK" o "Annulla"])
5) in caso il tasto premuto sia "OK" richiamo la query di inserimento tramite il comando docmd.

Per caso mi potresti inviare un mdb come esempio?

Grazie in anticipo.

alpanix Profilo | Junior Member

la stored-query dovrai crearla da SQL, non è assolutamente difficile:

INSERT INTO tuatabella ( campo2, campo3, campo4, ..., campo999 )
SELECT Forms!tuamaschera.Controllo2 AS Valore2, Forms!tuamaschera.Controllo3 AS Valore3, Forms!tuamaschera.Controllo4 AS Valore4, ..., Forms!tuamaschera.Controllo99 AS Valore99, ;

(ho volutamente evitato campo1, controllo1 e valore1 perché sottintendo come campo1 il campo chiave, nel tuo caso l'ID, che non dovrà essere valorizzato da maschera ma si dovrà autoincrementare ad ogni inserimento)
in questo modo, quando sarai sulla maschera "tuamaschera" potrai sfruttare un command button per eseguire semplicemente la query che catturerà i valori dalla maschera stessa

---

il msgbox dovrai attribuirlo come valore ad una variabile di tipo integer, poiché i tasti OK, Annulla, Riprova.. equivalgono a numeri interi in VBA
il tasto OK per esempio equivale a 0.
devi quindi dichiarare una variabile di tipo integer, chiedere conferma all'utente, testare la risposta ricevuta e comportarti di conseguenza:

Dim tuavariabile As Integer

tuavariabile = MsgBox("Sicuro?", vbOKCancel, "Conferma inserimento")
' "Sicuro?" è il testo, vbOKCancel visualizza i pulsanti "OK" e "Annulla", e
' "Conferma inserimento" è il titolo della finestra del messaggio

If tuavariabile = vbOK Then ' vbOK è una costante numerica già dichiarata in VBA
DoCmd.OpenQuery "tuaquery"
Else
' L'applicazione in questo caso non fa niente e tu puoi modificare gli inserimenti senza
' lasciare "buchi" nel campo incrementale di "tuatabella"
End If

spero di essere stato chiaro
AlPanix

salinis Profilo | Junior Member

Scusami ma io non sono assolutamente pratico di VBA.


Hai un piccolo mdb come esempio da inviarmi come allegato?

Please.

salinis Profilo | Junior Member

Vorrei capire circa SELECT Forms!tuamaschera.Controllo2 AS Valore2...il controllo corrisponde al nome del campo dellla tabella e il Valore a cosa si riferisce?






alpanix Profilo | Junior Member

I campi "ValoreXX" sono i campi della query.
Naturalmente si riferiscono a campi che devi inserire in creazione query.
Allego l'esempio.

AlPanix

salinis Profilo | Junior Member

Perfetto l' allegato.

Se io volessi inserire una funzione attraverso la quale quando vado a modificare un campo specifico di un record inserito mi chiede se voglio salvare le modifiche...come posso fare?

C'è la possibilita che ogni qualvolta effettuo una modifica mi chiede la password?

Grazie

alpanix Profilo | Junior Member

per quanto riguarda l'aggiornamento basta che ti crei una query di aggiornamento
per la seconda domanda, come si dice a firenze, "avòglia!"
puoi metterci tutti i controlli che vuoi, basta che sulla stessa maschera aggiungi il pulsante di aggiornamento che prima di lanciare la query di update ti apra una maschera con la richiesta della password

AlPanix

salinis Profilo | Junior Member

Esempio: il database che mi hai gentilmente inviato:

ho creato una query di aggiornamento cioè UPDATE tuatabella SET tuatabella.campo2 = "", tuatabella.campo3 = "", tuatabella.campo4 = "", tuatabella.campo5 = ""; Il mio problema è come faccio ad associare la query ai vari controlli della maschera? Quando io devo modificare dati di un singolo campo non mi deve modificare tutti i record del campo stesso ma solo quello selezionato.


1000 Grazie

alpanix Profilo | Junior Member

beh, ci sono due metodi semplici da poter utilizzare:

1) più veloce: modifica di un record valorizzando tutti i campi: posizioni una casella di riepilogo sulla maschera e ad ogni doppio click su uno dei record elencati visualizzi sulla maschera il record completo (quindi selezioni il record per la modifica), dopodiché modifichi il campo che necessita aggiornamento e fai un update del record. gli unici valori differenti dall'originale saranno quelli che hai modificato tu (l'update dovrà aggiornare tutti i campi del record, anche se la maggior parte di essi non avrà subito modifiche) e in questo caso puoi creare una query di aggiornamento nello stesso modo in cui è strutturata quella di inserimento sull'esempio che ti ho mandato

2) modifica di un solo campo: alla pressione del tasto modifica ti fai un controllo su tutti gli elementi della maschera, intercettando quello o quelli che presentano un valore e che quindi dovranno essere modificati: ti costruisci l'update in base a questo, ma non potrai usare la query che ho creato io. dovrai invece intervenire da codice.

io prediligo la prima

AlPanix

salinis Profilo | Junior Member

La query di aggiornamento è "UPDATE tuatabella SET ( campo2, campo3, campo4, campo5 )
SELECT Forms!tuamaschera.Controllo2 AS Valore2, Forms!tuamaschera.Controllo3 AS Valore3, Forms!tuamaschera.Controllo4 AS Valore4, Forms!tuamaschera.Controllo5 AS Valore5;"?
Sicuramente c'è un problema sulla stringa perchè non mi fa salvare la query.
La query va associata all casella di riepilogo sulla maschera?
Quando effettua l' update su un campo mi chiede la password?
Vorrei che si lasciasse traccia su ogni modifica effettuata.

Ti è possibile effettuare le suddette modifiche sul mdb che mi hai inviato come esempio?

Ho molto da imparare.

Grazie per la tua disponibilità.

alpanix Profilo | Junior Member

fatto
il comando UPDATE prevede che vengano passato valori di aggiornamento tramite l'istruzione SET:

UPDATE tabella SET campoA = valoreA, campoB = valoreB.. WHERE campoID = valoreID;

in questo modo selezioni il record che ha ID = valoreID e gli modifichi tutti i campi con i valori che gli passi dalla maschera.
nel caso modifichi il valore di un campo solo, vengono comunque aggiornati anche tutti gli altri con gli stessi valori che già hanno, quindi teoricamente il dato aggiornato risulta solo quello modificato.

AlPanix

per quanto riguarda la password ho postato un esempio qui:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=19518

salinis Profilo | Junior Member

Chiarissimo l' esempio della query di aggiornamento.
Sulla password ho ancora dei problemi. Sulla base del mdb di esempio quando aggiorno un campo mi deve chiedere oltre alla domanda "sei sicuro" anche la password. Facendo in questo modo c'è traccia di chi ha effettuato le modifiche. Come posso fare su quest'ultimo punto? Magari crendo dei veri account....


Grazie, Grazie, Grazie.....

alpanix Profilo | Junior Member

in questo caso perché non crearti una tabella di utenti abilitati?
ogni utente dovrebbe avere la sua password e con una maschera di login all'apertura dell'applicazione potresti intanto filtrare l'accesso al db, poi memorizzarti l'utente su una variabile universale e utilizzare tale variabile per valorizzare e aggiornare un campo (ad es. UtenteModifica) presente sulle tabelle.
se invece vuoi solo che ti venga chiesta una password, creati la tabella di appoggio delle password e inserisci sulla maschera quel combo nascosto come nell'esempio dell'altro topic. ogni volta che fai un inserimento, oltre a forzare il msgbox di conferma, forza anche una inputbox che ti chieda la password. confronti la password con il combo e se è identica procedi con l'applicazione, altrimenti esponi un msgbox di rifiuto.
es.
Private Sub cmdAggiorna_Click()

...
Dim password As String
...

password = Inputbox("Inserisci password")

If password = cboPassword Then
...
DoCmd.OpenQuery "qry_aggiornamento"
Else
MsgBox "Password errata", vbOKOnly, "Utente non autorizzato"
End If

...

End Sub

AlPanix

salinis Profilo | Junior Member

A me servirebbe sia una maschera di login e sia un combo che ad ogni modifica ed ad ogni inserimento mi chieda la password.Ovviamente ci dovrebbe essere un controllo che verifichi la password inserita per inserimento o modifica corrisponda alla password di login.
Il codice che mi hai scritto ovviamente e come sempre è chiaro ma ho difficoltà a renderlo operativo.
Potresti applicare gentilmente "il tutto" nel famoso mdb di esempio che ti allego.

GRAZIE

alpanix Profilo | Junior Member

ecco qua
la password è nella relativa tabella
leggiti il codice e guarda la struttura della maschera
ho nascosto il combo che ti dicevo

AlPanix

salinis Profilo | Junior Member

OK!!!!!!!!!!

Ora se io inserisco più di una password in tabella perchè il database sarà utilizzato da + utenti, come faccio io ad assegnare una password all'utente?
Ho inserito un 'altra password però mi consente comunque di effettuare la modifica.
Posso poi associare la tabella delle password con una maschera di login?


GRAZIE

alpanix Profilo | Junior Member

l'esempio allegato al topic di cui ti ho mandato il link contiene proprio un login collegato ad una tabella che contiene password. è identica a quella che ho allegato qui.
se vuoi attivare un controllo a livello utente non hai che da crearti una tabella utenti che abbia anche il campo password. nel login dovrai inserire il codice dell'utente e il controllo poi sarà effettuato sulla corrispondenza tra questo e la password dell'utente. se non c'è questa corrispondenza il login non verrà effettuato.

il codice che ti ho mandato in allegato nel post precedente non permette la modifica se nella inputbox digiti una password non identica a quella presente sulla tabella.

AlPanix

salinis Profilo | Junior Member

Ti rimando il database con la tabella creata degli utenti. Ho difficoltà a creare una maschera di login iniziale che apra le successive maschere ma che soprattutto sia in relazione con la password che inserisco per le modifiche.


Grazie

alpanix Profilo | Junior Member

nella maschera "login" ho inserito una casella di testo non associata. una volta scelto l'utente sarà necessario autenticarsi tramite password da inserire in questa casella di testo.
il controllo autorizzativo è associato al click sul pulsante "Login".
se la password non è corretta viene visualizzato un messaggio di mancata autorizzazione e ti mantiene sulla stessa maschera.
se è corretta, nasconde i dati di login e visualizza un pulsante "Logout" per la disconnessinoe dell'utente. nel medesimo istante apre "tuamaschera" visualizzando nella parte inferiore l'utente attualmente loggato tramite una casella di testo.
se quando chiudi "tuamaschera" ti scolleghi con il tasto "Logout" (il che svuota tutti i campi della maschera di login) puoi collegarti come altro utente.
il controllo della password avviene tramite la proprietà Column(n) del combobox. studia il codice.
le possibilità di personalizzazione da VBA sono notevoli.

ps: devi riportarci il check sulla password per le modifiche perché l'ho inavvertitamente tolto. puoi farlo tramite la maschera di login che rimane sullo sfondo, controllando che la password che viene inserita in caso di modifica sia identica a quella presente nella casella di testo (ormai nascosta) txtPassword della maschera "login".

AlPanix

salinis Profilo | Junior Member

All'interno della maschera ho provato ha replicare la casella non associata "utente" con txtpassword però comunque in fase di aggiornamento non mi funziona. Perchè?


Grazie

alpanix Profilo | Junior Member

ho analizzato il tuo allegato
il mio suggerimento non era quello che hai realizzato
quello che intendevo io era un confronto tra la password immessa tramite la InputBox e quella presente nella maschera di login
infatti, sebbene i controlli siano nascosti dopo un login avvenuto con successo, sono comunque presenti e utilizzabili
proprio per questo fatto la casella di testo "txtPassword" sulla maschera "tuamaschera" è a mio avviso inutile
toglila dalla maschera e aggiungi nella If dell'evento Click relativo al pulsante "Aggiorna" un confronto delle due password, la prima (ins_password) derivante dalla InputBox e la seconda (Forms!login.txtPassword) presente sulla maschera "login"
per quanto riguarda il fatto che non ti funziona in fase di aggiornamento, questo è dovuto al controllo che fai sulla casella di testo "txtPassword" che hai inserito nella maschera. infatti se lì non iserisci la password, la modifica non va a buon fine. cosa che invece non succede se ci inserisci la password che c'è nella InputBox
la cosa migliore è togliere quella casella di testo
AlPanix

salinis Profilo | Junior Member

ok funziona..


grazie

alpanix Profilo | Junior Member

figurati
AlPanix

salinis Profilo | Junior Member

Mi servirebbe gentilemente una tua consulenza.
Nel database ho 3 caselle combinate. La mia esegenza è che la 2 casella combinata filtra i valori sulla base del valore selezionato nella 1 casella combinata. Stesso discorso dicasi per la terza casella combinata.

Esempio: quando seleziono nella prima casella combinata come tipologia di articolo"monitor" nella seconda casella combinata mi deve filtrare solo le matricole del monitor. Nella terza casella combinata mi deve filtrare solo il Serial Number del numero di matricola selezionato nella seconda casella combinata.

Grazie per la tua disponibilità.

alpanix Profilo | Junior Member

è la stessa domanda che hai fatto qui?
http://www.dotnethell.it/forum/messages.aspx?ThreadID=19608
mi pare ci stia già lavorando Alessandro.
comunque, l'unica cosa che sono in grado di dirti su questo è che devi ricorrere al metodo Requery su ogni combo dipendente, una volta selezionato un valore sul combo di riferimento.
AlPanix

salinis Profilo | Junior Member

si.

Se puoi aiutarmi mi potresti rispondere su http://www.dotnethell.it/forum/messages.aspx?ThreadID=19608.


Grazie

alpanix Profilo | Junior Member

Accetta la risposta su questo post, così lo chiudiamo.
AlPanix
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