Vous êtes sur la page 1sur 10

13/2/2016

TutorielAccesscafeineDbogage:requtescritesparVBA
Forums Tutoriels Magazine FAQs Blogs Chat Newsletter tudes Emploi Club
Contacts

Accueil

ALM

Java

Iamwebaccessmanagement(h/f)
AtosIledeFranceLesClayessousBois(78340)
Technicalleadersiebelh/f
IBMServicesCenterLilleNordPasdeCalaisLille(59000)
DveloppeurGnralisteSpcialis
DentalWingsinc.(Montral,Qubec,Canada)QubecMontral(07110)

.NET
Office

Dv.Web

Access

ForumAccess

EDI

Excel

Programmation
Word

F.A.QAccess

Outlook

F.A.QVBA

SGBD

PowerPoint

Tutoriels

Office

Sources

Stage
CDI
CDI [Autre]

Solutionsd'entreprise

SharePoint
Outils

MSProject

Livres

Rechercher

AccessTV

Applications

Mobiles

Systmes

OpenOffice&LibreOffice

Office2010

InitiationDbogage:requtescritesparVBA
Tabledesmatires
I.Objectif
II.Constatdebogue(bug)
III.UtilisationduDebug.Print
IV.Gnralisationl'utilisationdes
outilsdedbogage
IVA.Dfinitiondepointd'arrt
IVB.Lemodepaspas
IVC.Lesespions
V.Dbogageparunerequtedetest
VA.Parcopiercoller
VB.Parlecode
VC.Rsolutiondubogue
VI.FrequentlyAbominableQueries
(FAQ)
VIA.ConfusionChaineSQLet
Variable
VIB.Variablevide
VIC.Typededonnes
VID.Espacesmanquantsou
superflus
VIE.PrsencedeSimpleQuote
(')ouDoubleQuote(")dansla
variable
VIF.Autres
VII.Conclusion
Thmesabords:
.dbogaged'unerequte
.manipulationdesrequtesetchanesdecaractres
Niveaurequis:dbutant
Articlelu23949fois.
L'auteur
CharlesA.
L'article
Publile1eroctobre2005Misjourle1eroctobre2005
VersionPDFVersionhorsligne
I.Objectif

ePub,AzwetMobi

Cetrscourttutorielapourobjectifdedonnerunemthodededbogagelorsde
requtescritesparducodeVBA.

Lienssociaux

Partager

Nousnoussituonsdanslecasfrquentoledveloppeursouhaiteouvrirun
recordset/modifierunerequte/modifierunRecordsourceparleCode.
LecodageVBAnepermetpasdevrifierlavaliditd'uneexpressionSQLquine
seravaluequ'l'excution.
II.Constatdebogue(bug)
Nousavonsuneprocdurederecherchemulticritres(cf.montutoriel)quihlasne
fonctionnepas.

http://cafeine.developpez.com/access/tutoriel/debugprint/

1/10

13/2/2016

TutorielAccesscafeineDbogage:requtescritesparVBA

Etlorsquenousmodifionsuncritrederechercheriennesepasse,ledbogage
seraitidentiquesinousavionsunmessaged'erreur.

Quefaire?
III.UtilisationduDebug.Print
Nousinsronsdanslecode,aprsladerniremisejourdelachaneSQL,laligne
suivante:

Slectionnez
Debug.PrintSQL

Nousl'insronscetendroit:

Cequisignifiequenousdemandonsl'objetDebugd'afficherlavaleurdenotre
variableSQL.
CetaffichageseferadanslafentreExcutiond'Access,ellemmesituedansla
fentreVBA.

http://cafeine.developpez.com/access/tutoriel/debugprint/

2/10

13/2/2016

TutorielAccesscafeineDbogage:requtescritesparVBA

Pourlesversions97etinfrieures,lafentredbogageestunefentre
indpendante,pourlesversions2000etultrieures,elleapparatdansVBA.
Danstouslescas:Ctrl+Gpermetdelamettreaupremierplan.
SivoustesfamilieravecleSQLouquel'erreurestcriante,leDebug.Printpeut
suffiretrouverl'erreur.
Cependantdanscertainscas,lalectureduSQLnepermetundbogageimmdiat,
nousallonsdoncpasserparunerequte.
L'utilisationdeDebug.Printfaitpartiedel'ventaildesoutilsdedbogage,la
partiesuivantevatenterd'enbrosserlesprincipaux.
IV.Gnralisationl'utilisationdesoutilsdedbogage
Cettepartieviseprsenterdemaniresynthtiquel'ventaildesoutilsd'aideau
dbogage.

IVA.Dfinitiondepointd'arrt
Lespointsd'arrtssontutilesdanslecasd'uneprocdureauboguemuet.
C'estdire,untraitementquineproduitaucuneerreurvisible,maisquinedonne
paslersultatescompt.
Pourinsrerunpointd'arrt,vouspouvezauchoix:
.cliquerdanslamargegrise
.appuyersurF9
.lefairedanslemenuDbogage

Visuellement,laligneestsurligneenrouge,avecunpointrougedanslamarge
grise.
Celasignifiequelorsdel'excutionlecodevas'arrtersurcetteligne,soitavant
l'excutiondecelleci.
Lalignevatresurligneenjaune,commesurl'imagesuivante:

http://cafeine.developpez.com/access/tutoriel/debugprint/

3/10

13/2/2016

TutorielAccesscafeineDbogage:requtescritesparVBA

Accessvousrendlamainpoureffectuervotredbogage,etcedeplusieurs
maniresdiffrentes.
Vouspouvezsurvoleraveclasouris,lenomdesvariables,dansnotrecas,lasouris
survolelaVariableSQL.

Maisvouspouveztoutaussibienvaluerdesexpressionsdanslafentreexcution
:aveclafontionPrintsuiviedunomdelavariable.

Vouspouvezgalementcorrigerchaud(pendantl'excution)lecodequisuitvotre
pointd'arrt.
Pourrelancerletraitementaprsvosmodifications,ilvoussuffitdecliquersurle
bouton"continuer"enformedelecture,oud'appuyersurlatoucheF5:

IVB.Lemodepaspas
Cemodeestaccessibledepuisunpointd'arrt,ouunboguerencontrsurlequel
vousavezcliqusurDbogage.

LemodeestaccessibleparlemenuouparlatoucheF8.
Cemodeestutilequandvousn'avezpasidentifilalignedecodequipose
problme.
Vousallezpouvoirparcourirchaquelignedevotrecodepourl'valuer.
Danslesfaits,Accessvanousrendrelamainsurchaqueligneenlasurlignanten
jaune.
Cequinouslaisselapossiblitdemodifierlecodedelalignesurligneoulecode
deslignessuivantes.
Pourpasserlalignesuivante,ilsuffitd'appuyersurF8.

IVC.Lesespions
Souscetitre"aventureux"secacheunefonctionnalitdedbogagequipermet
d'afficherdirectementlavaleurd'uneexpression.

http://cafeine.developpez.com/access/tutoriel/debugprint/

4/10

13/2/2016

TutorielAccesscafeineDbogage:requtescritesparVBA
Cetaffichagealieudansunefentreddie(lesaffichagesvarientselonque
l'applicationsoitsous97ousous2000etultrieures).
Caspratique:
.nousdfinissonsunespionsurl'expressionSQL
.nousdfinissonsunpointd'arrtsurlapremirelignedecode
.nousallonsfairedupaspaspourregardercommentnotreespionvolue.
Pourdfinirunespion:
1nousslectionnonsuneexpression:
.soitunnomdevariable
.soituneportiondecode:galitquirenverraunTrueouFalse,ouunefonction
2Clicdroit:Ajouterunespion

puis

unelignedanslevolet"Espions"apparat.

Al'excution,examinonslesvaleursqueprendnotreespiondurantlemodepas
pas.
surlapremireligne(notrepointd'arrt):

http://cafeine.developpez.com/access/tutoriel/debugprint/

5/10

13/2/2016

TutorielAccesscafeineDbogage:requtescritesparVBA
Puisdanslemodepaspas:

Nouspouvonsainsisuivrel'volutionenlecturedirectedel'valuationd'une
expression.
NB:Lesvaleursprisesparlesespionsnepeuventexcder255caractres.
V.Dbogageparunerequtedetest
Revenonsmaintenantnotrecasprincipal,c'estdireledbogaged'unerequte
criteparlecodeVBA.

VA.Parcopiercoller
C'estunemthode"manuelle".
NousallonschercherleSQLquiataffichdanslafentreExcution,nousle
copionsetnousallonslecollerdansunerequtevierge.
Nouscronsunenouvellerequte.

enmodecration
Pourquelarequtesoitvierge,nousn'ajoutonsaucunetable.

cliquonssurFermerpourn'ajouteraucunetable
Enregistronsnotrerequte:qryTest

http://cafeine.developpez.com/access/tutoriel/debugprint/

6/10

13/2/2016

TutorielAccesscafeineDbogage:requtescritesparVBA

NouspassonsenmodeSQL.

Etnousn'avonsplusqu'collerleSQL.
Nousreviendronssurl'analyseplustard.

VB.Parlecode
Nousinsronsleslignessuivantes:

Lapremirelignepermetd'attribuerdynamiquementunerequtenotrechane
SQL.
Lasecondeligneouvreenmodemodificationlarequtedetest.
Cequifaitqu'l'excutiondelasub,larequtedetestvas'ouvrirenmode
crationenaffichageQBE.

Cemoded'affichageestundesplusvisuels,surtoutlorsquenousnesommespas
expertsenSQL.

http://cafeine.developpez.com/access/tutoriel/debugprint/

7/10

13/2/2016

TutorielAccesscafeineDbogage:requtescritesparVBA

VC.Rsolutiondubogue
Danscecasprcis,nousidentifionsl'erreur:lecritre="*Visual*"n'estpasvalide,
ilfaututiliserComme(OprateurLikeenSQL).
Aprscorrection,nousrepassonsenmoded'affichageSQL:

IlnoussuffiradenousinspirerduSQLvalidepourcorrigernotreprocdureVBA.
VI.FrequentlyAbominableQueries(FAQ)

VIA.ConfusionChaineSQLetVariable

Slectionnez
IfNotMe.chkFamilleThen
SQL=SQL&"AndMedias!Famille='Me.cmbRechFamille'"
EndIf

LeDebug.PrintvousmontreraquevotrerequtevarechercherlesFamillesdontla
valeurestlachane"Me.cmbRechFamille".
VousdevezsortirMe.cmbRechFamilledelachanepourqu'Accessvaluelavaleur,
etc'estcettevaleurquiseradansvotrechaneSQL.

Slectionnez
IfNotMe.chkFamilleThen
SQL=SQL&"AndMedias!Famille='"&Me.cmbRechFamille&"'"
EndIf

VIB.Variablevide
Cettefoisvotrecodeestirrprochable,maisleDebug.Printrvlececi:

Slectionnez
....WHEREMedias!Famille=''....

VotrevariableestNull,lescausespossiblespeuventtre:
.Contrlesitusurunformulairenonaccessible/nonouvert/dontlechemin
d'accsesterronn
.Erreurdelibellsurlenom
.Erreurdetypagedelavariable
Assurezvousquelavariableprendbienunevaleur,sivotreapplicationcomportela
possibilitd'unNull,prvoyezlegrcelafonctionNz().

VIC.Typededonnes
Votrecodesembleexact,maishlasiln'estpasappropriaveclesnormesde
l'implmentationSQLd'Access.
Pourrappel:

http://cafeine.developpez.com/access/tutoriel/debugprint/

8/10

13/2/2016

TutorielAccesscafeineDbogage:requtescritesparVBA
Slectionnez
'Gestiond'uneDate:formatUSentre##
WHERE[Table]![MonChampDate]=#mm/dd/yyyy#
'Gestiond'unchane:entrequotes''
WHERE[Table]![MonChampChaine]='Quelquechose'
'Gestiond'unnumrique:nerienmettre
WHERE[Table]![MonChampNumerique]=2005

VID.Espacesmanquantsousuperflus
LeDebug.Printvavouspermettred'identifierl'oeilnucegenred'erreur.

Slectionnez
SQL=SQL&"WHERE[MaTable]![MonChamp]='"&maVariable&"'"
SQL=SQL&"AND[MaTable]![MonChamp]='"&maVariable&"'"

cecoded'apparencecorrectevadonnerunSQLdecetype

Slectionnez
WHERE[MaTable]![Monchamp]='Toto'AND...

Leremde:

Slectionnez
SQL=SQL&"WHERE[MaTable]![MonChamp]='"&maVariable&"'"
SQL=SQL&"AND[MaTable]![MonChamp]='"&maVariable&"'"

Ensuitelecasd'unespacesuperflul'intrieurd'uncritre,suiteunefaute
d'inattention:

Slectionnez
SQL=SQL&"WHERE[MaTable]![MonChamp]='"&maVariable&"'"
SQL=SQL&"AND[MaTable]![MonChamp]='"&maVariable&"'"

vadonner:

Slectionnez
WHERE[MaTable]![Monchamp]='Toto'AND...

VIE.PrsencedeSimpleQuote(')ouDouble
Quote(")danslavariable
Nousavonsvuquel'implmentationSQLd'Accessrequiertlamiseentrequotes''
d'unechaneencritre.
Cecodageestcependantmisenchecquandlavaleurdelavariablecontientun
quote.
Exemple:

Slectionnez
SQL=SQL&"WHERE[MaTable]![MonChamp]='"&maVariable&"'"

SimaVariablevaut:"l'cureuil"

Slectionnez
WHERE[MaTable]![Monchamp]='L'cureuil'AND...

Cequivousvautunebelleerreur.
LeremdeestdedoublerceQuote.
Pourlesversions2000etultrieures,ilsuffitd'utiliserlafonctionReplace().

Slectionnez
SQL=SQL&"WHERE[MaTable]![MonChamp]='"&Replace(maVariable,"'","''")&"'"

Pourlesversions97etantrieures,ilfautfairedemmeenutilisantunefonction
Replace()desubstitution(disponibledanslaFAQ)

http://cafeine.developpez.com/access/tutoriel/debugprint/

9/10

13/2/2016

TutorielAccesscafeineDbogage:requtescritesparVBA
Vousrencontrerezlemmetypedeproblmesivousdlimitezvoschanes
pardesdoublequotes(")etsilavariablecontientundoublequote.
Lasolutionestlaussidedoublercecaractre,toujoursaveclafonction
Replace()

VIF.Autres
CettelistedesFAQn'estpasexhaustive,n'hsitezpasmecontacterpourque
j'ajouted'autrestypesd'erreursfrquentes.
VII.Conclusion
Cetarticlevousa,jel'espre,donnquelquespistespourmieuxcrirevos
requtesviaVBAetdanslecasolesproblmessubsistentlesdboguer.
J'adresseungrandmercitoutel'quipederdactiond'Accesspourleurs
relecturesetleurspertinentessuggestionsd'amliorations.
UnremerciementtoutparticulierpourArgyronetquiasuperbementmagnifiles
copiesd'cran.

Lessourcesprsentessurcettepagesontlibresdedroitsetvouspouvezlesutiliser
votreconvenance.Parcontre,lapagedeprsentationconstitueuneuvreintellectuelle
protgeparlesdroitsd'auteur.Copyright2005CharlesA..Aucunereproduction,mme
partielle,nepeuttrefaitedecesiteetdel'ensembledesoncontenu:textes,documents,
images,etc.sansl'autorisationexpressedel'auteur.Sinonvousencourezselonlaloi
jusqu'troisansdeprisonetjusqu'300000dedommagesetintrts.

ResponsablesbnvolesdelarubriqueAccess:PierreFauconnierArkham46Contacterparemail
Nouscontacter

Participez

Hbergement

Informationslgales

Copyright20002016www.developpez.com

http://cafeine.developpez.com/access/tutoriel/debugprint/

10/10

Vous aimerez peut-être aussi