Académique Documents
Professionnel Documents
Culture Documents
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