Orario: 07-09-2010, 01:52 AM Benvenuto ospite! (Log inRegistrati)


Rispondi 
 
Valutazione discussione:
  • 0 voti - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5


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

[Immagine: formot8.jpg]

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...

[Immagine: regdi7.jpg]

Anche se può sembrare ingarbugliato è di facile comprensione. Wink

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 errore

Bene, "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 & "','" & "" _
    & txtcogn.Text & "','" & txtpass.Text & "');"
 
    rs.Open s, conn, adOpenKeyset, adLockOptimistic

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ò! Wink

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 fine

dove "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..

[Immagine: accedipl5.jpg]

Questo codice, una volta capita la parte della registrazione, penso sia di facile comprensione. Wink

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!

[Immagine: somerights20.png]
Questo/a opera è pubblicato sotto una Licenza Creative Commons.

[Immagine: markino.gif]
Trova tutti i messaggi di questo utente
Cita questo messaggio nella tua risposta
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 Wink
Trova tutti i messaggi di questo utente
Cita questo messaggio nella tua risposta
22-11-2007, 12:14 AM
Messaggio: #3
Re: Lezione 5 - Esercizio sulla gestione dei DB
Grazie mille! Wink

[Immagine: markino.gif]
Trova tutti i messaggi di questo utente
Cita questo messaggio nella tua risposta
Rispondi 


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

Vai al forum:


Powered by MyBB, © 2002-2010 MyBB Group. MyBB Mod v2 designed for MyBB
Modifiche a cura di Mattia - Copyright 2007-2010 Methack.it
Questo sito e tutti i suoi contenuti sono pubblicati sotto licenza Creative Commons 2.5.