VISUAL BASIC – DATA CONTROL – QUERY
Gestire i Data base in Visual Basic è relativamente facile, infatti microsoft mette a disposizione una serie di utility adeguate ai diversi livelli di conoscenza dell’utilizzatore e in funzione dell’applicazione che si deve sviluppare.
Il Data Control è un controllo che permette anche agli utilizzatori meno esperti di sviluppare applicazioni efficienti con l’utilizzo dei data base.
DATA CONTROL e RECORDSET
Il Data Control è un controllo VB che permette il collegamento tra un Data Base e altri controlli Visual Basic detti Bound Control.
Il collegamento avviene mediante i Recordset, ossia un insieme di record, prelevati da una tabella localizzata su disco e trasportati in memoria per essere elaborati.
BOUND CONTROL
I bound controls sono gli oggetti utili a rappresentare, anche, informazioni provenienti da un data base.
Text Box, DBGrid, DBList ecc…
Esempio:
REALIZZAZIONE PRATICA
Dopo aver tracciato sul Form di visual basic gli oggetti utili alla connessione al data base (cfr figura sopra) si devono assegnare le seguenti proprietà ai singoli oggetti o controlli.
Proprietà del Data Control:
Name : Dbmagazzino (è il nome del controllo utile per stabilire le connessioni ai Bound Control)
Caption : dbmagazzino (è la didscalia)
DatabaseName : c:\magazzino.mdb (è il nome fisico del database, ATTENZIONE AL PERCORSO!!!)
RecordSource: articoli (impostata la scelta del database sul quale operare si deve indicare la tabella o la query)
Proprietà dei Bound Control.
Text Box:
Name : txt_codice (nome della text box utile per lo sviluppo di query o di calcoli matematici all’interno del programma)
Text : vuoto
DataSource: Dbmagazzino (nome del data control dal quale si vogliono prelevare informazioni, si ricorda che il data contro è stato già connesso ad un data base)
Data Field : codice (si specifica il nome del campo della tabella, selezionata nel data control, da rappresentare nella text box)
Text Box:
Name : txt_descrizione (nome della text box utile per lo sviluppo di query o di calcoli matematici all’interno del programma)
Text : vuoto
DataSource: Dbmagazzino (nome del data control dal quale si vogliono prelevare informazioni, si ricorda che il data contro è stato già connesso ad un data base)
Data Field : descrizione (si specifica il nome del campo della tabella, selezionata nel data control, da rappresentare nella text box)
Label
Name : lbl_codice (nome della label utile per la descrizione della text box)
Caption : codice
Label
Name : lbl_descrizione (nome della label utile per la descrizione della text box)
Caption : Descrizione
Command Button
Name : cmd_aggiungi
Caption : Aggiungi Record
Aggiungere altri command button, come da Form in esempio, assegnando le relative proprietà
Dopo aver costruito la maschera (FORM) facendo doppio clic su ogni command button creato scrivere (o copiarlo e incollarlo) il codice che segue sotto nell’esempio, facendo attenzione a far corrispondere il nome assegnato al command button e il nome del codice sotto riportato (es: Private sub cmd_aggiungi_click() deve coincidere con il NAME del command button)
Metodi legati al Data Control.
Ad ogni oggetto visual basic può essere assegnato del codice (programma) quando si clicca (o si attiva un altro evento) sull’oggetto il programma è eseguito a differenza del pascal dove l’esecuzione era attivata in modo interattivo e sequenziale dall’utente.
I metodi sono particolari che comandi che ci permettono di manipolare il database.
ADDNEW – predispone la singola tabella del database a ricevere un nuovo record;
DELETE – elimina un record da una tabella;
UPDATE – valida l’inserimento di un nuovo record o la modifica di un record già inserito in un’operazione precedente;
MOVEFIRST – posiziona il controllo di puntamento nella tabella sul primo record;
MOVELAST – posiziona il controllo di puntamento nella tabella sull’ultimo record;
MOVEPREVIOUS – sposta il controllo di puntamento sul record che precede;
MOVENEXT – sposta il controllo di puntamento sul record che segue
APPUNTI SULLE QUERY
Una query è una richiesta specifica di un utente o di una applicazione a un DBMS. Nei data base relazionali le richieste sono generalmente formulate in linguaggio SQL.
Le query maggiormente utilizzate sono quelle di selezione conosciute come SELECT.
Indipendentemente dal linguaggio o DBMS utilizzato le query possono essere:
statiche, parametriche.
QUERY STATICHE
Una query può essere definita statica quando la relativa istruzione SQL è fissata prima dell’esecuzione del programma e non dal programma stesso in fase di esecuzione.
Esempio
Private Sub cmdcerca_Click()
dbmagazzino.RecordSource = "select * from articoli where descrizione = 'pane'"
dbmagazzino.Refresh
End Sub
La query in esempio ricerca nella tabella articoli del database magazzino tutti i record che hanno come descrizione pane.
Nella progettazione di un data base, alcune richieste del cliente portano alla realizzazione di query statiche si pensi all’elenco di tutti i prodotti in ordine alfabetico.
Una query statica, senza filtro, utilizzata è quella relativa alla visualizzazione di tutti i record di una tabella (vedi esempio succ).
Esempio
Private Sub cmdcerca_Click()
dbmagazzino.RecordSource = "select * from articoli"
dbmagazzino.Refresh
End Sub
QUERY PARAMETRICHE
Le query sono parametriche quando è l’utente a fissare i parametri (valori) in base ai quali fare ricerche nel database.
La query parametrica necessità di un valore che deve essere immesso nella query utilizzando delle variabili (variabili indipendenti o anche textbox).
Esempio di query parametrica con variabile immessa in una input box
Private Sub cmdcerca_Click()
Dim cerca as string
Cerca = Inputbox ("Quale articolo vuoi cercare?")
dbmagazzino.RecordSource = "select * from articoli where descrizione = ‘" + cerca + "’"
dbmagazzino.Refresh
End Sub
Esempio di query parametrica con variabile immessa in una text box
Private Sub cmdcerca_Click()
dbmagazzino.RecordSource = "select * from articoli where descrizione = ‘" + txt_cerca + "’"
dbmagazzino.Refresh
End Sub
Query statiche o parametriche tra più tabelle.
Per mettere in relazione più tabelle non occorre agire in DBMS mettendole in relazione già in fase di creazione. Ma si può operare la relazione solo quando è necessaria mediante un semplice comando SQL.
Se si dovessero mettere in relazione le tabelle articoli e reparto del db magazzino per visualizzare TUTTI i prodotti con i relativi reparti si opererebbe come nell’esempio seguente:
Esempio
MAGAZZINO |
||||||
ARTICOLI |
REPARTO |
|||||
Codice |
Descrizione |
Cod_Reparto |
Codice |
Rep |
Scaffali |
|
1 |
Pane |
1 |
1 |
Alimenti |
10 |
|
2 |
Pasta |
1 |
2 |
Giocattoli |
2 |
|
3 |
Dragon ball |
2 |
3 |
Detersivi |
4 |
|
4 |
Puzzle |
2 |
||||
5 |
Aiax |
3 |
Private Sub cmdcerca_Click()
dbmagazzino.RecordSource = "select * from articoli, reparto where articoli.cod_reparto = reparto.codice"
dbmagazzino.Refresh
End Sub
Se invece si volessero visualizzare solo i prodotti del reparto alimenti :
Private Sub cmdcerca_Click()
dbmagazzino.RecordSource = "select * from articoli, reparto where articoli.cod_reparto = reparto.codice and reparto.rep = ‘alimenti’"
dbmagazzino.Refresh
End Sub
Se si volessero visualizzare i prodotti di un reparto specifico deciso dall’operatore si imposterebbe una query parametrica:
Private Sub cmdcerca_Click()
dbmagazzino.RecordSource = "select * from articoli, reparto where articoli.cod_reparto = reparto.codice and reparto.rep = ‘" + txtcerca + "’"
dbmagazzino.Refresh
End Sub