Vb6 con db

Stato
Discussione chiusa ad ulteriori risposte.

sCiEnZiAtOpAzZo

Utente Electrum
11 Giugno 2007
208
10
1
100
Salve a tutti... (ho preso questa guida scritta da me da un altro forum, senza scriverla due volte l'ho postata anche qui)

Per utilizzare i db in vb6 esiste una soluzione molto più completa degli archivi .dat e anche maggiormente professionale... Ovvero l'utilizzo dei cosidetti database che grazie al DBMS (un sistema software progettato per consentire la creazione e manipolazione efficiente di database) riescono a comunicare cn il programma che noi vorremmo scrivere (magari una versione semiprofessionale di chi vuol essere milionario)

Per far questo occorre conoscere anche un po di sql (alcune nozioni fondamentali di tale linguaggio sono presenti in questo forum programmazione).

Prima di scrivere il programma in vb6 in grado di interagire con il nostro database in access dobbiamo eseguire due operazioni fondamentali.

Innanzitutto è palese che debba esistere un file access con estensione .mdb (altrimenti cm si potrebbe interagire cn un file database inesistente?) e quindi dapprima crearlo con microsoft access (guida all'utilizzo base di microsoft access su richiesta) e quindi una volta creato anche un banale database salvarlo in una cartella qualsiasi (del tipo "C:\database\alunni.mdb")

Una volta creato un database (ripeto, cosa abbastanza scontata) occorre, dopo aver aperto il nostro editor vb6 e prima di scrivere il codice) andare nella voce riferimenti della barra dei menu dell'editor vb6 e selezionare il riferimento denominato "microsoft DAO 3.6" (il nome essenziale è questo che significa microsoft data access object e 3.6 è l'ultima versione) e quindi fare ok.

Tutto questo perché una volta che andiamo a scrivere il codice dovremmo utilizzare nuove tipologie di variabili non presenti nelle librerie tipiche di vb6 senza alcun riferimento.

Ora possiamo passare al codice cn relativa spiegazione:

Supponiamo di voler creare un programma in vb6 per la gestione di un database cn le funzioni tipiche di aggiunta, cancellazione, aggiornamento (o modifica) e prima di tutte l'apertura del nostro database access tramite vb6. (risparmio ovviamente la creazione dell'interfaccia grafica I/O poiché è scontata)


Iniziamo con il definire le variabili globali:

Codice:
dim db as database
dim rs as recordset
dim strsql as string
dim nomedb as string

Come si può notare database e recordset sono due tipologie di variabili disponibili solo dopo aver aggiunto il riferimento a microsoft dao 3.6.

Con db indichiamo il nostro database con il quale successivamente eseguiremo tutte le operazioni necessarie e opzionali mentre con rs indichiamo il recordset ovvero il riferimento ai record presenti nei database (per chi nn lo sapesse un record è un oggetto di un database strutturato in dati che contiene un insieme di campi o elementi, ciascuno dei quali possiede nome e tipo propri, per maggiori informazioni guida su richiesta).
Strsql indica la variabile di tipo stringa che servirà per immettere le istruzioni sql necessarie e per operare su di esse identificate appunto con la semplice variabile strsql) infine nomedb identifica il nome del nostro database con relativo percorso (la path dove il file si trova).

Vediamo ora la funzione più importante di tutte ovvero la funzione che fa si che il nostro prog vb6 riesca a comunicare con il database esistente)

Codice:
Private sub command1_click()
strsql = "select * from nometabella;"
nomedb = App.path & "\magazzino.mdb"
set db = OpenDatabase(nomedb, , false, false)
set rs = db.OpenRecordset(strsql)
rs.movefirst
Do while not rs.eof
list1.additem rs(0) & vbtab & rs(1) & vbtab & rs(2) & vbtab & rs(3)
rs.movenext
loop
rs.close
db.close
End sub

Bene.. ora cercherò di spiegare in modo piu chiaro possibile ciò che ho appena scritto...

Con strsql = "select * from nometabella;" (messo tra apici perché è una stringa) ho settato il valore di strsql e con nomedb = il valore della variabile nomedb (cm ho già detto il percorso del file in questo caso ottenuto con la funzione app.path che restituisce il valore del percorso contenente il file interessato)
Dopo di che settiamo la variabile db con la funzione opendatabase (che appunto apre il database) con valore false, false (ovvero lo apre sia in lettura che in scrittura) e settiamo anche rs dove apriamo i record del database per effettuare le operazioni su di esse specificando che dobbiamo aprire tutti i campi della tabella chiamata nome tabella (* indica tutti i campi e nometabella il nome della tabella sulla quale andiamo ad effettuare le nostre operazioni).
Quindi ci muoviamo di un record con rs.movefirst specificatamente al primo record e iniziamo a dire al vb6 che il nostro database contiene determinati valori da aggiungere con un ciclo di tipo indeterminato in una list box (questo perché nn possiamo avere un ciclo iterativo di tipo for poiché nn possiamo sapere la fine esatta dei record del programma)
Una volta entrati nel ciclo verrà automatizzato il processo di inserimento delle righe (ne ho messe 4 cosi a scelta dove rs(0) identifica il campo di chiave primaria mentre gli altri 3 dei campi a piacere per esempio descrizione prezzo reparto) e quindi ogni volta con rs.movenext verranno aggiunte altre righe fino a quando non ce ne saranno piu (ad esempio nel nostro database abbiamo 3 valori per ogni record del tipo 3 prodotti con relative descrizioni, prezzi, e reparti e quindi una volta aggiunti tutti si esce dal ciclo)
Quindi a questo punto è opportuno chiudere il recordset e il database con le relative funzioni .close

Ora supponiamo di voler creare una funzione di aggiunta dal nostro vb6.
Codice:
dim prezzo as string

msg = msg & "articolo in aggiunta: " & vbcrlf & vbcrlf
msg = msg & "descrizione: " & text1.text & vbcrlf
msg = msg & "prezzo: " & text2.text & vbcrlf
msg = msg & "reparto: " & text3.text & vbcrlf
msg = msg & vbcrlf
msg = msg & "procedere ?"

if msgbox(msg, vbyesno, "aggiunta articolo") = vbyes then

nomedb = app.path & "\magazzino.mdb"

set db = opendatabase(nomedb, , false, false)

strsql = "insert into articoli(descrizione, prezzo, reparto) "
strsql = strsql & "values ('" & text1.text & "',
'" & text2.text & "','" & text3.text & "');"

db.execute strsql

db.close

msgbox "articolo correttamente registrato", 64, "fatto"

text1.text = ""
text2.text = ""
text3.text = ""

text1.setfocus
else
msgbox "aggiunta articolo annullata", 32, "avviso"
end if
list1.clear
End sub

Cosa ho fatto qui... Innanzitutto per semplificare ho definito di tipo stringa la variabile prezzo e creato una msgbox con più righe (grazie alla funzione vbcrlf) che va a prendere i valori dalle textbox relative ai campi immessi (text1.text campo descrizione, text2.text campo prezzo, text3.text campo reparto in riferimento alla semplice interfaccia visuale necessaria)
Quindi per sciccheria immettiamo la condizione se procedere o meno con l'aggiunta dell'articolo con la msgbox si o no a scelta multipla (ho scritto un semplice topic a riguardo) Se si sceglie no l'aggiunta viene semplicemente annullata e viene visualizzata una msgbox per informare l'utente di questo, se si sceglie si invece entriamo nel seguente meccanismo per aggiungere nuovi dati al nostro database.
Innanzitutto cn le funzioni già viste in precedenza settiamo il nome del percorso del nostro database e lo apriamo in lettura e scrittura. Fin qui niente di nuovo.
Ora invece cn le istruzioni strsql identifichiamo i comandi sql necessari alla aggiunta di nuovi dati per il nostro database. Inseriamo nella tabella articoli (o nometabella cm volete chiamarla) dapprima i nomi che identificano i campi (in questo caso descrizione, prezzo, reparto) e poi i loro valori con la funzione values concatenando la strsql precedente cn questa grazie al parametro & e quindi i valori va proprio a prenderli dalle textbox già citate in precedenza e il tutto tra apici singoli e doppi per rispettare rigorosamente il linguaggio sql.
Quindi facciamo eseguire al nostro database questi comandi sql con db.execute strsql e chiudiamo il nostro database con db.close

Infine una volta fatto verrà visualizzata la nostra msgbox con questa informazione e per sciccheria verranno azzerate le textbox per l'immissione di eventuali nuovi valori settando il focus quindi il cursore dove scrivere sulla prima textbox)

Infine dopo il classico end if che chiude la struttura condizionale puliamo la lista con list1.clear per visualizzare la lista aggiornata con i prodotti da noi aggiunti (se nn si fa cosi ogni volta la lista viene duplicata visualizzando la vecchia e la nuova aggiornata)

Ora vediamo come effettuare una semplice cancellazione identificando il record che vogliamo cancellare con il suo relativo campo codice (chiave primaria) da immettere in un'altra textbox che si chiamerà ad esempio text4.text

Codice:
Private sub command3_click()
dim cod as string
if text4.text = "" then
msgbox "inserisci il codice dell'articolo da cancellare",16,"mancanza codice"
Else
cod = text4.text
set db = opendatabase(nomedb, , false, false)
strsql = " delete * from articoli where codice =" & cod & ";"
db.execute strsql
db.close
list1.clear
end if
end sub

Per non far si che questo post sia lungo 3 km cerco di essere sintetico spiegando solo i nuovi elementi presenti nel codice.
Dopo aver definito la variabile cod di tipo stringa e effettuato il controllo sulla textbox affinché abbia un valore che associeremo a cod apriamo il database e definiamo strsql con i comandi sql assoggettati per la cancellazione dei dati in questo caso vengono cancellati i campi della tabella articoli associati al codice che noi abbiamo immesso nella textbox ovvero il record che identifica dei determinati prodotti del codice 5 per esempio. Quindi eseguiamo l'istruzione e chiudiamo il database pulendo la lista per poi aggiornarla con l'operazione effettuata.

Vediamo ora l'aggiornamento... per campo... mmm... facciamo descrizione. ( se lo si vuole fare con tutti gli altri campi basta sostituire alcuni valori )

Codice:
private sub moddescr()
dim cod as string
dim descr as string
if text5.text = "" then
Msgbox "codice mancante",16,"errore"
else
cod = text5.text
set db = opendatabase(nomedb, , false, false)
descr = inputbox("inserire nuova descrizione")
strsql = "update articoli set descrizione = '" & descr & "' where codice = " & cod & ";"
db.execute strsql
db.close
list1.clear
end if
end sub

Qui niente di nuovo (nn fatemi ripetere per la miliardesima volta tutto eheheh) tranne che alcuni piccoli dettagli.
In questo caso aggiorniamo il campo descrizione del record identificato dal codice che andremo ad inserire con una nuova descrizione che il programma prenderà e aggiornerà cn la vecchia descrizione contenente nel database dall'immissione della descrizione tramite inputbox.

Una volta scritto il codice per la inputbox aggiorniamo la solita strsql con i comandi sql per l'aggiornamento dati facendo in modo di aggiornare la nostra tabella articoli settando che il nome campo descrizione prende il suo nuovo valore dalla variabile descr (quella che ha assunto il valore di ciò che noi abbiamo inserito tramite inputbox) specificando la condizione (con where) che il codice che identifica il record sia esattamente quello che abbiamo immesso in precedenza con la textbox.
Per dire qualcosa di nuovo il paramentro ; serve per chiudere i comandi sql ogni qualvolta concludiamo di scrivere un comando.

Ok ok dopo piu di un'ora che sto scrivendo questo topic spero di nn aver dimenticato nulla XD

Spero anzi penso di essere stato molto chiaro.

Arrivederci a tutti alla prox
 
Stato
Discussione chiusa ad ulteriori risposte.