Connessione al database con Visual Basic NET? Lo trovi su Opentraining.it Visual Basic Italia
PRINCIPALE > ARTICOLO

Eseguire una ricerca veloce nell' archivio delle risorse di Visual Basic Italia®: 

Preso dall'archivio...

Premere il pulsante sotto per accedere direttamente ad un articolo o ad un esempio preso in modo casuale dall'archivio.



Ultimo e-book pubblicato:

"INTRODUZIONE AI CSS"

Lo scopo del CSS language è quello di controllare lo stile dei vari elementi che concorrono a formare un
documento HTML.
Si può operare in tre modi collegamento ad un foglio di stile esterno;definizione degli stili all'inizio
del documento utilizzo della proprietà style all'interno di un Tag HTML (embedded style). Questo e-book introduttivo
servirà per apprendere tali nozioni fondametali dei fogli di stile.

Prezzo: € 0.0.
Presentazione:
REAL SOFTWARE RILASCIA LA VERSIONE 5.0 di REALbasic per Windows






Gorizia, 5 maggio 2003 - Active, distributore in esclusiva di REALSoftware, Austin, Tx, annuncia la disponibilità di REALbasic 5.0 per Windows, uno strumento per lo sviluppo semplice da usare che permette agli utenti Windows di tutti i livelli di creare applicazioni personalizzate e di compilarle sia per la piattaforma Windows che per quella Macintosh.
[>>]

http://www.active-software.com

 

Contatti. Utilizzare l'email generica per domande relative al sito:
Porre domande relative al sito
oppure scrivere ad un responsabile di area.
Responsabile del sito: >Andrea Martelli
Responsabile area "Corso di VB":
> Giorgio Abraini

Lanciare una Query da Visual Basic e visualizzare i risultati in Access

Questa lezione, consultata da 1992 utenti, è stata giudicata di ottimi contenuti , con un'esposizione perfettamente comprensibile e con un livello di approfondimento ottimo da 3 votanti.


Il codice

Può risultare utile dover utilizzare la stessa query per più database (ad esempio per sincronizzarli) o per qualsiasi altro motivo e visualizzarne il risultato. Nel corso di quest'articolo si vedrà come lanciare una query da Visual Basic senza dover utilizzare macro o oggetti all'infuori di quelli della libreria di Access.
Come nel caso di Word e di Excel per avere il controllo completo degli oggetti Access è necessario importare nel progetto la libreria corrispondente. In questo caso perciò si dovrà selezionare Progetto dal menu principale, scegliere l'opzione Riferimenti e dalla finestra che apparirà spuntare la voce Microsoft Access X.0 Object Library, come mostrato dalla figura sottostante.

Il primo passo da compiere consiste nel dichiarare e definire l'applicazione Access. La dichiarazione (da inserire nel gruppo delle dichiarazioni generali del form) corrisponde a:

Dim appAccess As Access.Application

Mentre la definizione va inclusa in una routine (ad esempio Form_Load in modo che la creazione dell'oggetto sia eseguita una volta per tutte all'apertura dell'applicazione) ed è la seguente:

Set appAccess = CreateObject("Access.Application")

Siccome la query può essere lanciata all'interno di un qualsiasi database, la scelta ottimale impone di trasportare sul piano una TextBox (Text1) nella quale inserire il percorso del database Access prescelto, una seconda TextBox (Text2) nella quale inserire il testo della query ed un pulsante (Command1) che permette di avviare la query.
Tutte le modifiche ulteriori (selezione tramite CommonDialog dei database presenti sul disco, inserimento di label associate a ciascun controllo, validazione del contenuto delle caselle di testo eccetera) non sono che abbellimenti della struttura principale del progetto.
Progetto che dal punto di vista grafico si dovrebbe presentare più o meno in questo modo:

Alla pressione del pulsante Command1 pertanto si dovrà innanzitutto aprire il database selezionato in Text1. Il codice da utilizzare è pertanto il seguente:

Private Sub Command1_Click()
appAccess.OpenCurrentDatabase Text1.Text
'...
End Sub

Anche in questo caso, come negli articoli precedenti verrà utilizzato il database comune FPNWIND.mdb, che si trova ovviamente nella cartella C:\Programmi\Microsoft Office\Office\1040\.
Siccome risulta particolarmente scomodo e controproducente visualizzare il database prima della creazione della tabella dei risultati della query se ne impedirà la visualizzazione tramite l'aggiunta della seguente riga di codice
:

appAccess.Visible = False

E per arrivare all'argomento principale dell'articolo, si vedrà adesso come lanciare la query: attraverso l'oggetto DoCmd che come in VBA ha lo scopo di eseguire differenti azioni.
La riga di codice in analisi è la seguente:

DoCmd.RunSQL Text2.Text

Prima di inserire tale codice c'è però bisogno di una precisazione. La riga qui sopra creerà dei risultati non visualizzabili. Per ovviare al problema basta utilizzare un SELECT…INTO con il nome della tabella temporanea che verrà creata e che mostrerà tutti i risultati della query.
Una volta compreso questo meccanismo bisogna fare in modo da poterlo utilizzare in ogni caso, senza possibilità di errore, anche nel caso in cui l'utente lanci una query del tipo:

SELECT * FROM Clienti;

invece di una più corretta (corretta limitatamente al caso in esame):

SELECT * INTO NuovaTabella FROM Clienti;

La soluzione al problema risiede in una banale concatenazione di stringhe. Se si suppone cioè che le parole "INTO NuovaTabella" vadano sempre prima di FROM si può scrivere:

MtrFROM = Split(Text2.Text, "FROM")
query = MtrFROM(0) & " INTO NuovaTabella FROM " & MtrFROM(1)

Naturalmente per le query più complesse potrebbero essere necessari accorgimenti ulteriori.
Successivamente si può aggiungere il codice che lancia la query visualizzando la tabella denominata NuovaTabella
:

DoCmd.RunSQL query
DoCmd.OpenTable "NuovaTabella"
appAccess.Visible = True

Così, attraverso la compilazione di tutti i campi della tabella e la pressione del pulsante come mostrato in figura:

Si dovrebbe visualizzare il risultato sperato.

Può capitare in fase di visualizzazione dei risultati di ottenere una tabella risultante ridotta alle sole dimensioni della barra del titolo. Per superare il problema si può comandare a tale tabella di espandersi al massimo aggiungendo la seguente riga di codice:

DoCmd.Maximize

E nel caso in cui la tabella NuovaTabella non venisse considerata da Access come temporanea e quindi persistesse anche dopo la chiusura del programma, la si può eliminare in qualsiasi punto dell'applicazione attraverso:

DoCmd.DeleteObject acTable, "NuovaTabella"

Per concludere si sperimenteranno I risultati ottenuti dalla stessa query eseguita prima internamente ad Access, come consuetudine, ed in seguito utilizzando l'applicazione esterna appena analizzata.
A tale scopo si consideri la seguente query:

SELECT Prodotti.Nome_prodotto, Fornitori.Nome_societa, Prodotti.Prezzo_unitario
FROM Fornitori LEFT JOIN Prodotti ON Fornitori.ID_fornitore = Prodotti.IDFornitore
WHERE (((Prodotti.Prezzo_unitario)<20000));

che non fa altro che visualizzare i prodotti, associati ai fornitori relativi ed ai prezzi unitari, il cui prezzo sia inferiore a L.20000.
Il risultato è una tabella di 20 elementi come mostrato qui sotto:

Riscrivendo nell'applicazione appena costruita la stessa query ossia:

(ricordarsi di settare la proprietà Multiline di Text2 su True per non perdere un pezzo di query), si otterrà come risultato:

cioè gli stessi identici dati in una tabella non perfettamente formattata (la larghezza delle colonne non tiene conto della lunghezza dei dati che contengono, a meno che non si imposti esplicitamente).