Sei sulla pagina 1di 15

HTML CSS WebMarketing Javascript VBScript AJAX ASP ASP.

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