Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
JAX ASP ASP.NET PHP XML Java VisualBasic SQL Photoshop Windows IIS
Homepage|VisualBasic|GuidaaVisualBasic6
GuidaaVisualBasic6
ApplicazionidesktopconVisualBasic6
ImparaacreareapplicazionigestionalicolVisualBasic
ScrittodaLucaRuggieronellasezioneVisualBasic
ConcessainesclusivaaMrWebmasterE'vietatalaredistribuzionesenzaesplicitoconsenso
1. IntroduzioneaVisualBasic6
2. Interfacciaeambientedisviluppo
3. LeFormeglioggettidiunmoduloVB
4. Variabili,costanti,tipididatoeoperatori
5. Istruzionicondizionali
6. Istruzionidiiterazione
7. GliArray
8. FunzionieSub INEVIDENZA
9. Gestionedellestringhe
GuidaaVisualBasic6
10. Gestionedelledate
11. FunzionidiconversioneeFunzionipredefinite ReferenzedeiTagHtml
12. Interazioneconidatabase
Errore80004005:Cannotupdate.Datab...
1.IntroduzioneaVisualBasic6
IntroduzioneadAjaxedAspconJscri...
VisualBasicunlinguaggiodiprogrammazioneWUI(WindowsUserInterface)dicasa GenerarenumeriRandominJava
Microsoft,abbastanzapotenteemoltosemplicenellasintassienellefunzionalit,adattoquindi
siaalneofitacheallosviluppatoreprofessionista.
VisualBasic,daorainposemplicementeVB,nascedalvecchioBasic,sempredicasa
Microsoft,comeversioneavanzataconinterfacciavisuale(daquiilsuonomeattuale)il
vecchioBasic,infatti,nasceemuoreinambienteDOS.VBattualmenteedefinitivamente
arrivatoallaversione6.0:laversionesuccessiva,inusodagiqualcheanno,fapartedella
piattaforma.NETepurconservandolamaggiorpartedellecaratteristiche,pudefinirsiun
linguaggioasestante:VBquindidifferentedaVB.NET.
VBuntipodiprogrammazionedettaeventdriven,ovverobasatasuglieventi.Vedremoin
seguitocosavuoldirequestaaffermazione.
VBacquistabilecolpacchettoMicrosoftVisualStudio6.0oppureseparatamente.Ilprezzo
variaspessoeconl'avventodi.NETdecisamentecalato,manoncertoaccessibileachi
solouncurioso,bensacolorocheintendonofaredellaprogrammazionelapropriaprofessione.
L'installazionedelpacchettocompletoodelsingolosoftwaredavverosemplice,sufficiente
seguireleistruzionidelWizarddiinstallazione,inserireidatirichiesti,ilnumerodiseriedel
prodotto(ingeneresitrovaall'internodellacopertinadelCDacquistatooppuresudiun
documentointernoallacustodia)elasciarecheilWizardfacciailresto.Altermineriavviareil
sistemaanchesenonrichiesto.
Nelcorsodellaguidaimpareremocomesicomponel'ambientedisviluppo,tratteremole
componentiprincipalidelprodottoedellasintassi,impareremoaprogrammareadeventicon
l'utilizzodeglioggetti(Rif.capitolisuccessivi),impareremoamanipolarefileditesto,XMLe
databaseMicrosoftAccess(preferibilmenteversione2000).
Buonalettura!
2.Interfacciaeambientedisviluppo
Unavoltaeseguitaedandataabuonfinel'installazione,peraccedereall'ambientedisviluppodi
VBpartiredalmenu
Start/Programmi/MicrosoftVisualStudio6.0/MicrosoftVisualBasic6.0
laprimarichiestafattadaVBdiscegliereiltipodiprogettotramitelafinestradocumentata
nell'immagineseguente:
DOWNLOAD
Grafica
Internet
ManutenzionePC
Multimedia
Sicurezza
Ufficio
Webmaster
LavoceselezionataperdefaultEXEstandardovverounclassicoprogettoVB.Non
preoccupatevidellealtrevoci,sitrattainunmodoonell'altrodicomponentiavanzatiche
tratteremoinunaversioneavanzatadellaguida.
Confermatequindi,cliccandoiltastoAprilasceltadiunnuovoEXEstandard.L'interfaccia
completadelprogramma,documentataconunaseriedicommentiaggiuntiinrosso,
visualizzabilecliccandoquestolink.
Probabilmentenontutteledefinizionedeglielementidell'interfacciasarannochiareatutti
immediatamente,mapregoilettoridinonpreoccuparsiperchogninozionesaresaurita
primanelcorsodellaguida.
3.LeFormeglioggettidiunmoduloVB
LeFormsonoglielementimadrediunprogrammaVB,oingeneralediqualsiasisoftwaredi
sviluppoelinguaggiodiprogrammazioneWUI.Sitrattadifinestremoltocomuni,classichedi
Windows:unesempiolafinestradelleproprietdiInternetExplorer,oppuredellepropriet
delDesktop,ecc...
SudiunaFormvengonoposizionatiivarielementiperlamanipolazionedeidatioperla
realizzazionediapplicazioninonbasatesudiundatabase.Inquestoparagrafovedremoi
principalioggetti(chechiameremoprevalentementecontrolli)perlarealizzazionediunmodulo
VB.
Torniamounattimoall'interfacciadiVBeguardiamosullasinistradell'immaginelabarra
Generaleincuisonocontenutiunaseriediiconedaquipossiamo,conundoppioclicko
facendoildrag'n'drop(trascinamento)dell'iconasullaFormstessa,inserirecontrollida
manipolareviacodice.Facciamounsempliceesempiochevedecoinvoltiitrecontrollipi
utilizzatiinVB,ovverolaTextBox(caselladitestoperl'inserimentodidati),laLabel
(sempliceareaincuiinseriredescrizioni)edilCommandButton(bottonedicomandoper
l'esecuzionediunaroutineodiunoscriptVB).
SicreiquindiunnuovoprogettoEXEstandarddallaFinestradelleProprietsulladestra
dell'IDEdisvilupposivadaamodificarelaproprietNamedellaFormelasichiami
frmPrimoProg.Primadiproseguiretengoasottolinearelamodalitdiassegnazionedeinomi
aicontrollidelleFormedalleFormstesse:siutilizzaunsuffissoinminuscoloepoiilnomeda
assegnareconlamaiuscolainizialepregoinoltrediassegnarealleFormedaiprogettinomi
significativi,perduebuonimotivi:
1. infasediprogettazionedifficilecambiareunnomeaduncontrolloperviadei
riferimenticheVBcreaautomaticamenteinunaseriedifilediconfigurazione
2. pernontrovarviindifficoltquandononsapereuncontrolloachescopoloavetecreato
senonriusciteadidentificarlofacilmenteesubitodaunnomecheabiaunsensologico
SimodifichiinoltrelaproprietCaption(lascrittachecomparesultitolodellaForm)in"Lamia
primaForm!".
Quellichevedetecerchiatiinrossonell'immagineseguentesonorispettivamenteicontrolliper
l'inserimentodiunaLabel,diunaTextBoxediunCommandButton.InseritesullaFormunoper
ognunodeicontrollidescrittifinoadottenereilseguenteeffettoinfasedisviluppo:
Bisognaammetterechecosipiuttostobruttina...vamodificataunpochino!
CliccandounasingolavoltasuuncontrollosullaFormcompaionoattornoalcontrolloipuntini
bludiselezioneedpossibilemodificarneledimensioni.Inoltresiassegnino,dallaFinestra
dellePropriet,iseguentinomieleseguentidicituretestualiaitrecontrolli:
TextBox
Name:txtTesto
Text:nessuntesto
Label
Name:lblRisultato
Caption:nessuntesto
CommandButton
Name:cmdEsegui
Caption:Esegui
finoadottenereilseguenterisultato:
Direichevagimeglio:)
Passiamoadunprimoesempiodicodiceedanchesefarriferimentoadelementidel
linguaggiononancoraspiegati,holapresunzionecheancheillettoremenoavvezzononavr
difficoltacapire.
Eccocifinalmentedifronteallaspiegazionediprogrammazioneeventdriven,ovverobasata
(letteralmenteguidata)suglieventi.AlclicksulCommandButtonverreseguitounoscriptVB:
ilclickl'evento!
SifacciadoppioclicksulCommandButtonesiaccederalcodicedelbottonedicomando,gi
compostodalseguentecodice:
PrivateSubcmdEsegui_Click()
EndSub
InVBquestaunaSubchetratteremopiavanti.All'internodiquestaSub,checomunque
l'elementomadrediunprogrammaodiunasingolafasediunprogrammaVB,andremoad
inserireilcodicecheverreseguitoalclicksulCommadButton:
'Questouncommento!
'VBnoneseguetuttocichepreceduto
'dalsingoloapicemalotrattacomeun
'promemoriaperlosviluppatore
PrivateSubcmdEsegui_Click()
IftxtTesto.Text=""Then
lblRisultato.Caption="Inserisciuntesto"
Else
lblRisultato.Caption=txtTesto.Text
EndIf
EndSub
Anchesenonabbiamoancoraaffrontatoleistruzionicondizionalicredosiaintuibileilfattoche
ilprogrammaragionercosi:selacaselladitestocontieneunvalorevuotoallorascrivinella
Labelunmessaggiocheindichiall'utentediinserireuntesto,oppurescriviilcontenutodella
caselladiteso.
PeravviareilprogrammasifacciaclicksulpulsantePlaycerchiatoinrossonell'interfacciadi
VB,oppuresipremailtastoF5sullatastiera.
NeiprossimicapitoliabbandoniamounattimolecomponentivisualidiVBperdedicarcial
codice,allasintassiedaglielementidellinguaggio.
4.Variabili,costanti,tipididatoeoperatori
Primadipassareallefasipidivertentidellinguaggionecessariodedicareuncapitolo
all'apprendimentodellecomponentibasedellinguaggio.
Levariabilisonodelleareedimemoriavirtualicheilprogrammavaaoccuparenelsistema
operativocheloeseguelapeculiaritdellevariabilichesonovalorisuscettibilia
cambiamentiasecondadicondizioni,eventi,azionidegliutenti,ecc...Perdichiarareuna
variabilesiusalaparolachiaveDim.
Lecostantisonosimiliallevariabili,conladifferenzache,comeilterminelasciaintuire,non
sonoareedimemoriesuscettibilidinamicamenteacambiamentiesiutilizza,perla
dichiarazione,laparolachiaveConst.
Selevariabilielecostantisonopraticamentelastessacosa,conladifferenzachelevariabili
sonosuscettibiliacambiamentielecostantino,perchsiutilizzaunasintassidifferenteperla
dichiarazione?Larispostasemplice:Constoccupaun'areadimemoriainferiorerispettoa
Dim,quindisievitadisovraccaricareinutilmenteilsistema.
ItipididatosonoelementidiVBcheconsentonodidefinireaprioriseunavariabileditipo
numerico,stringa,ecc...Nonobbligatoriotipizzareunavariabile,maconsigliabileperil
motivocheilprogrammanondeveandareasovraccaricareilbufferdell'interpreteperstabilire
cometrattareunvalore,sapendoloapriorigrazieallatipizzazione.
Glioperatorisonosimbolichevengonoutilizzatipereffettuareuguaglianze,operazioni
matematiche,implementarecondizioniavanzate,ecc...
Facciamounesempiodidichiarazioneetipizzazionediunavariabile.Sicreiunnuovoprogetto
EXEstandardesiaccedaalcodicesenzapassareperildoppioclicksuunelementodellaForm
osullaFormstessa,masemplicementedalmenu
Visualizza/Codice
esiinseriscailseguentecodice:
OptionExplicit
DimtestoAsString
DimnumeroAsInteger
inquestomodoabbiamolevariabilitestoditipostringaenumeroditiponumericointero.
LaclausolaOptionExplicitserveaVBasovraccaricaremenoilbufferdell'interpretedel
programmainfasedilocalizzazionedellevariabili.
SiinseriscaunCommandButtonsullaFormeglisiassegnilaproprietNamecmdVariabili(a
voilasceltadimodificarnelaCaption,nonimporta,solounesempio)edaldoppioclicksi
inseriscailseguentecodice:
PrivateSubcmdVariabili_Click()
testo="Hello,World!"
numero=5
MsgBoxtesto,vbOKOnly,"MessaggiodaVB"
MsgBoxnumero,vbOKOnly,"AltromessaggiodaVB"
EndSub
SiavviiilprogrammapremendoF5edalclicksulCommandButtonverrannolanciatedue
finestredimessaggioconsecutive:laprimastampaavideolavariabiletestoelaseconda
stampaavideolavariabilenumero.
Questosempliceesempiopersottolineareunaspettomoltoimportante:unavariabileditipo
StringvavalorizzatatradoppiapicimentreunavariabileditipoIntegervavalorizzata,solocon
numeri,senzaapici.
Sicancellinolevariabilitestoenumerodallapartegeneraledelcodiceesiinseriscanole
seguenti:
OptionExplicit
DimaAsString
DimbAsString
DimcAsString
SicancelliilcodiceappenapropostodallaSubcmdVariabili_Click()esiinseriscailseguente:
PrivateSubcmdVariabili_Click()
a="10"
b="5"
c=a+b
Debug.Printc
EndSub
Debug.Printlanciailrisultatodell'operazionenellaFinestraImmediatadell'ambientedi
sviluppochecomparealvoloall'esecuzionedelloscript.Abbiamomessoinpraticaunesempio
erratodicalcolatrice,datolasommadellevariabilisar105enon15...comefare?Usiamoil
tipoInteger!
Simodifichilapartegeneraledelcodicecomesegue:
OptionExplicit
DimaAsInteger
DimbAsInteger
DimcAsInteger
elaparterelativaallaSubcomesegue:
PrivateSubcmdVariabili_Click()
a=10
b=5
c=a+b
Debug.Printc
EndSub
Oratuttook!
Concludiamoquestocapitoloconunapanoramicasuglioperatori.
Operatoridiassegnazione
=(ugualea...)
<(minoredi...)
>(maggioredi...)
<=(minoreougualea...)
>=(maggioreougualea...)
<>(diversoda...)
Operatorimatematici
+(effettuaunasomma)
(effettuaunasottrazione)
*(effettuaunamoltiplicazione)
/(effettuaunadivisione)
Operatoridistringa
&(concatenaduestringhe)
+(concatenaduestringhemasiusala&)
Operatorilogici
AND(indicacheduecondizionidevonoessereentrambevere)
OR(indicachesolounadelleduecondizionidev'esserevera)
5.Istruzionicondizionali
Inunlinguaggiodiprogrammazioneesistonostrutturedicontrollocomeleistruzioni
condizionalicheservono,comevistoneicapitoliprecedenti,astabilireperl'appuntocondizioni
perscatenareunaroutineoun'altraasecondadelrisultatodellacondizione.
VButilizzailcostruttoIfThenElsepereffettuarecontrolli.Lasintassibaselaseguente:
IfcondizioneThen
espressione
Else
espressionealternativa
EndIf
Vediamounesempio.SicreiunnuovoEXEstandardesiassegniallaFormilName
frmIstrCondsiinseriscaunCommandButtonelosichiamicmdIstrCond.
Nellapartegeneralesiinseriscailseguentecodice:
OptionExplicit
DimaAsInteger
DimbAsInteger
enellaSubilseguentecodice:
PrivateSubcmdIstrCond_Click()
a=10
b=10
Ifa=bThen
Debug.Print"AugualeaB"
Else
Debug.Print"AdiversodaB"
EndIf
EndSub
EssendoAeBimpostateentrambea10,ilrisultatosarAugualeaB.
VB,cometuttiilinguaggidiprogrammazionepossiedeunaclausolaperampliareilraggio
condizionale,ovveroElseIf.Facciamounesempiochiarificatore.
SiinseriscanellaSubilseguentecodce:
PrivateSubcmdIstrCond_Click()
a=10
Ifa=10Then
Debug.Print"Augualea10"
ElseIfa<10Then
Debug.Print"Aminoredi"
Else
Debug.Print"Adiversoda10"
EndIf
EndSub
IlrisultatosarAugualea10.
Esisteunaltrocostruttoperlagenerazionedicondizioni,ilSelectCase.Lasintassibasela
seguente:
SelectCasecondizione
Case0:espressione0
Case1:espressione1
Case2:espressione2
CaseElse
tuttiglialtricasi
EndSelect
VedremodeicasidistudiocolSelectCaseneicapitolisuccessivi.
6.Istruzionidiiterazione
Leistruzionidiiterazionefannopartedelleistruzionidicontrollodeilinguaggidi
programmazioneeservono,comeilnomelasciaadintendere,aripetereunafasedel
programmaNvoltefinchnonsiraggiungelacondizionestabilitadallosviluppatoreinmodo
staticoodinamico.
Fannopartedelleistruzionidiiterazione,dettianchecicli,icostrutti
ForNext
ForEachNext
While
DoWhileLoop
Esaminiamolisingolarmente.
IlcicloForNextripeteun'istruzionesullabasediunavariabileditipoIntegerchepartedaun
valorepredefinito,ingenerezero(0)esiperpetuafinoadunvaloremaggiore,adesempio
nove(9)ripetendoquindiilcicloda0a9peruntotaledi10ripetizioni.
Lasintassibaselaseguente:
ForinizioTofine
espressionedaripetereNvolte
Next
Vediamounesempioconcreto.SicreiunnuovoEXEstandardesiinseriscasullaformun
bottonedicomandoacuiassegnareilnomecmdForedunaLabeldinomelblFor.Consigliodi
ingrandireunpolaLabelinaltezzarispettoallesuedimensionididefault,inmododa
visualizzarecorrettamenteilrisultato.
Nellapartegeneraledelcodiceinserireilseguentecodice:
OptionExplicit
DimiAsInteger
NellaSub,invece,inserireilseguentecodice:
PrivateSubcmdFor_Click()
i=0
Fori=0To9
lblFor.Caption=lblFor.Caption&i&vbCrLf
Next
EndSub
Facciamolaconoscenzaconl'elementovbCrLfcherappresentailritornoacapoinVB.Se
avessimociclatosolo
lblFor.Caption=lblFor.Caption&i
avremmoavutocomerisultato
0123456789
conl'utilizzodivbCrLfavremoinvece
0
1
2
3
4
5
6
7
8
9
IlcicloForEachNextsidifferenziadaForNextperilmotivocheilprimoricercaogni
occorrenzadiunelementoinunelementomadre.Lasintassibaselaseguente:
ForEachelementoInelementi
espressionedaripetereNvolte
Nextelemento
Tratteremoquestociclopiavantinelcorsodellaguidaappenaspiegatialtrielementi,senza
deiqualiunesempiononavrebbesensoerischierebbe,addirittura,diconfondereleideeal
lettore.
IlcicloWhileesegueun'istruzione(oun'espressione)finquandounacondizionevera.La
sintassibaselaseguente:
Whilecondizione
espressionedaripetereNvolte
Wend
TratteremoapprofonditamenteWhilenelcapitolodedicatoaidatabase.
IlcicloDoWhileLoopsidifferenziabenpocodaWhile,quindicilimiteremoavedereun
esempiosintatticoepoiloabbandoneremo:
DoWhilecondizione
espressionedaripetereNvolte
Loop
7.GliArray
SidefinisceArrayunagglomeratodidati,staticiodinamici,archiviatiinunavariabilespeciale
informatabellare.
UnclassicoesempiodiArrayrappresentatodaigiornidellasettimana,mavediamoprimaun
esempiosintatticoteorico:
Dimnome_array(numero_elementi)
nome_array(0)="valore"
nome_array(1)="valore"
nome_array(2)="valore"
SicreiunnuovoEXEstandardesiinseriscaunaLabeldinomelblArrdaingrandirecome
nell'esempiodelcapitoloprecedente,edunbottonedicomandodachiamarecmdArr.
Siinseriscanellaporzionegeneraleilseguentecodice
OptionExplicit
Dimsettimana(7)AsString
enellaSubilseguentecodice:
PrivateSubcmdArr_Click()
settimana(0)="Lunedi"
settimana(1)="Martedi"
settimana(2)="Mercoledi"
settimana(3)="Giovedi"
settimana(4)="Venerdi"
settimana(5)="Sabato"
settimana(6)="Domenica"
'Quisottorichiameremol'Array
EndSub
Ampliamoilcodiceconquestariga,dainseriresottoalcommento:
Debug.Printsettimana(5)
IlrisultatosarSabatoperchsipuntatoall'indiceequivalente.Siinseriscapoi,alpostodella
precedenteriga,ilseguentecodice:
DimiAsInteger
i=0
Fori=0ToUBound(settimana)
lblArr.Caption=lblArr.Caption&settimana(i)&vbCrLf
Next
Dichiaroalvolounavariabilecheimpostocomecontatoreedeffettuounciclosullalunghezza
dell'Array
UBound(settimana)
restituiscelalunghezzadiunArray.Stampopoiavideoilrisultatopassandoall'Arrayla
variabilechefadacontatoreche,comeabbiamovistonelcapitoloprecedente,assumeun
valoredifferenteadogniiterazionedelciclo
settimana(i)
equivaleascrivere
lblArr.Caption=""
lblArr.Caption=lblArr.Caption&settimana(0)
lblArr.Caption=lblArr.Caption&settimana(1)
lblArr.Caption=lblArr.Caption&settimana(2)
lblArr.Caption=lblArr.Caption&settimana(3)
lblArr.Caption=lblArr.Caption&settimana(4)
lblArr.Caption=lblArr.Caption&settimana(5)
lblArr.Caption=lblArr.Caption&settimana(6)
8.FunzionieSub
Glielementimadrediunprogramma,quelliacuidelegatoilcompitodicontenereegestirele
routineegliscriptVBchevengonolanciatialloscatenarsidiunevento,sonoleFunzioniele
Sub.
Spessononsifamoltadistinzionetraquestielementi,datochesvolgonounruoloabbastanza
simile.LadifferenzatralorocheunaFunzioneraccoglieunaseriedioperazioni,oscript,che
insiemeformanounaroutineerestituisceunvaloreunaSubunprogrammaall'internodiun
programmaecosiviafinoalsoftwarefinale.AltradifferenzachesolounaSubviene
chiamataalloscatenarsidiunevento,mentreunaFunzionevienechiamataall'internodiuna
Subalverificarsidiunadatacondizioneoaprescindere.
SialeFunzionicheleSubpossonoesserepubblicheoprivate:pubblichequandosonovisibilia
tuttoilprogrammaedatutteleFormegeneralmentevengonoinseriteinunmodulodiclasse
esternoprivatequandofannopartedellaFormincuinascono,vivonoemuoiono.Siutilizzano
leparolechiavePublicePrivateeseomesseVBdaperscontatochesitrattadiunaFunzione
odiunaSubprivata.
LasintassidiunaFunzionepubblicalaseguente:
PublicFunctionNomeFunzione(argomentoAstipo)
istruzioni
EndFunction
LasintassidiunaFunzioneprivatalaseguente:
PrivateFunctionNomeFunzione(argomentoAstipo)
istruzioni
EndFunction
edpossibileometterelaparolachiavePrivate.
SintatticamenteparlandopereseguireunaSubnonbisognafaraltrochesostituirelaparola
chiaveFunctionconSubechiudereilbloccoconEndSubalpostodiEndFunction.
PerchiamareunaFunzioneounaSubdall'esternooall'internodiun'altraFunzioneoSub,basta
farriferimentoalnomeepassaretraparentesiglieventualivaloridaassegnareagliargomenti
(oparametri,oancoravariabili,chedirsivoglia)possibileutilizzarelaparolachiave
opzionaleCallprimadelnomedellaFunzioneoSubchesia.
Facciamounesempiotantochiarificatorequantoinutileaifinipraticidellarealizzazionediun
programma.SicreiunnuovoEXEstandardesiaccedaalcodicedellaFormdalmenu
Visualizza/Codice
esiinseriscailcodiceperlaseguenteFunzione:
PrivateFunctionMessaggio(testoAsString)
MsgBoxtesto
EndFunction
AllaFunzioneMessaggio()passolavariabiletestoditipoStringcherappresentailtestodel
messaggiochelanceremo.SiaccedapoiallaFunzione/eventoForm_Load()semplicemente
facendodoppioclickinunpuntoqualsiasidellaFormdallavisualizzazionestrutturaesirichiami
laFunzioneMessaggio()comesegue:
PrivateSubForm_Load()
CallMessaggio("Benvenuto!")
EndSub
Inquestafasevalorizzolavariabiletestoinserendomaterialmenteilmessaggiodibenvenuto:il
risultatosarinfattiunaMsgBoxconlascrittaBenvenuto!
9.Gestionedellestringhe
SiaquestocheilprossimocapitoloentranoneldettagliodelcodiceVBperimparareagestire
dueelementifondamentaliperqualsiasilinguaggiodiprogrammazione:lamanipolazionedelle
stringheelagestionedelledate.
Iniziamoconlestringhe.
VBdisponediunanutritaschieradiinteressantiFunzioniperlamanipolazionedellestringhe:
capitainmoltissimiprogrammididoversostituiredeterminaticaratteriinunastringa,di
dividereunastringainpistringheinbaseadundeterminatocriterio,dicontrollarela
lunghezzadiunastringa,difarcirestituiresolopartediunastringa,etantealtreesigenzeche
devonoesseresoddisfatte.
IniziamoconlaFunzioneReplace()cheserveasostituirecaratteriall'internodiunastringa.
Comevedremopiavantiparlandodeidatabase,importante,siainfasediinserimentodei
daticheinlettura,controllarechenoncisianoall'internodiunastringadeisingoliapici...
capitaperchequegliapicisianolnellastringaadunoscopo:sehounutentechesichiama
D'AlessiononpossocambiargliilnomeinDAlessio...insomma,nonsonomicailresponsabile
dell'anagrafe!Possopersostituireilsingoloapiceconduesingoliapiciinmododanondar
fastidioaldatabaseefarcomparirecomunquel'apiceldoveserve.Lasintassiperunasimile
operazionelaseguente:
Replace("D'Alessio","'","''")
InpraticaReplace()accettaiseguentiparametri:
Replace(stringa,caratteredasostituire,caratteresostitutivo)
SeadesempioinunafrasevogliosostituireunnomeuserlaFunzioneReplace()comesegue:
Replace("PippounpersonaggioDisney","Pippo","Pluto")
edeseguendoloconunDebug.Print
Debug.PrintReplace("Pippo...
riceverlafrasePlutounpersonaggioDisney.
PassiamoallaFunzioneSplit().Split()divideunastringainunArray(Rif.capitolo7)distringa
prendiamolaseguentestringa:
Luca#Ruggiero#Napoli
hounaseriedidatiqualinome,cognomeecittdiappartenenza,mainunaformairregolaree
teoricamenteilleggibileescorrettagrammaticalmente.Ilcaratterecancelletto(#)presente
nellastringamiconsentediavereunutileriferimentoperdividerelastringacomemeglio
conviene.
SicreiunnuovoEXEstandard,siinseriscasullaFormunaLabeldinomelblSplitesiacceda
allaSubForm_Load()nellapartegeneralesiinseriscailseguentecodice:
OptionExplicit
DimstringaAsString
Dims()AsString
DimiAsInteger
doves()unastringaditipoArraycheutilizzerperloSplit().
NellaSub,invece,siinseriscailseguentecodice:
PrivateSubForm_Load()
i=0
stringa="Luca#Ruggiero#Napoli"
s=Split(stringa,"#")
Fori=0ToUBound(s)
lblSplit.Caption=lblSplit.Caption&s(i)&vbCrLf
Next
EndSub
Utilizzandolasintassi
Split(stringa,caratterediriferimento)
otterrinoutputsullaLabel
Luca
Ruggiero
Napoli
Ricordoche,comeunArray,ilconteggiodegliitempartedazero(0)finoadN.
PercontrollarelalunghezzadiunastringaesistelaFunzioneLen()cheaccettacomeparametro
lastringadicui,appunto,sivuolecontrollarelalunghezza.Lasintassilaseguente:
Len(stringa)
quindi
Debug.PrintLen("Luca")
restituisce4.
VBpossiedetreFunzionil'unafigliadell'altracheserveadeliminareglispazisuperfluisulla
sinistra,sulladestraosiasullasinistrachesulladestradiunastringa.LeFunzionisono
rispettivamenteLTrim()(LeftTrim),RTrim()(RightTrim)eTrim().
LasintassianalogapertutteetreleFunzioniedilfunzionamentoquelloappenadescritto
facciamounesempioconTrim()lasuasintassi:
Trim(stringa)
quindi
Debug.PrintTrim("Luca")
restituisceLucasenzaglispazisuperflui.
LeFunzioniLeft(),Right()eMid()servonorispettivamenteadisolaredaunastringauncerto
numerodicaratterispecificati.Andiamoperordineevediamocomeusufruiredellefunzionalit
ditutteetre.
SicreiunnuovoEXEstandardesiinseriscanellapartegeneraleilseguentecodice:
OptionExplicit
DimstringaAsString
cheuseremopergliesempiditutteetrelefunzioniappenaaccennate.
LasintassidiLeftlaseguente:
Left(stringa,numerodicaratteri)
NelcodiceForm_Load()inseguireilseguentecodice:
PrivateSubForm_Load()
stringa="lukeonweb.net"
Debug.PrintLeft(stringa,4)
EndSub
Lastringalukeonweb.netvieneparserizzatadaLeft()erestituiscesoloiprimi4caratteri,
ovveroluke.
Ilseguentecodiceillustral'utilizzodellaFunzioneRight()
PrivateSubForm_Load()
stringa="lukeonweb.net"
Debug.PrintRight(stringa,4)
EndSub
Ilrisultato.net.
InpraticaLeft()prendeNcaratterispecificaticomesecondoparametrotraparentesiapartire
dallasinistradellastringa,mentreRight()partedalladestra.
Mid()invecenonconsideraNcaratteriapartiredasinistraedNcaratteriapartiredadestra
unesempio:
PrivateSubForm_Load()
stringa="lukeonweb.net"
Debug.PrintMid(stringa,5,5)
EndSub
Ilrisultatoonweb.
LestringhepossiedonoancoramoltissimeFunzioni,maquellespiegateinquestocapitolosono
essenzialiperaffrontarelaprogrammazioneVBrimandolaspiegazionedialtreFunzioniadun
corsopiavanzatooaduncorsoprofessionale.
10.Gestionedelledate
Lagestionedelledaterivesteunruolomoltoimportantenell'ambitodiunqualsiasiprogramma.
VBmetteadisposizionedellosviluppatoreunaseriedisempliciepotentiFunzioni
elenchiamole:
Daterestituisceladatainformatogg/mm/aaaa
Timerestituiscel'orarioinformatooo.mm.ss
Nowrestituisceladatael'orarioinformatogg/mm/aaaaoo.mm.ss
FormatDateTimerestituiscevariformatidelladataancheinformatoalfanumerico
DayrestituisceilgiornodellasettimanaaccettandounoggettoDate
Monthrestituisceilmesedell'annoaccettandounoggettoDate
Yearrestituiscel'annoaccettandounoggettoDate
Hourrestituiscel'oraaccettandounoggettoTime
MinuterestituisceiminutiaccettandounoggettoTime
SecondrestituisceisecondiaccettandounoggettoTime
Facciamoqualcheesempio:
Debug.PrintDate'restituisce31/10/2004
Debug.PrintTime'restituisce15.00.00
Debug.PrintNow'restituisce31/10/200415.00.00
Debug.PrintFormatDateTime(Date,vbLongDate)
'restituiscedomenica31ottobre2004
Debug.PrintDay(Date)'restituisce31
Debug.PrintMonth(Date)'restituisce10
Debug.PrintYear(Date)'restituisce2004
Debug.PrintHour(Time)'restituisce15
Debug.PrintMinute(Time)'restituisce00
Debug.PrintSecond(Time)'restituisce00
11.FunzionidiconversioneeFunzionipredefinite
VBmetteadisposizionedellosviluppatoreunaseriediFunzionipredefinite,alcunedefinitedi
conversione,cheservonoaconvertireuntipodidatoinun'altrotipo,edaltreperla
risoluzionedialcuneproblematicheinmanierasemplice,veloceepotente.Inquestocapitolo
affronteremoleprincipali.
LeFunzionidiconversionepifamosesonoCInt()eCStr()checonvertonoundato
rispettivamenteinformatoIntegeredinformatoString.Lasintassilaseguente
DimnumeroAsString
numero="5"'unnumeromainformatostringa
CInt(numero)'restituiscenumero=5
EsistonoaltreFunzionidiconversionecomeCBool()checonverteundatoinvalorebooleano,
ovverocherestituisceTrueoFalseCDate()checonverteunastringainunadataCCur()che
converteunnumeroinformatovaluta,edaltre.
AlcuneFunzionipredefinitediVBmoltocomodesonoFormatNumber()cheseparaconun
puntolemigliaia
Debug.PrintFormatNumber(1000,0)'restituisce1.000
FormatCurrency()cherestituisceunnumeroconilsimbolodell'euro
Debug.PrintFormatCurrency(1000,1)'restituisce1.000
12.Interazioneconidatabase
VBnatoprincipalmenteperlacreazionedipotentiinterfaccechepermettonolagestione
localeoviarete(NONInternet)didatiresidentisuunafontedidatiqualeundatabase.Essendo
unprodottodicasaMicrosoft,VBpreferiscelavorareconprodotti(DBMS,ovverogestoridi
database)MicrosoftcomeAccesseSQLServer,malavoracorrettamenteancheconDBMSdi
casedifferenticomeOracle.
Inquestocapitolocibaseremosull'interazioneconAccess,preferibilmenteversione2000edo
perscontatocheillettoreabbiaalmenoun'infarinaturadibasediSQL.
Perlaconnessioneconunafontedidatielagestionedeidatiiviresidenti,VButilizzal'oggetto
ADO(ActiveXDataObject)perl'interfacciamentotrailprogrammaelafontedidatistessa.
ADOmetteadisposizione,tral'altro,dueoggettifantastici,ovveroConnectionperlagestione
dellaconnessioneedaltreutility,eRecordsetperlagestionefisicadeidati.
SicreiunnuovoEXEstandardesiaccedaalmenu
Progetto/Riferimenti...
perl'importazionedeiriferimentiadADO,selezionandolevocicomenell'immagineseguente:
SinominilaFormfrmDatabase,siinseriscanodueLabelconCaptionNomeeCognome(non
preoccupatevidicambiarelaproprietName)edueTextBoxincuisvuotarelaproprietTexte
modificareinomecometxtNomeetxtCognome.SiaggiungapoiunCommandButtonda
nominarecmdInserisciemodificarelaCaptioninInserisci.QuestaFormciconsentirdi
effettuareinserimentineldatabaseAccesscecreeremotrapocol'immagineseguentemostrail
risultatofineladellaForm:
Sisalviilprogettodalmenu
File/Salvaprogettoconnome...
nellacartellatestdacrearesottoildriveC:
C: est
All'internodiquestacartellatroveretefeifilediprogettocreatiautomaticamentedaVB
aggiungeteinquestacartellailfileAccessdatabase.mdbalcuiinternocrearelatabellautenti
incuiinserireicampiid(Contatore),nome(Testo)ecognome(Testo)appenaespletata
questaoperazionetornaresullaForminvisualizzazionestruttura,accederealcodicedellaForm
edinserirequesterighenellapartegenerale:
OptionExplicit
DimcnAsADODB.Connection
DimrsAsADODB.Recordset
DimstringaAsString
ItipididatoADODB.ConnectionedADODB.RecordsetsonostatiaggiuntiaVBpermezzo
dell'importazionedeiriferimenticomeaccennatoinprecedenza.
DoppioclicksulCommandButtoperaccedereallaSubincuiinserireilseguentecodice:
PrivateSubcmdInserisci_Click()
IfLen(Trim(txtNome.Text))=0Then
MsgBox"Inserireilnome",vbCritical,"ERRORE"
txtNome.SetFocus
ExitSub
EndIf
IfLen(Trim(txtCognome.Text))=0Then
MsgBox"Inserireilcognome",vbCritical,"ERRORE"
txtCognome.SetFocus
ExitSub
EndIf
stringa="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="
stringa=stringa&"C: estdatabase.mdb"
Setcn=NewADODB.Connection
Setrs=NewADODB.Recordset
cn.Openstringa
rs.Open"utenti",cn,3,3
rs.AddNew
rs("nome")=txtNome.Text
rs("cognome")=txtCognome.Text
rs.Update
Setcn=Nothing
Setrs=Nothing
MsgBox"Inserimentoeffettuato",vbOKOnly,"CONFERMA"
EndSub
Aprimavistaquestocodicepotrebbedestarequalcheperplessitallettorepiinesperto,quindi
affrontiamolesingolefasidellaSub.
Controllocheicampinomeecognomesianostaticompilaticorrettamente,utilizzando
l'espressioneExitSubperusciredallaSubqualoralecondizioninonsianostatesoddisfattee
nonsivuolpermetterelacontinuazionedellaroutine:
IfLen(Trim(txtNome.Text))=0Then
MsgBox"Inserireilnome",vbCritical,"ERRORE"
txtNome.SetFocus
ExitSub
EndIf
IfLen(Trim(txtCognome.Text))=0Then
MsgBox"Inserireilcognome",vbCritical,"ERRORE"
txtCognome.SetFocus
ExitSub
EndIf
Acondizionisoddisfattecreolastringadiconnessionealdatabaseelamemorizzonella
variabilestringa:
stringa="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="
stringa=stringa&"C:estdatabase.mdb"
ConlaclausolaSetimpostolevariabilicnedrscomenuoveistanzedeglioggettiConnectione
Recordset:
Setcn=NewADODB.Connection
Setrs=NewADODB.Recordset
AprolaconnessionealdatabaseedilRecordsetinmodalitscrittura,passandoalmetodoOpen
ilnomedellatabellasucuivogliolavorare,ilnomedellaconnessionechestoutilizzandoedi
cursoriappropriati:
cn.Openstringa
rs.Open"utenti",cn,3,3
UtilizzoimetodiAddNewedUpdateperaggiungereunnuovorecordallatabellaeper
aggiornarlopassopoialRecordseticampidellatabellaelivalorizzoconlevariabilicontenenti
idaticorrispondenti:
rs.AddNew
rs("nome")=txtNome.Text
rs("cognome")=txtCognome.Text
rs.Update
Puliscolamemoriadelbufferdallevariabilicontenentilaconnessioneedilrecordset,
settandolesulvalorespecialediVBNothing:
Setcn=Nothing
Setrs=Nothing
Infine,adoperazioniespletate,lanciounmessaggiodiconferma:
MsgBox"Inserimentoeffettuato",vbOKOnly,"CONFERMA"
Vediamoadessocomeleggereidatidaldatabase.SiaggiungaunanuovaFormdalmenu
Progetto/Inserisciform
siscelgaFormesiconfermi.SiassegniallaFormilnomefrmLetturaesiaggiungaunaLabel
dinomelblDatigrandequantotuttalaForm.
Siaccedaall'eventoForm_Load()dellaFormconundoppioclickinunpuntoqualsiasidella
Formstessaesiinseriscanellapartegeneraleilseguentecodice:
OptionExplicit
DimcnAsADODB.Connection
DimrsAsADODB.Recordset
DimstringaAsString
InForm_Load(),invece,inserireilseguentecodice:
PrivateSubForm_Load()
stringa="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="
stringa=stringa&"C: estdatabase.mdb"
Setcn=NewADODB.Connection
Setrs=NewADODB.Recordset
cn.Openstringa
rs.Open"SELECT*FROMutenti",cn,1
Ifrs.EOFThen
lblDati.Caption="Nessundato"
Else
Whilers.EOF=False
lblDati.Caption=lblDati.Caption_
&rs("nome")&""_
&rs("cognome")&vbCrLf
rs.MoveNext
Wend
EndIf
Setcn=Nothing
Setrs=Nothing
EndSub
Granpartedelcodiceappenapresentatononmoltodifferentedaquellodiesempioper
l'inserimento:lastringadiconnessionealdatabaselastessa,necessariosettareedaprire,
edinfinesvuotare,glioggettiConnectioneRecordset.Concentriamocisullaletturadeidati:
Ifrs.EOFThen
lblDati.Caption="Nessundato"
Else
Whilers.EOF=False
lblDati.Caption=lblDati.Caption_
&rs("nome")&""_
&rs("cognome")&vbCrLf
rs.MoveNext
Wend
EndIf
Lalogicaseguitalaseguente:senoncisonodatinellatabella,ovveroselaletturadel
Recordsetarrivaallafinedellatabella(EOFEndOfFile)lanciounmessaggiocheavvisache
nonsonostatitrovatidatialtrimentieffettuouncicloestampoavideonellaLabeltuttiirecord
tiratifuoridallastringaSQL
SELECT*FROMutenti
passataalRecordsetimpostatoinlettura.
IpicliccatidellasezioneVisualBasic
::UnarubricainVBeMsAccess(96.122)
::UnasemplicecalcolatriceinVB6(21.484)
::Richiamareunaformdaun'altraforminVisualBasic(21.118)
::InterazionetraVisualBasicedMSExcel(21.074)
::InviareemailconCDOinVisualBasic6(20.090)
::LeggereunfileXmlcolDOMinVB6(20.079)
::UnvisualizzatorediimmaginiinVB6(13.380)
::ScrivereunfileMSWordinVB6(11.927)
::CreazioneecancellazionediunfileditestoconVisualBasic(11.739)
::UnsemplicesistemadiLogininVB6(11.336)
2001/2017lukeonweb.netPartitaIVA05564851219Privacy|Cookie|Pubblicit|Contatti