|
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¸ü.
|
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD |
µoªí¤H |
¤º®e |
Ruey
µù¥U®É¶¡: 2003-03-12 ¤å³¹: 1698 ¨Ó¦Û: tunglo
²Ä 1 ¼Ó
|
µ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ºÙµ¥µ¥¡^¡AY¨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¨Ï¥Î¡FY·í«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¿ù»~¡AnÀò±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¡AY¨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¨º
»ò¡An¬O³oÓªí¤£¦s¦bªº¸Ü¸Ó«ç»ò¿ì¡H
§A¥²¶·¥ÎFILE()¥hÀˬd³oÓªí¬O§_¦s¦b¡A¦pªG¨S¦³ªº¸Ü´Nn«Ø¥ß³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¡An°µ¨ìµ´¹ïªº¦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¬°¤Fn¹ï¥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«ht³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¤~·|§ó¦³½ì~
############################# |
|
¦^³»ºÝ |
|
|
|
|
±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§@
|