PROGRAMMIAMO
VB - DATA BASE: Query in VB

Effettuare query in VB

Abbiamo visto come la proprietà Recordsource del controllo data consenta di collegare un data control con una particolare tabella all'interno di un DB:

Selezionando una tabella, il data control filtra dal DB solo i dati provenienti dalla tabella selezionata.

E' possibile però anche scrivere una query in SQL nella proprietà RecordSource. Accertiamoci per prima cosa che la proprietà RecordsetType sia 1-Dynaset. Facendo sempre riferimento al DB della biblioteca, scriviamo nel campo RecordSource

SELECT titolo FROM libri

Il significato dell'istruzione è abbastanza evidente (seleziona il campo titolo dalla tabella libri).


In questo modo solo il campo titolo della tabella libri viene filtrato dal data control. E’ importante a questo punto capire in quale modo il programma VB è collegato al DB biblioteca. Lo schema seguente dovrebbe servire per chiarire le idee a questo proposito:

So osservi nello schema precedente che la proprietà DataField della casella di testo dipende ovviamente da quanto specificato in RecordSource (per esempio: se abbiamo filtrato solo il titolo dei libri, questo sarà l'unico valore disponibile per DataField).

 

Altre query

1) Selezione con condizione WHERE
SELECT autore,titolo FROM libri where autore = "pirandello"

Nella proprietà Datafield della textbox abbiamo di nuovo la possibilità di scegliere fra “titolo” e “autore”. Se scegliamo “autore” verrà visualizzato sempre e solo “pirandello”. Se invece scegliamo “titolo”, vedremo solo i titoli dei libri scritti da “pirandello”. Si osservino i doppi apici indispensabili per delimitare la stringa “pirandello” (in alternativa VB consente di usare anche i singoli apici, ‘pirandello’; questa seconda possibilità diventa obbligatoria quando la stringa SQL si trova già all’interno di un’altra stringa delimitata da doppi apici, come vedremo meglio fra poco).

2) Selezione da due tabelle differenti
Un’altra query semplice che possiamo provare è la seguente:

SELECT autore,titolo, nome, cognome FROM libri, utenti

Il risultato non è particolarmente interessante, salvo il fatto che adesso la proprietà Datafield ci consente la scelta fra 4 diversi campi proveniente da 2 tabelle diverse. Se i campi contenuti nelle tabelle hanno lo stesso nome (come per esempio i campi “codicefiscale” in “prestiti” e “utenti”) occorre specificare a quale tabella ci si riferisce con la notazione nometabella.nomecampo:

SELECT autore,titolo, nome, cognome, utenti.codicefiscale FROM libri, utenti, prestiti

3) Selezione di tutti i campi
Se vogliamo selezionare tutti i campi delle tabelle usiamo l’asterisco ‘*’:

SELECT * FROM libri, utenti

4) Ordinamento dei campi selezionati
Se vogliamo che i campi siano visualizzati secondo un certo ordine sequenziale usiamo ORDER BY:

SELECT * FROM libri, utenti ORDER BY cognome, nome

5) Query con ricerca incrociata fra più tabelle

Supponiamo adesso di voler selezionare tutti gli utenti che hanno preso in prestito un libro di pirandello. Potremmo scrivere una query di questo tipo:

SELECT * FROM libri, utenti, prestiti where libri.collocazione = prestiti.collocazione and prestiti.codicefiscale = utenti.codicefiscale and libri.autore = "pirandello"

 

Modifica in fase di esecuzione del contenuto di RecordSource

Come tutte le proprietà, anche il contenuto della proprietà Recordsource può essere modificato in fase di esecuzione. Supponiamo ora di voler cercare tutti i libri scritti da un certo autore. Modifichiamo il form in questo modo:

 

Nella subroutine associata all’evento click sul bottone CERCA scriviamo:

Data1.RecordSource = "select titolo, autore from libri where autore='" & Text1.Text & "'"
Data1.Refresh

Osserviamo:
a) La concatenazione di stringhe con l’operatore ‘&’ (text1 è la text box che contiene il nome dell’autore da cercare).
b) L’uso dei singoli apici necessari per racchiudere il nome dell’autore nell’istruzione SQL (bisogna usare i singoli apici invece dei doppi, perché ci troviamo già dentro una coppia di doppi apici).
b) Il metodo Refresh necessario per aggiornare il controllo data.

 

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it