Orario: 07-09-2010, 01:52 AM
Benvenuto ospite! (Log in — Registrati)
|
Lezione 5 - Esercizio sulla gestione dei DB
|
|
13-11-2007, 12:13 AM
(Questo messaggio è stato modificato l'ultima volta il: 13-11-2007 08:17 PM da Markino.)
Messaggio: #1
|
|||
|
|||
|
Lezione 5 - Esercizio sulla gestione dei DB
Introduzione
In questa lezione vediamo un esempio semplice di come si interfaccia Visual Basic con Access. In particolare lo scopo del nostro programmino sarà gestire la registrazione ed il login degli utenti, che vogliono accedere da qualche parte. Vediamo come prima cosa il form ![]() Questo è come si presenta il form del nostro programma; come nell'altro esempio ho suddiviso il form in due parti per maggiore chiarezza e per separare gli oggetti che sono uguali nelle 2 parti. Per prima cosa creiamo il Database e la tabella Apriamo un nuovo file con estensione *.mdb e andiamo a creare una tabella. La nostra tabella è composta così: id: questo è il campo contatore che a livello di programma noi non tocchermo, infatti ha come scopo rendere univoco ogni record inserito. Per questo lo settiamo come chiave primaria. nome: campo nome dell'utente quindi è un campo testo. cognome: idem campo testo. Password: altro campo testo. La nostra tabella appena creata la chiamiamo Utente. Studiamo il programma Prima Parte Le variabili della prima parte sono dichiarate in questo modo: TextBox "Nome": - Name: txtnome TextBox "Cognome": - Name: txtcognome TextBox "Password" - Name: txtpass Pulsante "Registrati": - Name: cmdreg Vediamo il codice... ![]() Anche se può sembrare ingarbugliato è di facile comprensione. ![]() Il codice, come si può vedere, è tutto racchiuso sotto un'unica SubRoutine. In particolare è la sub dell'evento cmdreg_click(). Questo vuol dire che ogni volta che viene premuto il tasto "Registrati", si scatena (;D) questa funzione. La prima istruzione che vediamo è: Codice: On error goto erroreBene, "errore" in questo caso non è una variabile, ma un etichetta. In pratica la si può far precedere ad un'istruzione vera e propria e, al momento che si verifica un errore, il programma salta (facendo un jump) all'istruzione etichettata. Diciamo una sorta di GoTo degli errori. Vedremo la sua funzione specifica più avanti. Continuando a leggere il codice troviamo il primo IF. Questo mi sembra di facile comprensione, infatti si tratta di un controllo che verifica che i campi Nome, Cognome, e Password non siano vuoti; se lo sono allora restituisce un messaggio. Altrimenti continua: Andando avanti troviamo una fila di sei istruzioni. Le prime tre sono Trim e le altre tre sono Replace. La prima non fa altro che prendere la stringa che gli viene passata e privarla degli spazi che ha avanti e dietro. La seconda invece sostituisce (nella stringa che gli viene passata) il primo carattere specificato col secondo. In particolare sostituisco tutti gli apici singoli che trovo nella stringa, in modo da non farli entrare in conflitto con la query di inserimento. La sostituzione viene fatta con un carattere (a caso) basta ricordarsi qual'è; per riconvertire successivamente la stringa in fase di lettura da DB. Codice: s = "SELECT * FROM Utente WHERE nome='" & txtnome.Text & "' and cognome='" & txtcogn.Text & "';"Questa sopra è l'istruzione successiva, è una query che controlla che al momento dell'inserimento di un nuovo utente, non ce ne sia uno omonimo nel database. In caso affermativo l'inserimento non viene effettuato. Altrimenti continua la sub. N.B: in generale è bene gestire anche i casi di omonimia, qui ho tralasciato per semplicità. ;D L'IF che sta due istruzioni sotto la query è proprio quello che ha il compito di controllare se esiste l'omonimo oppure no. In questo caso si controlla: se il recordset è vuoto allora non ci sono casi di omonimia, il viceversa è ovvio. Anche qui, se non è possibile inserire per il problema suddetto allora restituisce un messaggio altrimenti procede con la query di inserimento. In tutti e due i casi il RecordSet deve essere chiuso. Andiamo allora ad inserire: Codice: s = "INSERT INTO Utente (nome,cognome,pass) VALUES('" & txtnome.Text & "','" & "" _Questo è l'inserimento vero e proprio. Il database è composto da un campo id che si autoincrementa, da un nome, cognome e password. I nomi specificati subito dopo il nome della tabella sono quelli che noi vogliamo inserire. Quindi tutti tranne l'id che si auto incrementa. Possiamo inserirli con l'ordine che vogliamo senza doverli specificare tutti. In questo caso a noi ne servono 3. Dopo VALUES ci sono i veri valori da inserire, rispettivamente il campo nome con txtnome.text poi cognome con txtcogn.text e infine password con txtpass.text. Lanciamo la query ed il gioco è fatto l'inserimento è completato. Se va a buon fine si passa all'istruzione seguente che dice appunto che è andato tutto bene. Altrimenti si genera un errore. Noi l'abbiamo gestisto però! ![]() Con on error goto errore quindi una volta che avviene l'errore, la query non viene eseguita e quindi non inserisce; in più il controllo passa all'istruzione assegnata all'etichetta "errore". Che è giust'appunto un messaggio!! Nel caso che non si siano verificati errori l'inserimento va a buon fine, viene stampato il messaggio allegato e viene eseguita l'istruzione: Codice: Goto finedove "fine" è un etichetta che punta alla fine della sub. Questo per evitare che venga stampato il messaggio di errore anche nel caso che non ce ne siano stati... Seconda Parte Le variabili della seconda parte sono: TextBox "Nome": - Name: txtn TextBox "Cognome": - Name: txtc TextBox "Password": - Name: txtp Pulsante "Accedi": - Name: cmdaccedi Vediamo il codice della seconda parte.. ![]() Questo codice, una volta capita la parte della registrazione, penso sia di facile comprensione. ![]() In pratica si esegue sempre il primo controllo con l'IF. Se tutti i campi sono riempiti allora si procede in avanti, altrimenti si restituisce un messaggio di errore. Con la funzione Replace, successivamente si convertono gli apici nel carattere jolly per poterlo confrontare con il database. N.B: se non eseguissi questo controllo tutti gli utenti che si sono registrati i quali dati contengono degli apici, non potrebbero accedere!! Dopo di ciò non dobbiamo fare altro che la query che in risposta ci dirà se l'utente inserito è presente o no nel database. Per costruzione del db e per la convenzione che abbiamo stabilito che il programma non gestisce omonimie, la query avrà in risposta o 0 record o 1 record. Infatti il controllo successivo è un IF che verifica che il recordset non sia vuoto. Se lo è restituisce un messaggio di errore, altrimenti effettua l'accesso. Nota importante Il programma ovviamente è provvisto di connessione al database nella form_load(). In questa lezione l'ho omessa in quanto è già stata trattata nella lezione 4. In questo esempio non ho voluto andare oltre alla verifica dei dati inseriti e quindi all'accesso. L'esempio successivo che farò, completerà questo e darà la possibilità agli utenti che si registrano e poi accedono di modificare una propria scheda personale. In allegato trovate il programma eseguibile con relativo sorgente e database. Tali lezioni sono coperte da copyright! ![]() Questo/a opera è pubblicato sotto una Licenza Creative Commons.
|
|||
|
13-11-2007, 12:13 AM
|
|||
|
|||
|
|
|
21-11-2007, 08:13 PM
Messaggio: #2
|
|||
|
|||
|
Re: Lezione 5 - Esercizio sulla gestione dei DB
mi piaccio le tue lezione Markino bravo
|
|||
|
22-11-2007, 12:14 AM
Messaggio: #3
|
|||
|
|||
|
Re: Lezione 5 - Esercizio sulla gestione dei DB
Grazie mille!
|
|||
| Discussioni correlate... | |||||
| Discussione: | Autore | Risposte: | Letto: | Ultimo messaggio | |
| Lezione 6 - Secondo esercizio sulla gestione dei database | Markino | 0 | 751 |
20-12-2007 01:30 PM Ultimo messaggio: Markino |
|
| Lezione 4 - Gestione Database con VB | Markino | 1 | 2,615 |
14-10-2007 04:53 PM Ultimo messaggio: shyne |
|
Cerca
Calendario
Aiuto

![[Immagine: formot8.jpg]](http://img112.imageshack.us/img112/2223/formot8.jpg)
![[Immagine: regdi7.jpg]](http://img49.imageshack.us/img49/7137/regdi7.jpg)

![[Immagine: accedipl5.jpg]](http://img401.imageshack.us/img401/8382/accedipl5.jpg)
![[Immagine: somerights20.png]](http://creativecommons.org/images/public/somerights20.png)




