VFP ·R¥ÎªÌªÀ°Ï ­º­¶ VFP ·R¥ÎªÌªÀ°Ï
¥»°Q½×°Ï¬° Visual Foxpro ·R¥ÎªÌ¸gÅç¥æ¬yªº¦a¤è, ½Ð¦h¦h§Q¥Î"·j´M"ªº¥\¯à, ¥ý¬d¬Ý¬Ý¦³µL«e¨Ò¥i´`, ¦pªGÁÙ¦³¤£À´ªº¦Aµo°Ý. ³¡¥÷¥DÃD¦³ªþ¥[ÀÉ®×, ¶·¥ýµù¥U¦¨¬°ªÀ°Ï©~¥Á¤~¥i¥H¤U¸ü.
 
 ±`¨£°ÝÃD±`¨£°ÝÃD   ·j´M·j´M   ·|­û¦Cªí·|­û¦Cªí   ·|­û¸s²Õ·|­û¸s²Õ   ·|­ûµù¥U·|­ûµù¥U 
 ­Ó¤H¸ê®Æ­Ó¤H¸ê®Æ   µn¤JÀˬd±zªº¨p¤H°T®§µn¤JÀˬd±zªº¨p¤H°T®§   µn¤Jµn¤J

vfp8¿ù»~³B²z(Âà¶K)

 
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD  
µoªí¤H ¤º®e
Ruey



µù¥U®É¶¡: 2003-03-12
¤å³¹: 1698
¨Ó¦Û: tunglo

²Ä 1 ¼Ó

µoªíµoªí©ó: ¬P´Á¤­ ¤C¤ë 25, 2003 8:03 pm    ¤å³¹¥DÃD: vfp8¿ù»~³B²z(Âà¶K) ¤Þ¨¥¦^ÂÐ

¦³¥»¨Æ´N¨Ó§ì§Ú§a¡I
§@ªÌ¡GDoug Hennig
ĶªÌ¡Gfbilo
VFP 8 ¦³¤Fµ²ºc¤Æ¿ù»~³B²z¡A¥¦ªº¯S¼x¬O·sªºTRY...CATCH...FINALLY...ENDTRY µ²
ºc¡C³o­Ó±j¤jªº·s¥\¯à¦V§Ú­Ì´£¨Ñ¤F¿ù»~³B²zªº²Ä¤T­Ó¼h¦¸¡A¨ÃÅý§A¥i¥H¬Ù¤U¤j¶qªº¶Ç»¼©M
³B²z¿ù»~¸ê°Tªº¥N½X¡C³o­Ó¤ë¡ADoug Hennig °Q½×¤Fµ²ºc¤Æ¿ù»~³B²z¡A¨Ãºt¥Ü¤F«ç¼Ë±N¥¦¶°
¦¨¨ì¤@­Ó§¹¾ãªº¿ù»~³B²zµ¦²¤¤¤¥h¡C
¥¿¤å¡G
VFP 3 ³q¹Lµ¹ª«¥ó¼W¥[¤F¤@­ÓError ¤èªk·¥¤jªº¼W±j¤F¿ù»~³B²z¯à¤O¡C¥¦Åýª«¥ó¥i¥H
«Ê¸Ë¥¦­Ì¦Û¤vªº¿ù»~³B²z¡A¨Ã¥B¤£»Ý­n¨Ì¿à©ó¥þ§½ªº¿ù»~³B²z¾¹¡C¤£¹L¡A§â¥N½X©ñ¦b¹ï¶Hªº
Error ¤èªk¤¤ªº¤@­Ó¯ÊÂI¬O¡G¥¦±Æ¥¸¤FON Error ©R¥Oªº¨Ï¥Î¡C³o»ò°µ¬O¦³¹D²zªº¡A¦]¬°¤£
µMªº¸Ü´N·|¯}Ãa¿ù»~³B²zªº«Ê¸Ë¡C¦ý¬O¡A³o´N¾É­P¤F¤@­Ó°ÝÃD¡A¦pªG¤@­Óª«¥óªºError ¤è
ªk¥N½X¤¤½Õ¥Î¤F¹Lµ{¥N½X¡]¨Ò¦p¤@­ÓPRG ÀÉ¡^©ÎªÌ¥t¤@­ÓError ¤èªk¤¤¨S¦³¥N½Xªº¹ï
¶Hªº¬Y­Ó¤èªk¡A·í³Q½Õ¥Î¥N½X¤¤¥X²{¤@­Ó¿ù»~®É¡AIJµoªº¬O½Õ¥Îª«¥óªº¥N½X..§Y¨Ï³Q½Õ¥Î
¥N½X¤¤¦Û¤v¦³¤@­Ó¥»¦aªºON Error ¿ù»~³B²z¾¹¤]¬O³o¼Ë¡C³oºØ¾÷¨î¦s¦bµÛ¨â­Ó°ÝÃD¡G
ƒÜƒn³\¦h¿ù»~¥i¥H¹w¥ý´N³Q¦ô­p¨ì¡A¨Ò¦p¸Õ¹Ï¥´¶}¤@­Óªí¡A¦Ó³o­Óªí¤w¸g³Q§O¤H¿W¦û¨Ï¥Î¤F¡CµM¦Ó¡A
¥Ñ©ó³Q½Õ¥Îµ{¦¡ªºON Error ¿ù»~³B²z¾¹¤£·|³QIJµo¡A¨º»ò³o­Óµ{¦¡´N¨S¦³¾÷·|¥h³B²z¥¦¦Û¤vªº
¿ù»~¡C
ƒÜƒn¥Ñ©ó½Õ¥Îª«¥ó¤£¥i¯à¹wª¾¨ì³Q½Õ¥Îª«¥ó·|µo¥Í¤°»ò¿ù»~¡A°£¤F¨º¨Ç¤@¯ë©Êªº³B²z¤èªk¡]°O¿ý¤U
¿ù»~¸ê°T¡A¦V¥Î¤áÅã¥Ü¤@­Ó¿ù»~¸ê°T¹ï¸Ü¤è¶ô¡BµM«á°h¥Xµ¥µ¥¡^¥H¥~¡A½Õ¥Îª«¥ó¹ï³Q½Õ¥Îª«¥ó¤¤
µo¥Íªº³B²z²ª½¥i¥H»¡¬O§ô¤âµLµ¦¡C
«ÜÅãµM¡A§Ú­Ì»Ý­n¤@­Ó§ó¦nªº¾÷¨î¡C©¯¹Bªº¬O¡AVFP 8 µ¹¤F§Ú­Ì¤@­Ó§ó¦nªº¤u¨ã¡Gµ²ºc
¤Æ¿ù»~³B²z¡C
µ²ºc¤Æ¿ù»~³B²z
C++ ¤w¸g¦³µ²ºc¤Æ¿ù»~³B²z«Üªø®É¶¡¤F¡C.NET §âµ²ºc¤Æ¿ù»~³B²z´£¨Ñµ¹¤F¨º¨Ç¥H«e¯Ê
¤Ö¥¦ªº»y¨¥¡A¨Ò¦pVB.NET¡C¨º»ò¨ì©³¤°»ò¬Oµ²ºc¤Æ¿ù»~³B²z©O¡Hµ²ºc¤Æ¿ù»~³B²z·N¨ýµÛ
³Q°õ¦æªº¥N½X¬O¦b¤@­Ó¯S®íªº¶ô¡B©ÎªÌµ²ºc¤¤ªº¡A·í³o¬q¥N½X¤¤µo¥Í¥ô¦ó¿ù»~ªº®É­Ô¡A³o­Ó
µ²ºc¤¤ªº¥t¤@¶ô¥N½X·|³B²z¥¦¡C
VFP 8 ³q¹L¤U­±ªº³~®|¹ê²{¤Fµ²ºc¤Æ¿ù»~³B²z¡G
ƒÜƒnTRY...ENDTRY µ²ºcÅý§A¥i¥H¹B¦æ¥i¯à·|µo¥Í¿ù»~ªº¥N½X¡A¨Ã¦b³o­Óµ²ºc¤¤³B²z¿ù»~¡C³o­Óµ²ºc
·|¾B¸n©Ò¦³¨ä¥Lªº¿ù»~³B²z¾¹¡C
ƒÜƒn¤@­Ó·sªºTHROW ©R¥OÅý§A¥i¥H±N¿ù»~¶Ç»¼µ¹¤@­Ó§ó°ª¼h¦¸ªº¿ù»~³B²z¾¹¡C
ƒÜƒn¤@­Ó·sªºException °ò¦Ãþ´£¨Ñ¤F¤@ºØ­±¹ïª«¥óªº¶Ç»¼¿ù»~¸ê°Tªº³~®|¡C
TRY, TRY again
µ²ºc¤Æ¿ù»~³B²zªºÃöÁä¡A¬O·sªºTRY...ENDTRY µ²ºc¡C³oùجO¥¦ªº»yªk¡G
try
[ TryCommands ]
[ Catch [ to VarName ] [when lExpression ]
[ CatchCommands ] ]
[ exit ]
[ throw [uExpression ] ]
[ Catch [ to VarName ] [when lExpression ]
[ CatchCommands ] ]
[ exit ]
[ throw [uExpression ] ]
[ ...(¨ä¥Lªºcatch ¥N½X¶ô) ]
[ finally
[ FinallyCommands ] ]
endtry
TryCommands ªí¥ÜVFP ±N¸ÕµÛ¥h¹B¦æªº©R¥O¡C¦pªG¨S¦³¿ù»~µo¥Í¡A±µ¤U¨Ó¦b¥i¿ïªº
FINALLY ¥N½X¶ô¤¤¥N½X±N·|³Q°õ¦æ¡]¦pªG¦³FINALLY ¥N½X¶ôªº¸Ü¡^¡A³Ì«á°õ¦æ¦bEndtry
¤§«áªº¥N½X¡C¦pªG¦bTry ¶ô¤¤µo¥Í¤F¥ô¦ó¿ù»~¡AVFP ·|¥ß§Y°h¥X³o¶ô¥N½X¨Ã¶}©l°õ¦æ¨º¨Ç
Catch »y¥y¡C
¦pªG¤@­ÓCatch »y¥y¤¤¦³VarName¡AVFP ·|«Ø¥ß¤@­ÓException ª«¥ó¡A¥Î¿ù»~ªº¸ê°T
¶ñ¥R³o­Óª«¥óªºÄÝ©Ê¡AµM«á§â¹ï³o­Óª«¥óªº¤@­Ó¤Þ¥Î©ñ¨ìVarName ÅܼƤ¤¥h¡CVarName ¥u
¥i¥H¬O¤@­Ó¥¿±`ªºÅܼơA¤£¯à¬°¤@­Óª«¥óªºÄÝ©Ê¡C¦pªG§A«e­±Án©ú¹L³o­ÓÅܼơA¨º»ò³o­ÓÅÜ
¶qªº¦³®Ä½d³ò´N¬O§AÁn©úªº¨ººØ¡]¤ñ¦pLOCAL¡^¡F¦pªG§A¨S¦³Án©ú¡A¨º»ò³o­ÓÅܼƪº¦³®Ä
½d³ò´N¬OPRIVATE¡Cµy­Ô§Ú­Ì±N±´°Q¤@¤UException °ò¦Ãþ¡C
¦pªG¥Î¤W¤F¥i¿ïªºWHEN ¤l¥y¡A¨º»òCATCH »y¥y´N¹³¬OCASE »y¥y¤@¼Ë¡C¦b
WHEN ¤l¥y¤¤ªº¹Bºâ¦¡ªð¦^ªº¥²¶·¬O¤@­ÓÅÞ¿è­È¡A¥H«KVFP ¯à¨M©w¸Ó«ç»ò¿ì¡C¦pªG³o­Ó
¹Bºâ¦¡ªºµ²ªG¬O.T.¡A¨º»ò¸ÓCATCH »y¥y¶ô´N·|³Q°õ¦æ¡C¦pªG¬°.T.¡A«hVFP ·|Âà¨ì¤U
¤@­ÓCATCH »y¥y¡C³o¼Ë¤@ª½Ä~Äò¤U¥hª½¨ì¸I¨ì¬Y­ÓWHEN ¹Bºâ¦¡ªð¦^.T. ªºCATCH
»y¥y¡B¤@­Ó¨S¦³WHEN ¤l¥yªºCATCH »y¥y¡B©ÎªÌ¨S¦³§OªºCATCH »y¥y¤F¡]µy­Ô§Ú
·|½Í½Í³Ì«á³oºØ±¡ªp¡^¡C³q±`±¡ªp¤U¡AWHEN ¹Bºâ¦¡·|¬d¬Ý¤@¤UException ª«¥óªº¤@¨ÇÄÝ
©Ê¡]¨Ò¦pErrorNo¡A¥¦ªí¥Ü¿ù»~¸¹¡^¡C
¤@¥¹VFP §ä¨ì¤@­Ó¥i¥ÎªºCATCH »y¥y¡A¦b³o¤@¶ô¤¤ªº¥N½X´N·|³Q¹B¦æ¡A³o¶ô¥N½X
¹B¦æ§¹²¦¤§«á¡A±µµÛ³Q¹B¦æªº¡A¬O¦b¥i¿ïªºFINALLY ¶ô¡]¦pªG¦³³o­Ó¶ôªº¸Ü¡^¤¤ªº¥N½X¡C
³Ì«á«hÄ~Äò¹B¦æ¦bENDTRY ¤§«áªº¥N½X¡C
¤UÄѪº¥Ü¨Ò¨Ó¦Ûªþ±aªºSimpleTry.prg ÀÉ¡A¥¦ºt¥Ü¤FCATCH »y¥y¬O«ç»ò³Q¹Bºâªº¡B
¥H¤ÎTRY µ²ºc¬O«ç»òÂл\ON ERROR ³]¸mªº¡G
on error llError = .T.
llError = .F.
try
wait window xxx
catch to loException when loException.ErrorNo = 1
wait window 'Error #1'
catch to loException when loException.ErrorNo = 2
wait window 'Error #2'
catch to loException
lnError = loException.ErrorNo
messagebox('Error #' + transform(lnError) + chr(13) + ;
'Message: ' + loException.Message)
finally
messagebox('Finally')
endtry
on error
messagebox('ON ERROR ' + iif(llError, 'caught ', ;
'did not catch ') + 'the error')
¦pªGVFP ¨S¦³§ä¨ì¤@­Ó¥i¥ÎªºCATCH »y¥y¡A´N·|¼u¥X¤@­Ó¡§¥¼³B²zªº¨Ò¥~¿ù»~¡¨¡]¿ù
»~¸¹2059¡^¡C¦³³\¦h­ì¦]§A·|¤£·QÅý³oºØ±¡ªpµo¥Í¡A¨ä¤¤³Ì¤jªº°ÝÃD¬O¡G³o¼Ë¤@¨Ó¡A­ì¨Óªº
¿ù»~´N¤£¥i¯à¸Ñ¨M¤F¡A¦]¬°§Ú­Ì¤âÀY´N¥u¦³¨º­Ó¡§¥¼³B²zªº¨Ò¥~¿ù»~¡¨ªº¿ù»~¸ê°T¤F¡C
¤U­±ªº¨Ò¤lºt¥Ü¤F·í¦³¤@­Ó¥¼³B²zªº²§±`®É±N·|µo¥Íªº¨Æ±¡¡] ¨ú¦Û
UnhandledException.prg¡^¡C·í§A¹B¦æ³o¬q¥N½Xªº®É­Ô¡A§A±N·|¬Ý¨ì¼u¥X¤@­Ó¿ù»~¸ê°T§i¶D§A¡A
³o¬O¤@­Ó¥¼³B²zªº²§±`¡A¦Ó¤£¬O¤Þ°_³o­Ó¿ù»~ªº­ì¦]¡GÅܼÆXXX ¤£¦s¦b¡C
on error do ErrHandler with error(), program(), lineno()
try
wait window xxx
catch to loException when loException.ErrorNo = 1
wait window 'Error #1'
catch to loException when loException.ErrorNo = 2
wait window 'Error #2'
finally
messagebox('Finally')
endtry
on error
procedure ErrHandler(tnError, tcMethod, tnLine)
local laError[1]
aerror(laError)
messagebox('Error #' + transform(tnError) + ;
' occurred in line ' + transform(tnLine) + ' of ' + ;
tcMethod + chr(13) + 'Message: ' + message() + ;
chr(13) + 'Code: ' + message(1))
«á°hµLªù
µ²ºc¤Æ¿ù»~³B²z©M¨ä¥LVFP ¿ù»~³B²z¤è¦¡ªº¤@­Ó­«­nªº°Ï§O¬O¡G§A¤£¯àªð¦^¨ì¥N½X¥X
¿ùªº¦a¤è¡C¦bError ¤èªk©ÎªÌON ERROR ±`¦¡¤¤¦³´XºØ¥i¥HÄ~Äòªº¿ìªk¡G
ƒÜƒnReturn¡]©ÎªÌ¤@­Ó¨S¦³Return »y¥yªºÁô¦¡Return¡^ªð¦^¨ì¥X¿ù¥N½Xªº¤U¤@¦æ¡C¦ý¬O¡A¥Ñ©ó¾É­P
¥X¿ùªº¨º¤@¦æ¥N½X¨S¦³§¹¦¨¦Û¤vªº¤u§@¡]¨Ò¦pªì©l¤Æ¤@­ÓÅܼƩΪ̥´¶}¤@­Óªíµ¥µ¥¡^¡A¨º»ò³o»ò
°µ³q±`·|¾É­Pµo¥Í¨ä¥Lªº¿ù»~¡C
ƒÜƒnRetry ªð¦^¨ì¥X¿ùªº¨º¤@¦æ¥N½X¡C°£«D¿ù»~©_¸ñ¯ëªº¦Û¤v®ø¥¢¤F¡A§_«hªÖ©w·|¦Aµo¥Í¦P¼Ëªº¿ù»~¡C
ƒÜƒnQUIT ª½±µ°h¥XÀ³¥Îµ{¦¡¡C
ƒÜƒnReturn To ªð¦^¨ì½Õ¥Î°ïÅ|¤Wªº¤@­Ó±`¦¡¡A¨Ò¦p¤@­Ó¥]§tµÛRead Events »y¥yªºµ{¦¡¡C¦pªG§A¤£
·Q°h¥XÀ³¥Îµ{¦¡¡A¦Ó¤S¤£Ä@·Nªð¦^¨ì¥X¿ùªº¨º­Ó±`¦¡ªº®É­Ô¡A³o­Ó©R¥O¬O«D±`¦³¥Îªº¡C·íµM¡A
³o¨Ã¤£·N¨ýµÛ¤@¤ÁOK ¤F¡A¦ý·íµo¥Íªº¨Ã«D¬O¤°»ò¨aÃø©Êªº¿ù»~ªº®É­Ô¡]¨Ò¦p·í¶i¤Jªí³æªº®É
­Ôµo¥Í¤F¤@­Ó²³æªº¸ê·½¦û¥Î°ÝÃD¡^¡A¥¦³q±`Åý¥Î¤á¥i¥H°µ¨Ç¤°»ò¡C
¦b¤@­ÓTRY µ²ºcªº±¡ªp¤U¡A¤@¥¹µo¥Í¤F¤@­Ó¿ù»~¡A¨º»òTRY ¶ôùعB¦æªº¥N½X´N¥ß§Y
³Qµ²§ô¡A¨Ã¥B§A¦A¤]¤£¯àªð¦^¨ì¨ºùØ­±¥h¡C¦pªG§A¦bCATCH ¶ô¤¤¡]¨Æ¹ê¤W¡A¦b³oºØµ²ºc
ªº¥ô¦ó¦a¤è³£¤£¯à¥Î¡^¨Ï¥Î¤FReturn ©ÎªÌRetry¡A´N·|µo¥Í2060 ¸¹¿ù»~¡C·íµM¡A§AÁÙ¬O¥i
¥H¥ÎQUIT ¨Ó°h¥XÀ³¥Îµ{¦¡ªº¡C
¥ÎFINALLY ¨ÓÀ¿§¾ªÑ
·d²M·¡FINALLY ¤l¥y¬°¤°»ò·|­«­nµÛ¹êªá¤F§Ú¤@ÂI®É¶¡¡C²¦³º¡A¤£½×¬O§_µo¥Í¤F¿ù
»~¡A¦bENDTRY »y¥y«á­±ªº¥N½X³£·|³Q¹B¦æ¡C¤£¹L§Ú«á¨Óµo²{¨Æ±¡¨Ã«D¦p¦¹..¤@·|¨à§Ú
°Q½×THROW ©R¥Oªº®É­Ô§A´N·|ª¾¹D¤F¡A¿ù»~¥i¥H³Q¡§«_ªw¡¨µ¹¤U¤@­Ó§ó°ª¯Å§Oªº¿ù»~³B
²z¾¹¡A¦Ó¥B«Ü¦³¥i¯à´N¤£¦A±q³o­Ó°ª¯Å§Oªº¿ù»~³B²z¾¹¤¤ªð¦^¤F¡C³o¼Ëªº¸Ü¡A§Ú­Ì´N¤£¯à«O
ÃÒ¦bENDTRY «á­±ªº¥N½X¤@©w·|³Q¹B¦æ¡C§Ú­Ì¯à«OÃÒªº¬O¡G¦bFINALLY ¶ô¤¤ªº¥N½XªÖ
©w·|³Q¹B¦æ¡]¤£¹L¨Æ±¡Á`¬O¨S¦³µ´¹ïªº..¦pªG¤@­ÓCOM ª«¥óªº¿ù»~³B²z¾¹½Õ¥Î¤F
COMReturnError()¨ç¼Æ¡A´N·|¥ß§Yªð¦^¨ìCOM ¥Î¤áºÝ¡^¡C
³oùجO¤@­Óºt¥Ü³oºØ±¡ªpªº¨Ò¤l¡]UsingFinally.prg¡^¡C¹ïProcessData ¨ç¼Æªº½Õ¥Î³Q«Ê
¸Ë¦b¤@­ÓTRY µ²ºc¤¤¡CProcessData ¦Û¤v¤]¦³¤@­ÓTRY µ²ºc¡A¤£¹L¥¦¥u³B²z¤£¯à¿W¦ûªº¥´
¶}ªí¿ù»~¡C©Ò¥H¡AWAIT WINDOW XXX ¿ù»~´N¤£·|³Q®·®»¨ì¡Cµ²ªG¡A¿ù»~±N·|³Q«_ªwµ¹¦b
¥Dµ{§Ç¤¤ªº¥~¼hªºTRY µ²ºc¡C³o¼Ëªº¸Ü¡A¸ò¦bProcessData ªºEndTry »y¥y«á­±ªº¥N½X´N
¤£·|³Q¹B¦æ¡C¦pªG§âProcessData ¤¤FINALLY ¶ôùتº¥N½Xµ¹ª`ÄÀ±¼¡A·íµ{¦¡µ²§ô®É§A·|
¬Ý¨ìCustomers ªíÁÙ¥´¶}¦b¨ºùØ¡C¤£ª`ÄÀ±¼³o¬q¥N½X¦A¹B¦æªº¸Ü..§A±N¬Ý¨ì³o¤@¦¸
Customers ªí³QÃö³¬¤F¡A³o¼Ë¥N½X´N§â¦Û¤vªº§¾ªÑÀ¿°®²b¤F¡C
try
do ProcessData
catch to loException
lnError = loException.ErrorNo
messagebox('Error #' + transform(lnError) + ;
' occurred.')
endtry
if used('customer')
messagebox('Customer table is still open')
else
messagebox('Customer table was closed')
endif used('customer')
close databases all
function ProcessData
try
use (_samples + 'data\customer') exclusive
* °µ¤@¨Ç³B²z
wait window xxx
* ³B²z¾¹¤£¯à¿W¦ûªº¥´¶}ªí
catch to loException when loException.ErrorNo = 1705
* ¤£ºÞ¥Î¤°»ò²M²z¥N½X
* §â³o³¡¤À¥ýª`ÄÀ±¼¡B¦A¨ú®øª`ÄÀ¡A¹B¦æ¤U¬Ý¬Ý¦³¤°»ò°Ï§O
finally
if used('customer')
messagebox('Closing customer table in FINALLY...')
use
endif used('customer')
endtry
* ²{¦b¦A²M²z¬O¨S¥Îªº¡A¥N½X¤£·|³Q¹B¦æ¡A¦]¬°¿ù»~¤w¸g³Q«_ªw¥X¥h¤F¡C
if used('customer')
messagebox('Closing customer table after ENDTRY...')
use
endif used('customer')
Exception ¹ï¶H
Visual FoxPro 8.0 ¥]§t¦³¤@­Ó·sªºException °ò¦Ãþ¡A¥H¬°¶Ç»¼¿ù»~¸ê°T´£¨Ñ¤@­Ó­±¹ï
ª«¥óªº¸Ñ¨M¤è®×¡C¦p§A«e­±©Ò¨£¡AException ª«¥ó¬O·í§A¦bCATCH ©R¥O¤¤¨Ï¥Î¤FTo
Varname ªº®É­Ô³Q«Ø¥ßªº¡CÁÙ¦³¤@ºØ±¡ªp´N¬O·í§A¨Ï¥ÎThrow ©R¥Oªº®É­Ô¤]·|«Ø¥ß
Exception ª«¥ó¡A³o­Óµy«á¦A»¡¡C
°£¤F±`¨£ªº¨º¨ÇÄÝ©Ê¡B¨Æ¥ó¡B¤èªk¡]Init¡BDestroy¡BBaseClass¡BAddProperty µ¥µ¥¡^¥H
¥~¡AException ÁÙ¦³¤@®MÃö©ó¤@­Ó¿ù»~ªº¸ê°TªºÄÝ©Ê..¦pªí1 ©Ò¥Ü¡C©Ò¦³³o¨ÇÄݩʳ£¬O¹B
¦æ®É¥iŪ¼gªº¡C
ÄÝ©ÊÃþ«¬¬Û¦ü¨ç¼Æ¥\¯à
Details ¦r¤¸«¬SYS(2018) Ãö©ó¿ù»~ªº¨ä¥L¸ê°T¡]¨Ò¦p¤£¦s¦bªºÅÜ
¶q©ÎªÌÀɪº¦WºÙµ¥µ¥¡^¡A­Y¨S¦³«h¬°
Null
ErrorNo ¼Æ­È«¬Error() ¿ù»~¸¹
LineContents ¦r¤¸«¬MESSAGE(1) ¾É­P¿ù»~µo¥Íªº¨º¦æ¥N½X
LineNo ¼Æ­È«¬LINENO() ¦æ¸¹
Message ¦r¤¸«¬MESSAGE(1) ¿ù»~®ø®§
Procedure ¦r¤¸«¬PROGRAM() µo¥Í¿ù»~ªº¹Lµ{©ÎªÌ¤èªk
StackLevel ¼Æ­È«¬ASTACKINFO() ¸Ó¹Lµ{ªº½Õ¥Î°ïÅ|¼h¼Æ
UserValue ÅÜÅ髬¨S¦³¬ÛÀ³ªº¨ç¼Æ¦b¤@­ÓThrow »y¥y¤¤«ü©wªº¹Bºâ¦¡
§â¥¦¥µµ¹§Ú
µ²ºc¤Æ¿ù»~³B²zªº³Ì«á¤@³¡¤À¬O·sªºThrow ©R¥O¡CThrow ´N¹³¬O­ì¦³ªºError ©R¥O.
.¥¦§â¿ù»~ªº±¡ªp¶Ç»¼µ¹¤@­Ó¿ù»~³B²z¾¹..¤£¹L¡A¥¦ªº¤u§@¤è¦¡¬O¬Û·í¤£¦Pªº¡C³oùجO³o
­Ó©R¥Oªº»yªk¡G
throw [uExpression]
&¢XuExpression&¡Ó¥i¥H¬O§A§Æ±æªº¥ô¦óªF¦è¡A¨Ò¦p¤@­Ómessage¡B¤@­Ó¼Æ¦r¡B©ÎªÌ¤@­Ó
Exception ¹ï¶H¡C
¦pªG«ü©w¤FuExpression¡ATHROW ·|«Ø¥ß¤@­ÓException ª«¥ó¡A¨Ã§â¥¦ªºErrorNo ÄÝ
©Ê³]¸m¬°2071¡B§âMessage Äݩʳ]¸m¬°¡§User Thrown Error¡¨¡B¥H¤Î§âUserValue Äݩʳ]
¸m¬°uExpression¡C¦pªG¨S¦³«ü©wuExpression¡A¨º»ò­Y·í«e¤w¦³¤@­ÓException ª«¥ó¡]´N¬O
·í¿ù»~µo¥Íªº®É­Ô³QCatch to ©R¥O«Ø¥ßªº¨º­Ó¡^¡A«h¸ÓException ª«¥ó³Q¨Ï¥Î¡F­Y·í«e¨S¦³¡A
«h·|·s«Ø¤@­ÓException ª«¥ó¡C¤£ºÞ¬O­þ¤@ºØ±¡ªp¡A±µ¤U¨Ó¥¦·|§âException ª«¥ó¶Ç»¼µ¹
§ó°ª¤@¼h¿ù»~³B²z¾¹¡]³q±`«üªº¬O¥]§tµÛ¡§½Õ¥ÎThrow »y¥yªº·í«eTRY µ²ºc¡¨ªº¤@­ÓTRY
µ²ºc¡^¡C³oùجOTestThrow.prg ¤¤ªº¤@­Ó¨Ò¤l¡G
TRY
TRY
WAIT WINDOW xxx
CATCH TO loException WHEN loException.ErrorNo = 1
WAIT WINDOW &¢XError #1&¡Ó
CATCH TO loException WHEN loException.ErrorNo = 2
WAIT WINDOW &¢XError #2&¡Ó
CATCH TO loException
Throw loException
ENDTRY
CATCH TO loException
lnError = loException.ErrorNo
lcMessage = loException.Message
MESSAGEBOX(¡¥Error #¡¦ + transform(lnError) + chr(13) + ;
¡¥Message: ¡¦ + lcMessage, 0, ¡¥Thrown Exception¡¦)
lnError = loException.UserValueErrorNo
lcMessage = loException.UserValueMessage
MESSAGEBOX(¡¥Error #¡¦ + transform(lnError) + chr(13) + ;
¡¥Message: ¡¦ + lcMessage, 0, ¡¥Original Exception¡¦)
ENDTRY
** ²{¦b¦A¨Ó¤@¹M¡A¤£¹LThrow »y¥y¤£±a¥ô¦ó¹Bºâ¦¡
TRY
TRY
WAIT WINDOW xxx
CATCH TO loException WHEN loException.ErrorNo = 1
WAIT WINDOW &¢XError #1&¡Ó
CATCH TO loException WHEN loException.ErrorNo = 2
WAIT WINDOW &¢XError #2&¡Ó
CATCH TO loException
Throw
ENDTRY
CATCH TO loException
lnError = loException.ErrorNo
lcMessage = loException.Message
MESSAGEBOX(¡¥Error #¡¦ + transform(lnError) + chr(13) + ;
¡¥Message: ¡¦ + lcMessage, 0, ¡¥Thrown Exception¡¦)
ENDTRY
¤]³\§A·|»{¬°¤W­±¥N½X¤¤ªºTHROW loException ©R¥O¬O§âloException ÂY¥Xµ¹¤W¤@¼hªº
¿ù»~³B²z¾¹¡A¨ä¹ê¨Ã«D¦p¦¹¡CTHROW ÂY¥Xªº¬O¤@­Ó·s«ØªºException ª«¥ó¡AloException «h
³Q©ñ¦b³o­Ó·sException ª«¥óªºUserValue ÄÝ©ÊùØ­±¡C¦]¦¹¡A¦b«e¤@­Ó¥~³¡TRY µ²ºc¤¤ªº¥N
½Xªí©ú¸ÓTRY µ²ºc±µ¦¬¨ìªº¬O¤@­Ó¥Î¤áÂY¥X¿ù»~¡A­nÀò±o¯u¥¿ªº¿ù»~¸ê°T¡A§A¥²¶·±qª«¥ó
¤Þ¥ÎUserValue ¨Ó¨ú±o¤º³¡Exception ª«¥óªºÄÝ©Ê¡C
¤W­±¥N½X¤¤ªº²Ä¤G­Ó¨Ò¤lªí©ú¡A¦pªG¦³Exception ª«¥ó¡A¨º»òTHROW ¦Û¤v·|¥h­«·sÂY
¥X³o­ÓException¡C¦b³oºØ±¡ªp¤U¡A¥~³¡TRY µ²ºcÀò±oªº»P¤º³¡TRY µ²ºc«Ø¥ßªº¬O¦P¤@­Ó
ª«¥ó¡A©Ò¥H¡A¥~³¡¿ù»~³B²z¾¹¤£»Ý­n¥h¤Þ¥Î³o­Óª«¥óªºUserValue ÄÝ©Ê¡C
§A¥i¥H¦b¤@­ÓTRY µ²ºcªº¥~­±¨Ï¥ÎThrow »y¥y¡A¦ý³o¼Ë°µ¤£·|±a¨Ó¤°»ò¤ñError ©R¥O
§ó¦hªº¦n³B¡A¦]¬°¤£ºÞ¦óºØ±¡ªp¤U¡AThrow »y¥yÂY¥XªºException ª«¥ó³£¥²¶·­n¦³¤@­Ó¯à®·
®»¨ì¥¦ªºTRY µ²ºc¡A­Y¨S¦³ªº¸Ü¡A«hVFP ªº¿ù»~³B²z¾¹·|³Q½Õ¥Î¡C¨Æ¹ê¤W¡A¦pªG¯uªº¦³¤°
»ò¤£ÄÝ©óTRY µ²ºcªºªF¦è®·®»¨ì¤F³o­ÓException¡A¨º¤~¬O­Ó¥O¤H§x´bªº°ÝÃD¡A¦]¬°¥u¦³
TRY µ²ºc¤~¯à®·®»¨ì³QÂY¥XªºException ª«¥ó¡C¦bError ¤èªk©ÎªÌON ERROR ±`¦¡ªº±¡ªp¤U¡A
³Q±µ¦¬ªº°Ñ¼Æ©MAERROR()ªºµ²ªG©ÒÃöÁpªº¡A±N¬OThrow »y¥y©M¥¼³B²zªºexception ¿ù»~¡A
¦Ó¤£¬O¬°¤°»ò¨Ï¥Î¤FThrow »y¥yªº­ì¦]¡CException ª«¥óªº¬Y¨ÇÄݩʱN³Q©ñ¦b¥ÑAERROR()
¨ç¼Æ¶ñ¥R¦n¤Fªº°}¦Cªº²Ä2 ©Î²Ä3 ¦C¤¤¡A¥H«K¿ù»~³B²z¾¹¯à°÷¤ÀªR³o¨Ç¦C¡CµL½×¦p¦ó¡A³o³£
¤£¯àºâ¬O¤@ºØ³B²z¿ù»~ªº¥¿½T¤è¦¡¡C©Ò¥H¡A½Ð«OÃÒThrow »y¥y³Q¨Ï¥Îªº®É­Ô¡A¦³¤@­ÓTRY
µ²ªG¯à°÷®·®»¨ì¥¦¡C
¤Ñ°óùتº·Ð´o
¦bVFP ªº¿ù»~³B²z¾÷¨î¤¤³Ì¤jªº°ÝÃD¬O¡G«ç»ò¦b¿ù»~ª¬ªp¤U¡Aªý¤î¿ù»~ªºµo¥Í¡C§Ú»¡
¡§¿ù»~ª¬ªp¡¨ªº·N«ä«üªº¬O¿ù»~·í«e¤w¸gµo¥Í¤F¡A¨Ã¥B¡A¤w¸g³Q¬Y­Óª«¥óªºError ¤èªk©ÎªÌ
¥þ§½ON Error ¿ù»~³B²z¾¹³]¤Uªº³´¨À©Ò®·®»¨ì..¦ý¬O¡A¤SÁÙ¨S¸I¨ì¤@­ÓReturn ©ÎªÌRetry
»y¥y¡C¦b³o­Óª¬ªp¤¤¡A¦pªG¥X²{¤F¤°»ò·sªº¿ù»~¡A¨º»ò´N¨S¦³¤°»ò¦w¥þªº¿ìªk¥i¥H®·®»¨ì³o
­Ó¿ù»~..³q±`±¡ªp¤U¡A¥Î¤á·|±o¨ì¤@­ÓVFP ¿ù»~¹ï¸Ü¤è¶ô¡A±aµÛ¤@­ÓVFP ¿ù»~®ø®§¥H¤Î
Cancel ©MIgnore «ö¶s¡C©Ò¥H»¡¡A§Aªº¾ã­Ó¿ù»~³B²z¾÷¨î¥²¶·¬O§AªºÀ³¥Îµ{¦¡¤¤Bug ³Ì¤Öªº
³¡¤À¡A¨Ã¥B§AÁÙ¥²¶·¹ï¨º¨Ç¨Ã«DBug ¦Ó¬O¥ÑÀô¹Ò¤Þ°_ªº°ÝÃD¶i¦æ´ú¸Õ¡C
¨Ò¦p¡A°²©w§Aªº¿ù»~³B²z¾¹·|§â¿ù»~±¡ªp°O¿ý¨ì¤@­Ó¥s°µERRORLOG.DBF ªºªí¤¤¡C¨º
»ò¡A­n¬O³o­Óªí¤£¦s¦bªº¸Ü¸Ó«ç»ò¿ì¡H
§A¥²¶·¥ÎFILE()¥hÀˬd³o­Óªí¬O§_¦s¦b¡A¦pªG¨S¦³ªº¸Ü´N­n«Ø¥ß³o­Óªí¡C
¦pªG³o­Óªí¤w¸g³Q§Oªº¤°»ò¦a¤èªº¥N½X¿W¦ûªº¥´¶}¤F©O¡H§A¥i¥H³Ì¤j­­«×ªº´î¤Ö¿W¦û
¥´¶}¸Óªíªº¾÷·|¡A¥H´î¤Ö¿ù»~µo¥Íªº¾÷·|¡A¦ý¬O¡A­n°µ¨ìµ´¹ïªº¦w¥þªº¸Ü¡A§AÀ³¸Ó¥ý¥Î¤@¤U
FOPEN()¸Õ¸Õ¯à§_¥´¶}¥¦¡A¦]¬°FOPEN()¦pªG¤£¯à¥´¶}ªº¸Ü·|ªð¦^¤@­Ó¿ù»~¥N½X¦Ó¤£¬O¾É­P
µo¥Í¤@­Ó¿ù»~¡C
¦pªGErrorlog.dbf Àɦs¦b¡A¨Ã¥B¤]¥i¥H¥ÎFOPEN()¨Ó¥´¶}¥¦..¦ý¬OÀɤw¸g³Q·lÃa
¤F«ç»ò¿ì©O¡HÁV¿|ªº¬O¨S¦³´ú¸Õ³o­Ó°ÝÃDªº¦n¿ìªk¡C
¬Ý¨ì°ÝÃD©Ò¦b¤F§a¡H¬°¤F­n¹ï¥I¥i¯à¥X¿ùªº¨C¥ó¨Æ±¡¡A§Aªº¿ù»~³B²z¾¹ªº¥N½X·|Åܱo¬Û
·íªº½ÆÂø..ÁV¿|ªº¬O¡A³o»ò½ÆÂøªº¥N½XªÖ©w·|¥X²{¤£¤Ö·sªºBug¡C
¦bVFP ¥H«eªºª©¥»¤¤¨S¦³¸Ñ¨M³o­Ó°ÝÃDªº¿ìªk¡C§A¥u¯à¼g¤U¦X²zªº¥N½X¡BºÉ¥i¯à¦hªº
´ú¸Õ¥¦¡AµM«á´N¥u¯à¨D¦Ñ¤Ñ«O¦ö¤F¡C©¯¹Bªº¬O¡A¦bVFP8 ¤¤²×©ó¦³¤F¸Ñ¨Mªº¿ìªk¡G§â§Aªº¿ù
»~³B²z¾¹«Ê¸Ë¦b¤@­ÓTRY µ²ºc¤¤¡C¥Ñ©ó¥ô¦óµo¥Í¦bTRY ¶ô¤¤ªº¿ù»~³£·|³QCATCH ®·®»¨ì¡A
©Ò¥H²{¦b§Ú­Ìªº¿ù»~³B²z¥N½X²×©ó¦³¤F¤@­Ó¦w¥þºô¤F¡C
³oùجO¤@­Ó²³æªº¨Ò¤l¡]¤U¸üÀɤ¤ªºWrappedErrorHandler.prg¡^¡G
On Error do ErrorHandler with error(), program(), lineno()
Use MyBadTableName && ³o­Óªí¨Ã¤£¦s¦b
On Error
Procedure ErrorHandler(tnError, tcMethod, tnLine)
Try
Use ErrorLog
Insert into ErrorLog Values (tnError, tcMethod, tnLine)
Use
** ¦b³o­Ó¿ù»~³B²z¾¹¤¤·|©¿²¤¥ô¦ó°ÝÃD
CATCH
ENDTRY
Return
EndProc
¦pªGErrorLog ªí¥Ñ©óÀɤ£¦s¦b¡BªíµLªk¥´¶}¡BÀɤº®e·lÃa©ÎªÌ¥ô¦ó¨ä¥L­ì¦]¾É­P
¤£¯à¨Ï¥Î¡ACATCH ¶ô³£±N·|³Q¹B¦æ¡C¦b³o­Ó¨Ò¤lùØ¡A¥Ñ©óCATCH ¶ô¤¤¨S¦³¥´¶}¡A©Ò¥H¦b
¿ù»~¤¤ªº©Ò¦³¿ù»~³£³Q©¿²¤¤F¡C
¿ù»~³B²zµ¦²¤
²{¦b§Ú­Ì¨ÓÁ`µ²¤@¤U¡A¨Ã±´°Q¤@­Ó¾ãÅ骺¿ù»~³B²zµ¦²¤¡C³oùجO§Ú¥Ø«e¨Ï¥Îªº¿ìªk¡G
ƒÜƒn¨Ï¥Î¤T­Ó¿ù»~³B²z¼h¡GTRY µ²ºc¹ï¥I¥»¦a¿ù»~¡FError ¤èªk¥Î§@¥i¥H³Q«Ê¸Ëªºª«¥ó
¼h¦¸ªº¿ù»~³B²z¾¹¡F¦ÓON Error ©R¥O«h­t³d¥þ§½ªº¿ù»~³B²z¡C¦b«e­±ªº¨â¼h¤¤³B
²z¨º¨Ç¹w®Æ¨ìªº¿ù»~¡A¦Ó§â¥¼¹w®Æ¨ìªº¿ù»~¶Ç»¼µ¹¤U¤@¼h¡C
ƒÜƒn§â¿ù»~³B²z¾¹«Ê¸Ë¦b¤@­ÓTRY µ²ºc¤¤¡A¥H¨¾¤î·í¿ù»~³B²z¥N½X¥»¨­¥X²{¿ù»~®É·|
¼u¥XªºVFP ¿ù»~³B²z¹ï¸Ü¤è¶ôªº¥X²{¡C
ƒÜƒn¬°§Aªº¿ù»~³B²z¾÷¨î¨Ï¥Î³d¥ôÃì³]­p¼Ò«¬¡C³o­Ó°ÝÃD½Ð°Ñ¨£Foxtalk 1998 ¦~²Ä1 ´Á
¤W§Úªº±MÄæ¤å³¹¡m¦A½×¿ù»~³B²z¡n¡] Error Handling Resitied ¡^¡B©ÎªÌ¦b
www.stonefield.com ¤WÃö©ó¿ù»~³B²zªº¥Õ¥Ö®Ñ¡C
ƒÜƒn¤£­n¨Ï¥Î¤@­ÓTRY µ²ºc¨Ó«Ê¸Ë§Aªº¾ã­ÓÀ³¥Îµ{¦¡¡C¦pªG³o¼Ë°µªº¸Ü¡A¤@¥¹¥ô¦ó¿ù
»~µo¥Í¡A´N¨S¿ìªk¯d¦bµ{¦¡ªº¤º³¡Æ[¹î¿ù»~ªº¸ê°T¤F¡C
ƒÜƒn°£«D¦³¤@­ÓTRY µ²ºc¡A§_«h¤£­n¨Ï¥ÎThrow »y¥y¡C
Á`µ²
¦bVFP8 ¤¤·s¼Wªºµ²ºc¤Æ¿ù»~³B²z¥\¯à¬°§Ú­Ì´£¨Ñ¤F¤T­Ó¿ù»~³B²z¾¹ªº¼h¦¸¡G¥»¦aªº¡B
ª«¥óªº¡BÁÙ¦³¥þ§½ªº¡Cµ²ºc¤Æ¿ù»~³B²zÅý§A¥i¥H´î¤Ö¶Ç»¼¿ù»~¸ê°Tªº¥N½X¼Æ¶q¡A¨Ï§AªºÀ³¥Î
µ{¦¡Åܱo²³æ¡B¥iŪ©Ê§ó¦n¡B¨Ã¥B§ó®e©öºûÅ@¡C¦¹¥~¡A¬Y¨Ç´Æ¤âªº¿ù»~..¨Ò¦p¤@­Óª«¥óº©
¤£¸g¤ßªº¥h®·®»µo¥Í¦b¥t¤@­Óª«¥ó¤¤ªº¿ù»~³oºØ±¡ªp..²{¦b¥i¥H§ó©ú§Öªº³Q³B²z¤F¡C§Ú«Ø
ij§Aªá¨Ç®É¶¡¦n¦nªºª±Â०¡A¨Ã¦Ò¼{±N¥¦¤Þ¤J¬°§Aªº¾ã­Ó¿ù»~³B²zµ¦²¤ªº¤@­ÓÃöÁ䳡¤À¡C

_________________
#############################
§Ö¼Ö¶ý«}¨t¦C©¯ºÖ¦v°t,³Ü¤Q¥þÂû´ö~­ì¨Ó©¯ºÖ¨º»ò²³æ!!

¾Ç·|VFP¨Ï¥ÎªÌªÀ°Ïªº·j´M,Code¤~·|§ó¦³½ì~
#############################
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
±q¤§«eªº¤å³¹¶}©lÅã¥Ü:   
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï ©Ò¦³ªº®É¶¡§¡¬° ¥x¥_®É¶¡ (GMT + 8 ¤p®É)
²Ä1­¶(¦@1­¶)

 
«e©¹:  
±z µLªk ¦b³o­Óª©­±µoªí¤å³¹
±z µLªk ¦b³o­Óª©­±¦^ÂФ峹
±z µLªk ¦b³o­Óª©­±½s¿è¤å³¹
±z µLªk ¦b³o­Óª©­±§R°£¤å³¹
±z µLªk ¦b³o­Óª©­±¶i¦æ§ë²¼
±z µLªk ¦b³o­Óª©­±ªþ¥[ÀÉ®×
±z µLªk ¦b³o­Óª©­±¤U¸üÀÉ®×


Powered by phpBB © 2001, 2005 phpBB Group
¥¿Å餤¤å»y¨t¥Ñ phpbb-tw ºûÅ@»s§@