¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD |
µoªí¤H |
¤º®e |
Ruey
µù¥U®É¶¡: 2003-03-12 ¤å³¹: 1698 ¨Ó¦Û: tunglo
²Ä 1 ¼Ó
|
µoªí©ó: ¬P´Á¤é ¤K¤ë 24, 2003 10:43 am ¤å³¹¥DÃD: Visual FoxPro ¤¤ªº¿ù»~³B²z(Âà¶K) |
|
|
Visual FoxPro ¤¤ªº¿ù»~³B²z
(¤§¤@)
§@ªÌ¡GDoug Hennig
ĶªÌ¡GRMH
²¤¶
»PFoxPro 2.x¬Û¤ñ¡AVisual FoxPro¹ï¿ù»~ªº³B²z§ó¬°ÆF¬¡¦ý¤]§ó¬°½ÆÂø¡C·íª«¥ó¨ã¦³Error¤èªk¨Ó³B²z§½³¡¿ù»~®É¡A«ç¼Ë¬°§AªºÀ³¥Îµ{¦¡´£¨Ñ¤½¦@ªº¡B¥þ§½¿ù»~³B²zªA°È?·íµo¥Í¿ù»~®É¦p¦ó«ì´_?³oùØ´£¨Ñ¤@ºØ¸gÃÒ©ú¬O¦æ¤§¦³®Äªº¤èªk¨Ó¹ê²{Visual FoxProÀ³¥Îµ{¦¡ªº¿ù»~³B²z - ¶}©l©ó³æ¿Wªº±±¨î¶µ¡Aµ²§ô©ó¤@Ó¥þ§½ªº¿ù»~³B²zª«¥ó¡C
¿ù»~³B²z°ò¦
¦b¿ù»~³B²z¤¤¦³³\¦h§xÃøªº°ÝÃD¡G³]¸m¿ù»~³B²z¾¹¡AÀˬd¿ù»~ªº±¡ªp¡A´£¥Ü¥Î¤áµo¥Í¤F¤°»ò±¡ªp(¨Ã¥i¯à±N¨ä¼g¤J¤@ÓÀɨѥH«á¤ÀªR)¡A¨Ã¸Ñ¨M°ÝÃD(¸ÕµÛ¦A¦¸°õ¦æ©R¥O¡AÄ~Äò¥X¿ùªº»y¥yªº¤U¤@±ø»y¥y¡A°h¥X¨t²Îµ¥µ¥)¡C
³]¸m¿ù»~³B²z
»PFoxPro 2.x¤¤ªº³]¸m¿ù»~³B²z¬Û¦P¡AVFP¤¤n³]¸m¥þ§½¿ù»~³B²z¤´µM¨Ï¥Îon error©R¥O¡CÁ|¨Ò¦p¤U¡G
on error do ERR_PROC with error()¡A sys(16)¡A lineno()
³o¨Ç°Ñ¼Æ§i¶D¿ù»~³B²zµ{¦¡¡G¿ù»~¸¹¡Aµo¥Í¿ù»~ªºµ{¦¡ªº¦W¦r¡A¦æ¸¹¡C§A¥i¥H«ö§Aªº»Ýn¶Ç»¼¥ô·N°Ñ¼Æ¨ì¿ù»~³B²zµ{¦¡¡C
VFP¥H¦Uª«¥óªºERROR¨Æ¥óªº¤è¦¡¡A´£¨Ñ¤F¹ï¥þ§½¿ù»~³B²zªº¯à¤O¡C¦bVFP¤¤¨C¤@Óª«¥óªº¨Æ¥ó¼Ò²Õ³£¨ã¦³Error¨Æ¥ó¡C·íµM¡A¨Ã«D¨C¤@Óª«¥ó³£¦³Error¤èªk¡C¦pªG§A¤£²M·¡³oºØ®t§O¡A°O¦í¡A¨Æ¥ó¬O³Q¥Î¤á©Î¨t²Îªº¬Y¨Ç°Ê§@IJµoªº(À»Áä¡A·Æ¹«³æÀ»¡A©ÎªÌ¤@¨ÇVisual FoxPro»{¬°¬O¿ù»~ªºªF¦è)¡A·í¨Æ¥óµo¥Í®É¤èªk½s½X³Q°õ¦æ¡C·í¤@Ó®ø®§¶Ç»¼¨ì¤@Óª«¥ó³qª¾¥¦°õ¦æ¤èªk®É¡A¤èªk¥N½X¤]·|³Q°õ¦æ¡C¦b«Ü¦h¨Æ¥ó¤¤¡A¦p·Æ¹«³æÀ»¡A¦pªGª«¥óªº¤èªk¤¤¨S¦³¥N½X¡A¨Æ¥ó³Q©¿²¤©Î°õ¦æÀq»{ªº°Ê§@¡C¥i¬O¡A·í¿ù»~¥X²{®É¡A±N·|µo¥Í¤°»ò¨ú¨M©ó¤@¨t¦Cªº¨Æ±¡¡C
·í¤@Óª«¥ó½Õ¥Î¥t¤@ª«¥ó©Î¤@Ó«Dª«¥óµ{¦¡(¦pPRGÀÉ)®É¥X²{¿ù»~¡B¥B¸Óª«¥ó¦s¦bError¤èªk®É¡Aª«¥óªºError¤èªk±N³Q½Õ¥Î¡C¦pªG¸Óª«¥ó¨S¦³Error¤èªk±N·|µo¥Í¤°»ò±¡ªp©O?·í§Ú²Ä¤@¦¸¨Ï¥ÎVFP®É¡A§Ú°²³]¸Óª«¥óªº¤÷®e¾¹(¦pForm)ªºError¤èªk±N³Q½Õ¥Î¡CµM¦Ó¡A±¡ªp¨Ã«D¦p¦¹¡C¹ê»Ú±¡ªp¬O¡A¦pªG¥ô¦ó¦b½Õ¥Î°ïÅ|¤Wªºª«¥ó¦s¦bµÛError¤èªk¡A¸Ó¤èªk±N³Q½Õ¥Î;¦pªG¨S¦³¡Aon error±`¦¡(¦pªG¦³ªº¸Ü)³Q½Õ¥Î¡C¦pªG¨S¦³on error±`¦¡¡AVisual FoxPro°õ¦æ¥¦¦Û¤vªº¿ù»~³B²z(´N¬O¨ºÓÁn¦W¯TÄyªº¨ú®ø/©¿²¤¹ï¸Ü¤è¶ô)¡AµM«áµ{¦¡±Y¼ì¡C
Àˬd¿ù»~±¡ªp
FoxPro 2.x¤¤ªº¤@¨t¦Cªº¨ç¼Æ©MVFP³£¦³§U©óÀˬd¿ù»~µo¥Íªºì¦]¡A¥]¬Aerror()¡Amessage()¡Alineno()¡Asys(16)¡A©Msys(2018)¡CVFPÁÙ´£¨Ñ¤@Óaerror()¨ç¼Æ¡A¥Î©ó´£¨Ñ³Ìªñµo¥Íªº¿ù»~ªº¸ê°T¨Ã±N³o¨Ç¸ê°T¦s¤J¤@Ó°}¦C¡CÁöµM¸Ó°}¦C¤¤ªº¤@¨Ç¸ê°T¤]¥i±q¨ä¥L¨ç¼ÆÀò±o¡A¹ï©ó¬Y¨ÇÃþ«¬ªº¿ù»~(¦pOLE¡AOBDC¡A©MIJµo¾¹)¡Aaerror()¨ä¥L¨ç¼Æ«h¤£¯à±o¨ì¿ù»~¸ê°T(¨Ò¦p¦óºØÄ²µo¾¹³y¦¨¤F¿ù»~)¡C
´£¥Ü¥Î¤áµo¥Í¤F¤°»ò
©Z²v¦a§i¶D¥Î¤áµo¥Í¤F¿ù»~¡A¨Ã¤¹³\¥Î¤á¨M©w¦p¦ó³B²z¿ù»~¡C¥Dn¯A¤Î¨ìn§i¶D¥Î¤á¤°»ò¡B¨Ã´£¨Ñµ¹¥Î¤á¤°»ò¼Ëªº¿ï¾Ü¡C¹ïnÅã¥Üªº¿ù»~¸ê°T¶i¦æ¾A·í×§ï¡A¨Ã¥HºÉ¥i¯à¥ÀRªº¤è¦¡±¹µü¡A¥H¨¾¤îÅå·W¥¢±¹ªº¥Î¤á¦P®É«ö¤U"Ctrl-Alt-Delete"¡C¥¦¤]À³´£¨Ñ¦p¦ó³B²z¿ù»~ªº¸ê°T¡C¨Ò¦p¡A¤@¨Ç²³æªº¿ù»~¦p¦Lªí¾÷¥¼Áp±µ¥i¥H¸ß°Ý¥Î¤á½T«H¦Lªí¾÷¥¿½T¦aÁp±µ¨Ã¸Ë¦n¤F¯È¡C³o¼Ë¥Î¤á¥i¥H¦b¦C¦L©M¨ú®ø¦C¦L¤§¶¡§@¥X¿ï¾Ü¡C¦pªG¤@ӥΤá¸Õ¹Ï×§ï¤@Ó³Q§Oªº¥Î¤áÂê©wªº°O¿ý¡A§A¥i¥H§i¶D¥Î¤á·í«e¥¿¦³¥t¤@¥Î¤á¦b×§ï¸Ó°O¿ý¡A¨Ãµ¹¥X¦A¸Õ¤@¦¸©Î¨ú®ø×§ïªº¿ï¾Ü¡C
¦bVFP¤¤¥i¯à¥X²{ªº¿ù»~¦h¹F600ºØ¥H¤W¡A§A¥i¯à·|¥O¤H¤ß±ª¦a·Q¬°¨C¤@Ó¿ù»~µ¹¥X¦³·N¸qªº¸ê°T¡C©¯¹Bªº¬O¡A¦pªG§A¬d¬ÝVFPªºÀ°§U¤¤Ãö©ó¿ù»~¸ê°Tªº¥DÃD¡A§A·|µo²{¥¦Ì¤¤ªº¤j¦h¼Æ¶ÈÂkÃþ©ó¤U¦C¤Ö¼ÆªººØÃþ¡G
• ¨M¤£·|µo¥Í
• ¦pªGµ{¦¡®v¦b¼gµ{¦¡«e¥¼³Ü°s¡A´N¤£·|µo¥Í
• ¤@Ó¥H¤Wªº¥Î¤á¦P®É¨Ï¥Î¸Ó¨t²Î®É·|µo¥Í
• »ÝnÓ§O³B²zªº¿ù»~
¦b²Ä¤@ºØÃþ§O¤¤¡A§Aªºµ{¦¡°£¤F°h¥X¤§¥~¨S¦³§Oªº¿ï¾Ü¡C²Ä¤GºØ¿ù»~¥i¥H¦b´ú¸Õ¤¤³Qµo²{¡A¦ýY¥¼µo²{¡A§AªºÀ³¥Îµ{¦¡±N³ø§i¨Ãµn¿ý¸Ó¿ù»~¡AµM«áÃö³¬¡C²Ä¤TºØÃþ«¬ªº¿ù»~¤]¥i¥H¦b´ú¸Õ¤¤³Qµo²{¡A¦ý¬O¶È¥X²{¤@Ó²³æªºÃþ¦ü©ó"§A²{¦b¤£¯à¾Þ§@"ªº¿ù»~¸ê°T¡C¯u¥¿»Ýn§A³B²zªº¥u¬O²Ä¥|ºØÃþ«¬ªº¿ù»~¡C³oºØÃþ«¬¿ù»~ªº¨Ò¤l¬OÄæ¦ì©ÎªíÅçÃÒ³W«h¥¢±Ñ¡A¥DÃöÁä¦r¥¢±Ñ(¦pªG§A¨Ï¥Î¤F¨t²Î«ü©wªº¥N²zÃöÁä¦r¡A³oºØ±¡ªp«Ü¤Öµo¥Í)¡AIJµo¾¹¥¢±Ñ¡A©MÀÉ¥¼§ä¨ì¡C
¦bÅã¥Ü¿ù»~¸ê°Tµ¹¥Î¤á¤§«e¡A³\¦h¶}µoªÌ³ßÅwµn¿ý¿ù»~¨ì¤@Ó¿ù»~µn¿ýÀÉ¡C³o¤w³QÃÒ©ú¤F¬O·¥¦³»ùȪº¡A¦]¬°¥Î¤á±`±`·|§t½kªº¦V§A³ø§i¿ù»~µo¥Íªº²Ó¸`¡C¿ù»~µn¿ýÀÉ¥i¥H¬O¤@Ó¤å¦rÀɮסA¦ý¬O§Ú¨Ï¥Î¤@Óªí¤¤ªºÄæ¦ì¨Ó«O¦s¿ù»~µo¥Íªº¤é´Á©M®É¶¡(¥i¥H¬OVFP¤¤ªºDateTimeÄæ¦ì)¡A¥Î¤á¦W¡A¿ù»~¸¹©M¸ê°T¡A¦æ¸¹©M¿ù»~¥X²{³Bªº¥N½X¡A¤@ӳƵù«¬Äæ¦ì¥Î©ó¥]§t·í«eªº°O¾ÐÅéÅܼơC
¸Ñ¨M¿ù»~
¸Ñ¨M¿ù»~¬O½ÆÂøªº¨Æ±¡¡Cretry©R¥O¸ÕµÛ¦A¦¸°õ¦æµo¥Í¿ù»~ªº©R¥O¡A¦ý¬O¹ï©ó«Ü¦h¿ù»~¦Ó¨¥¡A¥Ñ©ó¥Î¤á¦Û¤v³B²z¿ù»~ªº¯à¤O©Ò¡A¸Ó©R¥O¹ï¥Î¤á³B²z¿ù»~¨S¦³¦h¤jÀ°§U¡Creturn«hÄ~Äò°õ¦æµo¥Í¿ù»~ªº©R¥Oªº«á±¤@¦æµ{¦¡¡A¦ý¥Ñ©ó³y¦¨¿ù»~ªºµ{¦¡¦C¨Ã¨S¦³°õ¦æ¡A©Ò¥H¦]¦¹¦Ó³y¦¨ªº¤G¯Å¿ù»~¸ê°T¥i¯à·|±µ¿æ¦Ó¦Ü¡A¦pÅܼƨS¦³«Ø¥ß(²¦³º¡A¦pªG¥i¥H©¿²¤³y¦¨¿ù»~ªºµ{¦¡¥B¤£·|±a¨Ó¥ô¦ó°ÝÃDªº¸Ü¡A¥¦¬O°µ¤°»ò¥Îªº©O?)¡Ccancel¤£¬O¤@ºØ²{¹êªº¿ï¾Ü¡A¦]¬°¥¦²×¤îÀ³¥Îµ{¦¡¡A³o¼Ë´N¨S¦³¾÷·|¨Ó¾A·í¦a¶i¦æ°h¥X«eªº¨t²Î²M²z¡C¥H³Q¬ù§ôªº¤è¦¡Ãö³¬À³¥Îµ{¦¡¬O¤@Ó¥¿½Tªº¿ï¶µ¡A¦]¬°«Ü¦h¿ù»~¬O¥Ñ©ó½sµ{¤Hû©Î§@·~¨t²Î³y¦¨ªº¡A¦b°ÝÃD³Q¸Ñ¨M«e¨S¦³§ó¦hªº¿ï¾Ü¡C§@¬°¤@Ó¶}µoªÌ¡A§A¥i¯à¤]Ä@·N¿ï¾Ü¨ú®øÀ³¥Îµ{¦¡¨Ãªð¦^¨ì©R¥Oµøµ¡¡C³o¼Ë°µªº¥N½X±NºÉ¥i¯à¦a²M°£Àô¹Ò¡C
¥t¤@Ó¿ï¶µ¬O¨Ï¥Îreturn to master©Îreturn to ¨Ó°h¥Xµo¥Í¿ù»~ªºµ{¦¡¦Óªð¦^¨ì¥D±±µ{¦¡©Î«ü©wªºµ{¦¡¡Cn¤p¤ß³B²z³oºØ¿ï¶µ¡A¦]¬°³o¼Ë·|¨Ï¨t²Î¶i¤J¤@ºØ²V¶Ãª¬ºA¡Gªí³æ©Mµøµ¡¤´µM¦s¦b¡Aªí©Î´å¼Ð¥ôµM¬O¥´¶}ªº¡Aµ¥µ¥¡C¦b¨Ï¥Îreturn to©R¥O«e¡AºÉ¥i¯à¦a²M°£³o¨ÇªF¦è¬O¤@Ó¦nªº¿ìªk¡C
³]p¿ù»~³B²z¤è®×
¥þ§½Error ³B²z©Mª«¥óªºError¤èªk¥Nªí¤F¤@Өƪ«ªº¨âӤ象G
• ·íError¤èªk¬O³y¦¨¿ù»~ªºª«¥óªº¤@³¡¤À®É¡A¥þ§½¿ù»~³B²z¾¹»Pµo¥Í¿ù»~ªº®Ú·½¬Û¶Z¸û»·¡C³o¼Ë¡AError¤èªkª¾¹D¥¦¦Û¤v©Ò³BªºÀô¹Ò¡A¨º¨Ç¿ù»~¥i¯à·|µo¥Í¡A¦p¦ó¸Ñ¨M¿ù»~¡C¨Ò¦p¡ACommonDialogs ActiveX±±¨î¶µ(Åã¥ÜÀÉ¡A¦C¦L¡A¦â±m©M¦Lªí¾÷ªº¹ï¸Ü¤è¶ô)¦b¥Î¤á¿ï¾Ü¨ú®ø®É¡A±N·|³yP¿ù»~¡C¥¦·|µLÁn¦aÅý¥þ§½¿ù»~³B²z¾¹³B²z¿ù»~¡A¥Ñ©ó¥¦¥uª¾¹D¨º¬O¤@Ó¬YºØÃþ«¬ªºOLE¿ù»~¨Ã¤£ª¾¹D«ç¼Ë¥h³B²z¥¦¡C¥u¯à¦bCommonDialogs ±±¨î¶µªº Error ¤èªk¤¤©ñ¤J¥N½X¨Ó³B²z¥Î¤á¿ï¾Ü¨ú®øªº±¡ªp¡C
• ¥þ§½¿ù»~³B²z¾¹¦bVFPªº¨Æ¥ó³B²z¾¹¤§¥~¡A¥ÎFoxProªº¦Ñªº"ON"¨Æ¥ó¤èªk¶i¦æ½Õ¥Î(¸Ó¤è®×¤´³Q¥Î©ó¥\¯àªí©Mon key label©R¥O)¡C³o·N¨ýµÛ¡A§A¤£¯à¨Ï¥Î¶HThisform¤@¼Ëªºª«¥ó»yªk¡A©Îµo§G¶Hprivate datasessions³o¼Ëªº·|¨Ï¿ù»~³B²zÅܱo½ÆÂøªº©R¥O¡C
• ¥þ§½¿ù»~³B²z¾¹¥i¥H¦³®Äªº§â¿ù»~³B²zªA°È©ñ¤J¦P¤@Ó¦a¤è(¦p¿ù»~µn¿ý©MÅã¥Ü)¡C¦ý¦b§AªºÀ³¥Îµ{¦¡¤¤ªº¨C¤@Óª«¥óªºError¤èªk¤¤¡A¥¦³B²z¦hºØ¤£¥i¹w´Áªº¿ù»~®É½T¬O§C®Ä²vªº(¦pºô¸ô³s±µÂ_½u)¡C
Åý§Ú̬ݬݳ]p¤@Ó±N¨âÓ¥@¬É¶i¦æ³Ì¦nªº¤@Å餯ªº¿ù»~³B²z¤è®×¡C§Ú̧Ʊæ¥HºÉ¥i¯à¦³®Äªº¤è¦¡³B²z¿ù»~¡A¦P®ÉÁÙ´£¨ÑÓ§Oª«¥ó³B²z¥¦Ì¦Û¤v¯S®í¿ù»~ªº¯à¤O¡C³oùجO§Ų́ϥΪºµ¦²¤¡G
• ´N¶H¤@Óª±¯º¤¤©Ò»¡ªº¨º¼Ë¡A¤@Óª«¥ó¤ñ¨ä¤÷Ãþ§ó²M·¡¥¦¥¿¦b°µ¤°»ò¡A¦]¦¹¤@Óª«¥óªºError¤èªk±N³B²z¥¦¦Û¤v©Ò¯à³B²zªº¤@¤Á¿ù»~¡C¨Ã±N¥¦©Ò¤£¯à³B²zªº³¡¤À¥Îdodefault()©R¥O¶Ç»¼µ¹¥¦ªº¤÷Ãþ¡C¦b¸ÓÃþ¼h¦¸¤¤ªº¦UÓ¤lÃþ³£³o¼Ë°µ¡C¦pªG¤@Ó¤lÃþ©Î¤@ÓÃþªº¹ê¨Ò¤£»Ýn³B²z¥ô¦ó¯S®íªº¿ù»~¡A«h¨äError¤èªk¤¤¤£·|©ñ¸m¥ô¦ó¥N½X¡A¥H«P¦¨¨ä¤÷Ãþ¥N½X¦Û°Ê°õ¦æ¡C³o¼Ë¡ASFDeepSubClassTextBox.Error½Õ¥ÎSFSubClassTextBox.Error¦A½Õ¥ÎSFTextBox.Error¡C
• ª«¥óªº³Ì³»¼h¤÷ÃþªºError¤èªk±N³B²z¥ô¦ó¥¦¯à³B²zªº¿ù»~¡C¥¦¥ÎThis.Parent.Error¶Ç»¼¨º¨Ç¸g¤£¯à³B²z¿ù»~¨ì¥¦ªº®e¾¹¡C
• ¥Ñ©ó®e¾¹Ãþ»P±±¨î¶µ¤@¼Ë¤u§@(¥¦Ì¶Ç»¼¤£¥i³B²zªº¿ù»~¨ì¥¦Ìªº¤÷Ãþ¡A³Ì³»¼h¤÷Ãþ¶Ç»¼¿ù»~¨ì¥¦Ìªº®e¾¹Ãþ)¡A¹ê»Ú®ÄªG¬O§Ṳ́W²¾¤@ÓÃþ¼h¦¸¦Ó¶i¤J¨ì®e¾¹Ãþªº¿ù»~³B²z¾¹¡C
• ³Ì³»¼h¤÷Ãþªº³Ì¥~³¡®e¾¹ªºError¤èªk±N³B²z¥¦¥i³B²zªº¥ô¦ó¿ù»~¡C¥¦·|¶Ç»¼¨º¨Ç¥¦¤£¯à³B²zªº¿ù»~¨ì¥þ§½¿ù»~³B²z¾¹¡C
¥H¤U¬O¤@Ó³]p¬yµ{¹Ï¡G¦bÃ줤ªº¨C¤@Óª«¥ó³B²z¿ù»~©Î±N¥¦¶Ç»¼¨ìÃ줤ªº¤U¤@Óª«¥ó¡C¦b³oÓ¦h¼h¤è®×¤¤¡A·í§A±qª«¥ó¨ì¥þ§½¿ù»~³B²z¾¹®É¡A¿ù»~³B²zÀò¨ú¸û¤Öªº²Ó¸`©M¸û¦hªº¤@¯ë¸ê°T¡A¤¹³\¿ù»~¦b¦UÓ¤£¦Pµ¥¯Å¶i¦æ³B²z¡C¹Ï 1 ªí©ú¤F³oºØµ¦²¤¡C
¹Ï 1. ¿ù»~³B²zµ¦²¤
§Ú̦bÀ³¥Îµ{¦¡±Ò°Ê®É±qSFErrorMgr¹ê¨Ò¤Æ¤@Óª«¥ó¨ì¤@ÓÁ`ÅéÅܼÆoError¡C¥¦ªº¤@Ó¤èªk(ErrorHandler)¬J¥i¥H¶H¤Wz¤@¼Ë³Qª«¥óª½±µ½Õ¥Î¤]¥i¥H¥Îon error©R¥O½Õ¥Î¡C¿ù»~³B²zª«¥ó¦³¤@Ó²³æªº¤¶±(¹ï½sµ{¦Ó¨¥)¡A¦]¦¹SFErrorMgr±µ¨ü»PError¤èªk¬Û¦Pªº°Ñ¼Æ(¿ù»~¸¹¡A¤èªk¦W¡A¦æ¸¹)¨Ãªð¦^¤@Ó»¡©ú¥Î¤á¿ï¾Üªº¦êµ¹¥Î¤á(©Îª«¥ó)¥H«K³B²z¿ù»~¡C¿ù»~ª«¥ó³B©ó³B²zÃ쪺¥½ºÝ¡A¦]¦¹¥¦¤£ª¾¹D½Õ¥Î¥¦ªº¦a¤èªºÀô¹Ò(¥i¯à¸g¾ú¤F¤@¨t¦Cªº¶Ç»¼¡A¦b¤£¦Pªº¸ê®Æ¤u§@´Á¤¤µ¥)¡C§@¬°¤@Óµ²ªG¡A¥¦¤£¯à¯u¥¿¦a§@§ó¦hªº"³B²z"(À³¸Ó¬O¡G¸Ñ¨M)¡C¥¦ªº¥Î³~¬OÅã¥Ü¤@¸ê°Tµ¹¥Î¤á¡Aµn¿ý¿ù»~¥H³Æ«á¥Î¡A¨Ã¨M©w¤U¤@¨Bªº¦æ°Ê(¦b¥i¾aªº¥i¹wª¾±ø¥ó¤U)©Î§ó¦hªº¡A¥i¾aªº¡A±N«ç¼Ë°µªº¸ß°Ý¡C³o¼Ë¡A¿ù»~³B²zª«¥ó±N¯u¥¿¦a¥Î©ó³B²z§A¨S¦³¹w®Æ¨ìªº¥i¹wª¾ªº¿ù»~(¤@¦ý¥¦Ì¥X²{¡A§A·|×§ï³y¦¨¿ù»~ªºª«¥ó¡AÃþ¡A©Î¹Lµ{)©M¤£¥i¹wª¾¿ù»~(¯u¥¿ªºbugs©Î¥¼¹w®ÆªºÀô¹Ò±ø¥ó)¡C
¥þ§½¿ù»~³B²z¾¹¦Û¤v·|§@¥X¤@Ó¥þ§½©Êªº¨M©w(½Õ¥XVFPªºDebugger©ÎÃö³¬À³¥Îµ{¦¡)©Î¤¹³\ª«¥ó¤Þµo¿ù»~¨Ó§@¥X³Ì«áªº¨M©w¡Cn¤¹³\«áªÌ¡A¦b¿ù»~³B²zÃ줤ªº¨C¤@¨Bªð¦^¤@Ó¨M©w½X¨ì¤W¤@¯Å¡C¬°Â²«K°_¨£¡A§Ú¨M©wªð¦^¤@Ó¦ê¨Ó»¡©ú¥Î¤á¿ï¾Ü¤F¨º¤@¨M©w¡G"«¸Õ"«·s°õ¦æ¤Þ°_¿ù»~ªº©R¥O¡A"Ä~Äò"«h±q¤Þµo¿ù»~ªºµ{¦¡ªº¤U¤@¦æÄ~Äò¹B¦æµ{¦¡¡A©Î"Ãö³¬ªí³æ"¥Î©óÃö³¬·í«e°_±±¨î§@¥Îªºªí³æ¡C¦Uª«¥ó¨Ìªð¦^ªº¸ê°T°õ¦æ¬ÛÀ³ªº¦æ°Ê¡C¥Ñ©ó®e¾¹ÃþªºError¤èªk¥i¯à¤w¸g³Q¨ä¦¨ûª«¥ó©Î¥¦¦Û¤vªº¬YÓ¤èªk½Õ¥Î¡A®e¾¹Ãþ¥²¶·¨M©w¬O¦V¤W¶Ç»¼ªð¦^¸ê°TÁÙ¬O¥Ñ¥¦¦Û¤v³B²z¡C¦bµy«á¡A§Ú̱N·|¬Ý¨£³o¨Ç¥N½X¡C
¸Ó¤è®×¦³¤@Ó°ÝÃD¡G±±¨î¶µ¸m©óVFPªºPage¡AColumn¡A©Î¨ä¥L¨S¦³Error¤èªk¥N½Xªº®e¾¹°òÃþ¤W®É¡A¥Ñ©ó¥¦Ì½Õ¥Î¤@ӪŪº¤èªk¡A©Ò¥H¥¦Ì¹ê½è¤W¨S¦³¿ù»~®·®»!¸Ñ¨M¿ìªk¬O¦bÃþ¼h¦¸¤¤¦V¤W²¾°Êª½¨ì§ä¨ì¤@Ө㦳Error¤èªk¥N½Xªº¤÷Ãþ¡C¦pªG§Ṳ́£¯à§ä¨ì³o¼Ëªº¤÷Ãþ¡A«hÅã¥Ü¤@Ó¤@¯ë©Êªº¿ù»~¸ê°T(³o¨Ã¤£¥i¾a¡A¥Ñ©ó©Ò¦³ªºªí³æÃþ³£¬O¥HSFFormÃþ¬°°òÃþ¡A¦ÓSFForm¨S¦³Error¤èªk¥N½X)¡C
nª`·Nªº¨Æ¬O§¹¾ãªº¿ù»~³B²zÃ쥲¶·¬O§AªºÀ³¥Îµ{¦¡¤¤³Ì¨S¦³Bugªº(¸g¹ý©³½Õ¸Õªº)³¡¥÷¡A¦]¬°¦b¿ù»~ª¬ºA¤U¦A¦¸¥X²{¿ù»~®É¡A°ß¤@¥i¨Ì¾aªº´N¬O¨ú®ø/©¿²¤¹ï¸Ü¤è¶ô¤F¡C©¯¹Bªº¬O¡A¥Ñ©ó§A¥i¥H±N¿ù»~³B²z¥N½X©ñ¤J§Aªº¤j¦h¼Æ¤u§@®Ø¬[¤¤¡A¤@¦ý§A¨Ï¥¦Ì¤u§@¡A¥¦Ì¤£·|¨ü¨ì§ó¦hªºÃöª`(ÁöµM»P²³¤£¦PªºÀô¹Ò±ø¥ó¤´·|¨Ï¿ù»~³B²z¾¹¦Û¨¥¢±Ñ)¡C¤£n¸ÕµÛ¦b¿ù»~³B²zª«¥ó¤¤«Ø¥ß¤@Ó¿ù»~³B²z¤èªk¡G·í¿ù»~³B²z¾¹¦Û¨¥X¿ù®É¡A¥¦¤£·|³Q½Õ¥Î¡C
foxer ¸ê®Æ¯¸ _________________ #############################
§Ö¼Ö¶ý«}¨t¦C©¯ºÖ¦v°t,³Ü¤Q¥þÂû´ö~ì¨Ó©¯ºÖ¨º»ò²³æ!!
¾Ç·|VFP¨Ï¥ÎªÌªÀ°Ïªº·j´M,Code¤~·|§ó¦³½ì~
############################# |
|
¦^³»ºÝ |
|
 |
Ruey
µù¥U®É¶¡: 2003-03-12 ¤å³¹: 1698 ¨Ó¦Û: tunglo
²Ä 2 ¼Ó
|
µoªí©ó: ¬P´Á¤é ¤K¤ë 24, 2003 10:44 am ¤å³¹¥DÃD: |
|
|
Visual FoxPro ¤¤ªº¿ù»~³B²z
(¤§¤G)
§@ªÌ¡GDoug Hennig
ĶªÌ¡GRMH
Error¤èªk
Åý§Ú̪`·N¿ù»~³B²zµ¦²¤ªº§ó¦hªº²Ó¸`¡C·í¤@Óª«¥óµo¥Í¿ù»~®É¶}©lÂI¬O¦b¸Óª«¥ó©Ò¨ã¦³ªºError¤èªk¡A¦]¦¹§Ú̱q³oùض}©l¡C
¦b§ÚªºÀ³¥Îµ{¦¡ªº°òÃþ¤¤¡A¤j¦h¼ÆÃþªºError¤èªk¥N½X¡A¥]§t¦bSFCTRLS.VCX¤¤¡A²M³æ¦p¤U(¥]¬AccMSG_RETRY©w¸q¦bERRORS.H¤¤¡A¥]§t©óSFCTRLS.H¤¤¡A¨C¤@ÓÃþªºincludeÀÉ)¡C§Ú»¡"¤j¦h¼ÆÃþ"¡A¬O¦]¬°³»¯Å®e¾¹¦pform©Mtoolbarªº¤u§@¤è¦¡¦³¤@¤pÂI¤£¦P¡C³o¬O§Úªº¤Ö¼Æªº§Æ±æVFP¤ä«ù¦h«Ä~©Óªº²z¥Ñ¤§¤@;¦b³o©M±¡ªp¤U¡A§A»Ýn¶H¦bVB¤¤¨º¼Ë¡A±N¬Û¦Pªº¥N½X©ñ¤J©Ò¦³ÃþªºError¤èªk¤¤(±Ä¥Î½Æ»s-Öß¶Kªº¤èªk)¡C
lparameters tnError¡A ;
tcMethod¡A ;
tnLine
local loParent¡A ;
lcMethod¡A ;
lcReturn¡A ;
lcError
* ¦V¤W²¾°Ê¤@Ó¼h¦¸ª½¨ì§Ú̧ä¨ì¤@Ө㦳Error ¤èªkªº¤÷Ãþ
if type('Thisform') = 'O'
loParent = iif(pemstatus(Thisform¡A 'FindErrorHandler'¡A ;
5)¡A Thisform.FindErrorHandler(This)¡A .NULL.)
else
loParent = .NULL.
endif type('Thisform') = 'O'
lcMethod = This.Name + '.' + tcMethod
do case
* §Ú̦³¤@Ó¥i¥H³B²z¿ù»~ªº¤÷Ãþ¡C
case not isnull(loParent)
lcReturn = loParent.Error(tnError¡A lcMethod¡A tnLine)
* §Ú̦³¤@Ó¿ù»~³B²zª«¥ó¡A ¦]¦¹½Õ¥Î¥¦ªº ErrorHandler()¤èªk¡C
case type('oError') = 'O' and not isnull(oError)
lcReturn = oError.ErrorHandler(tnError¡A lcMethod¡A ;
tnLine)
* ¤@Ó¥þ§½¿ù»~³B²z¾¹¦b°_§@¥Î¡A ¦]¦¹Åý§Ú̶ǻ¼¿ù»~¸ê°Tµ¹¥¦¡C
* ¥H¾A·íªºÈ´À´«¥i¾aªº°Ñ¼Æ¥H¶Ç»¼¨ì¿ù»~³B²z¾¹(µ{¦¡¦W¡A ¿ù»~¸¹¥H¤Î¦æ¸¹)¡C
case not empty(on('ERROR'))
lcError = strtran(strtran(strtran(strtran(upper(on('ERROR'))¡A ;
'SYS(16)'¡A lcMethod)¡A ;
'PROGRAM()'¡A lcMethod)¡A ;
'ERROR()'¡A 'tnError')¡A ;
'LINENO()'¡A 'tnLine')
* ¦pªG¿ù»~³B²z¾¹¬O¥H DO ©R¥O½Õ¥Î¡A ¶i¦æ§»ÂX®i¨Ã°²³]ªð¦^ȬO"Ä~Äò"¡C¦pªG¿ù»~³B²z¾¹¬O
* ³Q¤@Ó¨ç¼Æ½Õ¥Î (¤ñ¦p¤@Óª«¥óªº¤èªk)¡A ½Õ¥Î¥¦¨ÃÀò±oªð¦^È¡C
if left(lcError¡A 3) = 'DO '
&lcError
lcReturn = ccMSG_CONTINUE
else
lcReturn = &lcError
endif left(lcError¡A 3) = 'DO '
* Åã¥Ü¤@Ó¤@¯ëªº¹ï¸Ü¤è¶ô¡C
otherwise
messagebox('¿ù»~¸¹' + ltrim(str(tnError)) + ;
'¹ï¶H ' + This.Name + ;
'¤èªk '+ tcMethod + ;
'¦æ¸¹ '+ ltrim(str(tnLine))¡A 0¡A ;
_VFP.Caption)
endcase
* ½T«Hªð¦^¸ê°T¬O¥i±µ¨üªº¡C§_«h¡A °²©w¬°
* "Ä~Äò"¡C
lcReturn = iif(type('lcReturn') <> 'C' or ;
empty(lcReturn) or not lcReturn $ ccMSG_CONTINUE + ;
ccMSG_RETRY + ccMSG_CANCEL¡A ccMSG_CONTINUE¡A lcReturn)
* ³B²zªð¦^È¡C
do case
case '.' $ tcMethod
return lcReturn
case lcReturn = ccMSG_RETRY
retry
case lcReturn = ccMSG_CANCEL
cancel
otherwise
return
endcase
¥H¤W¥N½XÀˬdªí³æ±±¨î¶µ¬O§_¨ã¦³FindErrorHandler¤èªk¡A¦pªG¦³¡A½Õ¥Î¥¦¨Ó©w¦ì¨ì±±¨î¶µªº²Ä¤@Ó¤÷®e¾¹(¤£n³Q³oÓ¥N½X°g´b;§A¥i¥H¦b¨Ñ´£¨Ñªº·½¥N½X¤¤¬d¬Ý¥¦Ì)¡C³o¼Ë°µ¨¾¤î¤F³o¼Ë¤@ºØ±¡§Î¡G¥Ñ©óPage¡AColumn¡A©Î¨ä¥L®e¾¹Ãþ¨S¦³Error¤èªk¥N½X¦ÓP¨Ï¿ù»~°±¯d¦b³o¨ÇÃþ¤¤¡C¦pªG¤@Ó¥i¶i¦æ¿ù»~³B²zªº¤÷®e¾¹§ä¨ì¤F¡A¥¦ªºError¤èªk¥H¬Û¦Pªº°Ñ¼Æ³Q½Õ¥Î¡A°£«Dª«¥óªº¦W¦r³Q¥[¨ì¤FtcMethod¡A¦]¦¹§Ú̪º¿ù»~³B²zªA°Èµ{¦¡¯à°÷ª¾¹D¿ù»~¬Oµo¥Í¦b¨º¤@ª«¥ó¡C¦pªG¤÷®e¾¹¥¼§ä¨ì¦ý¦s¦b¤@Ó¥þ§½¿ù»~³B²z¾¹(µy«á§Ú̦A½Í¥þ§½¿ù»~³B²zµ{¦¡)¡A¥¦ªºErrorHandler¤èªk³Q½Õ¥Î¡C¦pªG¤@ÓON ERROR±`¦¡¦s¦b¡A§Ú̱N½Õ¥Î¥¦(º¥ý±N§Ú̪¾¹DªºÈ½Õ¾ã¬°¥¦¥i±µ¨üªº°Ñ¼Æ)¡AµL½×¥¦¬O¤@Ó¨ç¼ÆÁÙ¬O¤@Ó¹Lµ{¡C¦pªG§Ų́S¦³ªF¦è¥i¶Ç»¼¡A´N¨Ï¥Îmessagebox()¨ÓÅã¥Ü¤@±ø¸ê°T¡C
¿ù»~³B²z¾¹ªð¦^ªºÈ±N¨M©w«ç¼Ë³B²z¿ù»~¡Cº¥ý¡A¦pªG¸Ó¿ù»~¤£¬Oµo¥Í¦b¥»¦a¡A§ÚÌ¥²¶·ªð¦^¨M©w¸ê°T¦Ó¤£¬O¦Û¦æ³B²z¡C§Ú̱N¥ÎÀˬdµo¥Í¿ù»~ªº¤èªkªº¦W¦rªº¥yÂI¸¹(.)¨ÓÀˬd³o¤@ÂI;¦pªG¿ù»~¥X²{¦b¤@ÓÃþªº¤èªk¤¤¡AVFP¥u¶Ç»¼¤èªk¦W¡A¦ýª«¥ó¦¨û¶Ç»¼ª«¥ó©M¤èªk¦W¡A³o´N´£¨Ñ¤F¤@ºØ§Ö³tªº¤èªk¥Îª«¥ó¦Û¤v©Îª«¥ó¦W¨Ó°Ï§O¿ù»~ì¦]¡C¦pªG¤£¬O³oºØ±¡ªp¡A«h¬O§Ú̪º¿ù»~¡A¦]¦¹§Ú̱N'«¸Õ'¡A'¨ú®ø'¡A©Î'ªð¦^'¡C
¥Ñ©ó¥¦Ì¬O"³»¯Å"®e¾¹(§Ú¨S¦³¨Ï¥Îªí³æ¶°Formsets)¡ASFForm©MSFToolbarÃþªºError¤èªk»P¨ä¥Lª«¥ó¤£¦P¡C¸Ó¤èªk¨Ï¥Î¦Û©w¸qªºSetError¤èªk¨Ó²Õ´¤@¨Ç¦Û©w¸qÄݩʧΦ¨Ãö©ó¿ù»~ªº¸ê°T¡A¨Ã¥B¥ÎHandleError¤èªk¨Ó³B²z¿ù»~¡C³Ì«á¥¦³B²zªð¦^È¡A¥¦¦Û¤vn»ò°õ¦æ¤@Ó¦æ°Ê(¤ñ¦pÃö³¬ªí³æ)n»òªð¦^¨ì½Õ¥Î³oÓ¤èªkªºª«¥ó¡Cª`·N¦pªGª«¥ó¬ODataEnvironment¥B¥¦¦Û¤v´À´«³B²z³o¨Ç¿ù»~¡A¥¦±N¤£ªð¦^È¡C§A¥i¯à·Q§ïÅܳo¤@¦æ¬°¡C¦P®É¤]À³ª`·N¨Ï¥Îreturn to;µy«á§Ú̱N°Q½×³o¤@°ÝÃDªº§ó¦h²Ó¸`¡C
lparameters tnError¡A ;
tcMethod¡A ;
tnLine
local lcReturn¡A
lcReturnToOnCancel
* ¨Ï¥Î SetError() ©M HandleError() ¨Ó¨ú±o¿ù»~¸ê°T¨Ã³B²z¥¦¡C
with This
.SetError(tnError¡A tcMethod¡A tnLine)
lcReturn = .HandleError()
* ¦pªG¥Î¤á¿ï¾Ü¤F"¨ú®ø"¡A«ü©ú¨ì¨ºùØ¥h¡C
do case
case type('oError') = 'O' and not isnull(oError)
lcReturnToOnCancel = oError.cReturnToOnCancel
case type('.oError') = 'O' and not ;
isnull(.oError)
lcReturnToOnCancel = .oError.cReturnToOnCancel
otherwise
lcReturnToOnCancel = 'MASTER'
endcase
endwith
* ³B²zªð¦^È¡A ¨ú¨M©ó¿ù»~¬O "ours" ©Î¨Ó¦Û¤@Ó¦¨û.
do case
case lcReturn = ccMSG_CLOSEFORM
This.Release()
return to &lcReturnToOnCancel
case '.' $ tcMethod and ;
not 'DATAENVIRONMENT' $ upper(tcMethod)
return lcReturn
case lcReturn = ccMSG_RETRY
retry
case lcReturn = ccMSG_CANCEL
return to &lcReturnToOnCancel
otherwise
return
endcase
§Ṳ́£¯à¶ÈµÛ²´©óSetError ¤èªk(§A¥i¥H¦b´£¨Ñªº·½¥N½X¤¤¦Û¤vÀËÅç³o¤@ÂI) ¦ý¥H¤U¬OHandleError ¤èªk¥N½X¡G
local lnError¡A ;
lcMethod¡A ;
lnLine¡A ;
loError¡A ;
lcMessage¡A ;
lcReturn
with This
lnError = .aErrorInfo[.nLastError¡A cnAERR_NUMBER]
lcMethod = .Name + '.' + ;
.aErrorInfo[.nLastError¡A cnAERR_METHOD]
lnLine = .aErrorInfo[.nLastError¡A cnAERR_LINE]
* ¦pªG¦s¦bµÛ¿ù»~³B²zª«¥ó¡A¨ú±o¤@ӤޥΨì§Ú̪º¿ù»~³B²zª«¥ó¡C
* ¥¦¥i¯à¬Oªí³æ¸¹¤]¥i¯à¬O¤@Ó¥þ§½ª«¥ó¡C
do case
case type('.oError') = 'O' and not isnull(.oError)
loError = .oError
case type('oError') = 'O' and not isnull(oError)
loError = oError
otherwise
loError = .NULL.
endcase
lcMessage = ccMSG_ERROR_NUM + ltrim(str(lnError)) + ;
ccCR + ccMSG_MESSAGE + ;
.aErrorInfo[.nLastError¡A cnAERR_MESSAGE] + ccCR + ;
iif(empty(.aErrorInfo[.nLastError¡A cnAERR_SOURCE])¡A ;
''¡A ccMSG_CODE + ;
.aErrorInfo[.nLastError¡A cnAERR_SOURCE] + ccCR) + ;
iif(lnLine = 0¡A ''¡A ccMSG_LINE_NUM + ;
ltrim(str(lnLine)) + ccCR) + ccMSG_METHOD + lcMethod
do case
* ¦s¦bµÛ¤@Ó¿ù»~³B²zª«¥ó¡A ¦]¦¹½Õ¥Î¥¦ªº
* ErrorHandler() ¤èªk¡C
case not isnull(loError)
lcReturn = loError.ErrorHandler(lnError¡A lcMethod¡A ;
lnLine)
* ¤@Ó¥þ§½¿ù»~³B²zµ{¦¡¥¿¦b°_§@¥Î¡A ¦]¦¹§Ú̱N¿ù»~¶Ç»¼µ¹¥¦¡C¥H¾A·íªº
* Ȭ°¿ù»~³B²zµ{¦¡´À´«¥i¾aªº°Ñ¼Æ(µ{¦¡¦W¡A ¿ù»~¸¹¡A©M¦æ¸¹)¡C
case not empty(on('ERROR'))
lcError = strtran(strtran(strtran(strtran(upper(on('ERROR'))¡A ;
'SYS(16)'¡A lcMethod)¡A ;
'PROGRAM()'¡A lcMethod)¡A ;
'ERROR()'¡A 'tnError')¡A ;
'LINENO()'¡A 'tnLine')
* If the error handler is called with DO¡A macro expand it
* and assume the return value is "CONTINUE"¡CIf the error
* handler is called as a function (such as an object
* method)¡A call it and grab the return value if there is
* one¡C
if left(lcError¡A 3) = 'DO '
&lcError
lcReturn = ccMSG_CONTINUE
else
lcReturn = &lcError
endif left(lcError¡A 3) = 'DO '
* We don't have an error handling object¡A so display a
* dialog box¡C
otherwise
lcReturn = iif(messagebox(lcMessage¡A ;
MB_ICONEXCLAMATION + MB_OKCANCEL¡A ;
_screen.Caption) = IDCANCEL¡A ccMSG_CANCEL¡A ;
ccMSG_CONTINUE)
endcase
endwith
lcReturn = iif(type('lcReturn') <> 'C' or empty(lcReturn) or ;
not lcReturn $ ccMSG_CONTINUE + ccMSG_RETRY + ccMSG_CANCEL + ;
ccMSG_CLOSEFORM¡A ccMSG_CONTINUE¡A lcReturn)
return lcReturn
HandleError¸ÕµÛ³q¹L¤@Ó¥þ§½¿ù»~ÅܼÆoError©Îªí³æªºoErrorÄݩʶǻ¼¿ù»~¨ì¥þ§½¿ù»~³B²zª«¥ó¡C¸Ó¤è®×¤¹³\§A¦b¥i¯àªº±¡ªp¤U¡A¾Ö¦³¤@Ó©w¨îª©¥»ªº»Pªí³æÃöÁpªº¥þ§½¿ù»~³B²z¾¹¡C¦pªG¤@ÓON ERROR±`¦¡¦s¦b¡A§Ú̽եΥ¦(º¥ý±N§Ú̪¾¹DªºÈ½Õ¾ã¬°¥¦¥i±µ¨üªº°Ñ¼Æ)¡AµL½×¥¦¬O¤@Ó¨ç¼ÆÁÙ¬O¤@Ó¹Lµ{¡C¦pªG§Ų́S¦³ªF¦è¥i¶Ç»¼¡A´N¨Ï¥Îmessagebox()¨ÓÅã¥Ü¤@±ø¸ê°T¡CµM«á±q¿ù»~³B²z¾¹ªð¦^ªºÈ¦^¶Ç¨ìError¤èªk¡C
foxer¸ê®Æ¯¸ _________________ #############################
§Ö¼Ö¶ý«}¨t¦C©¯ºÖ¦v°t,³Ü¤Q¥þÂû´ö~ì¨Ó©¯ºÖ¨º»ò²³æ!!
¾Ç·|VFP¨Ï¥ÎªÌªÀ°Ïªº·j´M,Code¤~·|§ó¦³½ì~
############################# |
|
¦^³»ºÝ |
|
 |
Ruey
µù¥U®É¶¡: 2003-03-12 ¤å³¹: 1698 ¨Ó¦Û: tunglo
²Ä 3 ¼Ó
|
µoªí©ó: ¬P´Á¤é ¤K¤ë 24, 2003 10:44 am ¤å³¹¥DÃD: |
|
|
Visual FoxPro ¤¤ªº¿ù»~³B²z
(¤§¤T)
§@ªÌ¡GDoug Hennig
ĶªÌ¡GRMH
¥þ§½¿ù»~³B²z
SFErrorMgr¬O¤@Ó¬£¥Í©óSFCustomªº«D¥iµøÃþ¡C¥¦¥]§t¦bSFMGRS.VCX¤¤¨Ã¨Ï¥ÎSFERRORMGR.H¥]§t¤å¥ó¤¤©w¸qªº¤@¨Ç±`¶q¡C¦bÀ³¥Îµ{¦¡±Ò°Ê®É¡A¥¦³Q¹ê¨Ò¶iÁ`ÅéÅܼÆoError¤¤(°Ñ¨£SYSMAIN.PRG)¡C§Ṳ́£¥²¬d¬Ý¸ÓÃþªº¥þ³¡·½¥N½X¡A¥u»Ý¬d¬Ý¹ï§Ú̪º¿ù»~³B²z¤è®×¦³Ãöªº¤èªk¥N½X¡C§A¦Û¤v¥i¤w¬d¬Ý¥ô¦ó¨ä¥Lªº¤èªk¡C
Init¤èªk±µ¨ü¤TӰѼơG·í¿ù»~¥X²{®ÉÅã¥Üµ¹¥Î¤áªº¹ï¸Ü¤è¶ôªº¼ÐÃD(«O¦s©ócTitleÄݩʤ¤)¡A¤@Ó«ü©úInit¬O§_±N«O¦s·í«eªºon error³B²z¾¹¨Ã§ïÅÜ¥¦¨ì¥¦¦Û¤vªºErrorHandler¤èªk¡A¥H¤ÎÃþ¹ê¨Ò¤Æ¬°ª«¥ó®Éªº¦WºÙ(³o¹ï©óon error©R¥O¬O¥²»Ýªº¡A¦]¬°§Ṳ́£¯à¨Ï¥ÎÃþ¦WµüThis)¡C
¤@¯ë»¡¨Ó¡ADestroy¤èªk·|²M°£¤w³QÃþ§ïÅܤFªºªF¦è;¦b³oºØ±¡ªp¤U¡A¥¦«¸mVFPªº¿ù»~³B²zµ{¦¡¨ìª«¥ó³Q¹ê¨Ò¤Æ¥H«e¡C
ErrorHandler¤èªk³Q¿ù»~³B²zÃ줤³Ì«áªºª«¥óª½±µ½Õ¥Î¡A¨Ã¥Ñ©ó¥¦¤]¬Oon error¿ù»~³B²z¾¹¬G¤]³Q¶¡±µ½Õ¥Î¡C¥H¤U¬O¸Ó¤èªkªº¥N½X¡G
lparameters tnError¡A ;
tcMethod¡A ;
tnLine
local lcCurrTalk¡A ;
lcChoice¡A ;
lcProgram
with This
* Ensure TALK is off¡C
if set('TALK') = 'ON'
set talk off
lcCurrTalk = 'ON'
else
lcCurrTalk = 'OFF'
endif set('TALK') = 'ON'
* Put the error into the aErrorInfo array and set the
* lErrorOccurred flag¡C
.GetErrorInfo(tcMethod¡A tnLine)
* If errors aren't being suppressed¡A display the error
* and get the user's choice of action¡C
lcChoice = ccMSG_CONTINUE
if not .lSuppressErrors
* Log the error if necessary¡C
if .lLogErrors
.LogError()
endif .lLogErrors
* Display the error and get the user's choice if desired¡C
if .lDisplayErrors
lcChoice = .DisplayError()
do case
* Cancel or Quit in development environment¡G remove any
* WAIT window¡A revert all open cursors and issue a CLEAR
* EVENTS (in the case of Quit)¡A and then return to the
* top-level program¡C
case lcChoice = ccMSG_CANCEL or ;
(lcChoice = ccMSG_QUIT and version(2) <> 0)
wait clear
if lcChoice = ccMSG_QUIT
.lQuit = .T.
.RevertAllTables()
clear events
endif lcChoice = ccMSG_QUIT
lcProgram = .cReturnToOnCancel
return to &lcProgram
* Display the debugger (development environment)¡G activate
* the Trace and Debug windows¡C
case lcChoice = ccMSG_DEBUG and version(2) <> 0
activate window debug
set step on
* Retry programmatic code¡G we must do the retry here¡A
* since nothing will receive the RETRY message (as is the
* case with an object)¡C
case lcChoice = ccMSG_RETRY
lcMethod = upper(tcMethod)
if at('.'¡A lcMethod) = 0 or ;
inlist(right(lcMethod¡A 4)¡A '.FXP'¡A '.PRG'¡A ;
'.MPR'¡A '.MPX')
if lcCurrTalk = 'ON'
set talk on
endif lcCurrTalk = 'ON'
retry
endif at('.'¡A lcMethod) = 0 ...
* Quit¡G revert all open cursors¡A then quit¡C
case lcChoice = ccMSG_QUIT
.lQuit = .T.
.RevertAllTables()
on shutdown
quit
endcase
endif .lDisplayErrors
endif not .lSuppressErrors
* Restore TALK¡C
if lcCurrTalk = 'ON'
set talk on
endif lcCurrTalk = 'ON'
endwith
return lcChoice
·í¿ù»~µo¥Í®É¡A¤TӰѼƶǻ¼¨ìErrorHandler¡G¿ù»~¸¹¡Aµo¥Í¿ù»~ªºµ{¦¡¦W¡Aµo¥Í¿ù»~ªº¦æ¸¹¡CErrorHandler¨Ï¥ÎGetErrorInfo¤èªk¨Ó³]¸mlErrorOccurredÄݩʬ°.T.¨Ã³]¸mÃö©ó¿ù»~ªº¸ê°T¨ìaErrorInfoÄݩʡC¦pªGlSuppressErrorsÄÝ©ÊȬ°.T.¡A¤£µn¿ý¿ù»~¥B¤£Åã¥Ü¿ù»~¸ê°T(³o¥Î©ó·í§A·Q®·®»¿ù»~¡A¦ý¤S¤£·Qµn¿ý©MÅã¥Ü¿ù»~¸ê°Tµ¹¥Î¤á®É)¡C§_«h¡ALogError¤èªk³Q½Õ¥Î¨Óµn¿ý¿ù»~¨Ã¥BDisplayError¤èªk¥Î©óÅã¥ÜÃö©ó¿ù»~ªº¸ê°T¨Ã¨ú±o¥Î¤áªº¿ï¾Ü¡C³o¨Ç¿ï¾Ü¬O¡G
• ½Õ¸Õ¡G¸Ó¿ï¶µ¶È·ílShowDebug³]¸m¬°.T.¥B§Ú̬O¹B¦æ¤_VFPªº¶}µoª©¤¤®É¥i¿ï¡A½Õ¥X¸òÂÜ©M½Õ¸Õµøµ¡¡C¶È·í¶}µoªÌ¨Ï¥Î®É¡AlShowDebug³Q³]¸m¬°.T.(³o¤@ÂI¥i¥H¦b¥Î¤áªí¤¤©ÎWindowsµù¥Uªí¤¤Àˬd¨ì)¡C
• Ä~Äò¡Gªð¦^¨ì³y¦¨¿ù»~ªºµ{¦¡ªº«á±¤@¦æ¡A¨ÃÄ~Äò°õ¦æµ{¦¡¡C
• «¸Õ¡G«·s°õ¦æ¥X¿ùªºµ{¦¡¡C³oùبϥΤF¤@¤pÂI§Þ¥©¡G¦pªGErrorHandler¤w¸g³Q©ú½T¦a½Õ¥Î¤F(´N¬O»¡¡A±q¤@Óª«¥óªºError¤èªk)¡A«h¤£¯àª½±µµo§Gretry©R¥O¡A¥Ñ©ó¨º¼Ë°µ·|§â±±¨îªð¦^¨ì½Õ¥Î¥¦ªº¤èªk¡A¦Ó¤£¬O³y¦¨¿ù»~ªº¤èªk¡C¦b³oºØ±¡ªp¤U¡A§Ú̱N¶Èªð¦^¤@Ó¸ê°T"«¸Õ"¡CµM¦Ó¡A¦pªG¿ù»~¥X²{¦bµ{¦¡Àɤ¤(PRG©ÎMPRÀɤ¤)¡AErrorHandler±N¥Hon error¤èªk³Q½Õ¥Î¡A¦]¦¹¥uªð¦^¸Ó¸ê°TÁÙ¤£°÷¡C¦b³oºØ±¡ªp¤U¡AErrorHandler¥²¶·¦Û¤vª½±µµo§Gretry©R¥O¡C
• ¨ú®ø¡G¦bCompuServe¤W¡A¤@Ó±`¨£ªº°ÝÃD¬O¡G¦p¦óÁ×§Kµ{¦¡©Î¤èªk¤¤ªº¨ä¾l¥N½X¦b°õ¦æ®É³y¦¨¿ù»~?§A¤£¯à¨Ï¥Îcancel¡A¦]¬°¨º¼Ë¨ú®ø¤F¾ãÓÀ³¥Îµ{¦¡¡Creturnªð¦^¨ì¦P¤@¤èªk¤¤¦]¦¹¨º¼Ë°µ¨ÃµL¦n³B¡C¸Ñ¨M¿ìªk¬Oªð¦^¨ì¨ì§AªºÀ³¥Îµ{¦¡ªºread events»y¥y©Ò¦bªºµ{¦¡(¦b¤@¯ë±¡ªp¤U¡A·í§Aªº¤èªk¥N½X©|¥¼°õ¦æ®É¡A§A´Nµo§G¤F¸Ó©R¥O)¡C¥Ñ©ó¸Ó¹Lµ{¥i¯à¤£¬O§AªºÀ³¥Îµ{¦¡ªº²Ä¤@Ó°õ¦æªºµ{¦¡¡A§Ú̱N±±¨îªð¦^¨ìÄÝ©ÊcReturnToOnCancel¤¤«ü©wªºµ{¦¡¤¤n¤ñ¨Ï¥Îreturn to mastern¦n¡C·í§A¹ê¨Ò¤ÆSFErrorMgr®É¡A§A¥i¥H¾A·íªº³]¸m¸ÓÄݩʪºÈ(§A¥i¥H³]¸m¥¦ªºÈ¬°"MASTER"¦pªGÀ³¥Îµ{¦¡ªº²Ä¤@Ó¹Lµ{¥]§t¤Fread events)¡C¦pªG§Aªºread events»y¥y¬O¦b¤@Óª«¥óªº¤èªk¤¤¡A³]¸m¬°¸Óª«¥óªº¦W¦r;¨Ò¦p¡A¦pªG§Aªºread events»y¥y¬O¦boApp.EventHandler¤¤¡A§â"EventHander"©ñ¤JcReturnToOnCancelÄݩʤ¤¡C
• °h¥X¡G°h¥XÀ³¥Îµ{¦¡¡C®Ú¾Ú§Ú̬O§_¨Ï¥Îªº¬OVFPªº¶}µoª©¡A¦Ó¥i¯à¤£¦Pªº»Ý¨D¡C¦b¶}µo¼Ò¦¡¤U¡A·í§A¤£±o¤£«·s±Ò°ÊVFP®É¨C¤@¦¸³£±o¨ì¤@±ø¿ù»~¸ê°TµLºÃ¬O¤@¥óµhWªº¨Æ±¡¡A¦]¦¹¦b¨ººØ±¡ªp¤U¡A³o¤@¿ï¶µ±N¬Oclear events¨Ãªð¦^¨ì¥Dµ{§Ç¡A¦]¦¹À³¥Îµ{¦¡¯à°÷¥H¦³§Çªº¤è¦¡Ãö³¬¨Ãªð¦^©R¥Oµøµ¡¡C¦pªG³o¬O¤@ÓVFPªº¹B¦æ®Éª©¥»¡A§Ú̱N¥u²M²z¨Ã°h¥X¡C¦b¤Wz¨âºØ±¡ªp¤¤¡A¦b©Ò¦³ªº¸ê®Æ¤u§@´Áªº©Ò¦³´å¼Ð¤W¡A§Ú̳£¦³±N¨Ï¥Î¦Û©w¸qªºRevertTables¤èªk¨Ó°õ¦æ¤@Ótablerevert(.T.)¡C¦]¦¹¡A¥H³oºØ¤èªk°h¥X¡A§Ṳ́£·|±o¨ì¤@Óªþ¥[ªº¿ù»~(¤ñ¦p¨ºÓ¯ä¦W»·´ªº"uncommitted changes"¿ù»~)¡C
foxer ¸ê®Æ¯¸ _________________ #############################
§Ö¼Ö¶ý«}¨t¦C©¯ºÖ¦v°t,³Ü¤Q¥þÂû´ö~ì¨Ó©¯ºÖ¨º»ò²³æ!!
¾Ç·|VFP¨Ï¥ÎªÌªÀ°Ïªº·j´M,Code¤~·|§ó¦³½ì~
############################# |
|
¦^³»ºÝ |
|
 |
Ruey
µù¥U®É¶¡: 2003-03-12 ¤å³¹: 1698 ¨Ó¦Û: tunglo
²Ä 4 ¼Ó
|
µoªí©ó: ¬P´Á¤é ¤K¤ë 24, 2003 10:45 am ¤å³¹¥DÃD: |
|
|
Visual FoxPro ¤¤ªº¿ù»~³B²z
(¤§¥|)³B²z¯S®íªº¿ù»~
§@ªÌ¡GDoug Hennig
ĶªÌ¡GRMH
³B²z¯S®íªº¿ù»~
¨ì¥Ø«e¬°¤î¡A§Ṳ́w¸g°Q½×¤FÃö©ó¿ù»~³B²z¤è®×ªº¤@¯ë©Êªº°ÝÃD¡G¨C¤@Ó¿ù»~³£·|³yP"¨ú®ø¡AÄ~Äò¡A«¸Õ¡A°h¥X"¹ï¸Ü¤è¶ôªº¥X²{¡C³o¹ï©ó¥i¹wª¾ªº¿ù»~¬O¤£¾A·íªº¡A¥¦¶È¾A¥Î©ó¤£¥i¹wª¾©Êªº¿ù»~¡C¥i¹wª¾ªº¿ù»~±N¦b¥i¯à³yP¿ù»~ªºª«¥óªºError¤èªk¤¤³B²z¡C
§@¬°³B²z¯S®í¿ù»~ªº¤@Ó¨Ò¤l¡A§Ú̱N¦Ò¼{¬Ý¤@¬ÝSFMaintFormÃþ(¦bSFFORMS.VCX¤¤)¡A³o¬O¤@Ó¯S§O¬°¸ê®Æµn¿ýªí³æ³]pªºSFFormÃþªº¤@Ó¤lÃþ¡C³o¬O¤@ÓÃö©ó¤@Óª«¥ó¦p¦ó³B²zÀô¹Ò©M¥i¹wª¾¿ù»~ªº¦n¨Ò¤l¡C
¥Ñ©óSFFormªºError¤èªk¥H²³æªº¶Ç»¼¿ù»~¨ìSFErrorMgrªºErrorHandler¤è¦¡½Õ¥ÎHandleError¤èªk¡A§Ú̱N¤£¦Ò¼{¥ÎSFMaintForm¤¤ªºHandleError¨Ó³B²z¯S®íªº°ò©ó¸ê®Æªº¿ù»~¡C¥H¤U¬OHandleErrorªº¥N½X¡G
local lnError¡A ;
lcMethod¡A ;
lcReturn¡A ;
loObject
with This
* Get the error number and method¡C
lnError = .aErrorInfo[.nLastError¡A cnAERR_NUMBER]
lcMethod = upper(.aErrorInfo[.nLastError¡A ;
cnAERR_METHOD])
do case
* Handle "DataEnvironment already unloaded" by not
* displaying anything¡C
case lnError = cnERR_DE_UNLOADED
lcReturn = ccMSG_CONTINUE
* Handle a problem in the DataEnvironment¡C
case 'DATAENVIRONMENT' $ lcMethod
lcReturn = .ErrDataEnvironment(lnError)
* Handle a trigger failed¡C
case lnError = cnERR_TRIGGER_FAILED
lcReturn = .ErrTriggerFailed()
* Handle a field rule failed by calling
* ErrFieldRuleFailed()¡CIf it returns an object
* reference¡A we'll set focus to that object so the
* user can correct the problem¡C
case lnError = cnERR_FIELD_RULE_FAILED
loObject = .ErrFieldRuleFailed()
if not isnull(loObject)
.ActivateObjectPage(loObject)
loObject.SetFocus()
endif not isnull(loObject)
lcReturn = ccMSG_CONTINUE
* Handle a table rule failed¡C
case lnError = cnERR_TABLE_RULE_FAILED
lcReturn = .ErrTableRuleFailed()
* Handle a primary/candidate index violation¡C
case lnError = cnERR_DUPLKEY
lcReturn = .ErrDuplicatekey()
* Handle the case where someone else has the record
* locked¡C
case lnError = cnERR_RECINUSE
lcReturn = .ErrRecordInUse()
* Handle the case where the record was modified by
* another user during a delete¡C
case lnError = cnERR_RECMODIFIED and ;
lcMethod = 'DeleteRecord'
messagebox(ccERR_REC_MODIFIED¡A MB_ICONSTOP¡A ;
_screen.Caption)
.Refresh()
lcReturn = ccMSG_CONTINUE
* Handle the case where the record was modified by
* another user during an edit¡C
case lnError = cnERR_RECMODIFIED
lcReturn = .ErrRecChangedByAnother()
* Otherwise use the default error handler¡C
otherwise
lcReturn = dodefault()
endcase
endwith
return lcReturn
§A¥i¯à·|»{¬°¡A¤@Ó³B²z¯S®í¿ù»~ªº°Æµ{¦¡±N¥i¯à¥Ñ¤@²Õcase»y¥y²Õ¦¨¡A¥H³B²z©Ò¦³¥i¹wª¾ªº¿ù»~©M¤@Óotherwise»y¥y¶Ç»¼©Ò¦³¤£¥i³B²zªº¿ù»~¨ìSFErrorMgr¡C¦bSFMaintFormªº±¡ªp¤¤¡A§Ú̱N³B²z¥H¤U¿ù»~¡G
• DataEnvironment¿ù»~©ÎIJµo¾¹¿ù»~©ÎÄæ¦ì³W«h¥¢±Ñ¡G¦b³oùØ¡A§Ú̱Nª`·N³o¨Ç¿ù»~ªº§ó¦h²Ó¸`¡C
• ªí³W«h¥¢±Ñ¡A°ò¥»/Ô¿ï¯Á¤Þ¹H¤Ï¡A©Î¨ä¥L¤HÂê¦í¤F°O¿ý¡G¨ä¥Lªº¦b¨t²Î³]p®ÉÀ³¦Ò¼{ªº°ÝÃD(¨Ò¦p¨Ï¥Î¨t²Î«ü©wªºÃöÁä¦r©M¨Ï¥Î¼ÖÆ[©Î´dÆ[Âê)¡AÃö©ó³o¨Ç¡A§Ų́S¦³§ó¦hªº¿ï¾Ü;¥u¯à´£¥æµ¹¥Î¤á¡A¥Ñ¥Î¤á³B²z³o¨Ç°ÝÃD¡C¦]¦¹§ÚÌ¥u½Õ¥Î¯S©wªº¤èªkÅã¥Ü¾A·íªº¸ê°Tµ¹¥Î¤á§Y¥i¡C
• ·í§Ú̸յۧR°£¤@Ó°O¿ý®É¡A¥¦¤w³Q¨ä¥L¥Î¤á×§ï¤F¡G§Ú̱NÅã¥Ü¤@±ø¸ê°Tµ¹¥Î¤á¨Ã«·sÅã¥Üªí³æ¤º®e¬°×§ï«áªº¤º®e¡C
• ·í§ÚÌ·Q×§ï¤@±ø°O¿ý®É¡A¥¦¤w³Q¨ä¥L¥Î¤á×§ï¤F¡G§Ú̱N¨Ï¥Î¸Ñ¨M½Ä¬ðªº¥N½X¨Ó¸Ñ¨M³oºØ°ÝÃD(¦b³oùØ¡A§Ṳ́£¦A¦C¥X³o¨Ç¥N½X;§A¥i¥H¦Û¤v¬d¬ÝErrRecChangedByAnother¤èªk¤¤ªº¥N½X)¡C
·íµM¡A³o¤£¬O¥þ³¡ªº¥i®·®»ªº¿ù»~¡A¦ý¬O¤@Ó¦nªº¨å«¬¨Ò¤l¡C
¸ê®ÆÀô¹Ò
¾¨ºÞDataEnvironment¦³¦Û¤vªºError¤èªk¡A¦ýÃþ¨S¦³DE¡A¦]¦¹§ÚÌ¥²¶·¤H¬°ªº©ñ¸m¥N½X¨ì§Ú̩ҫإߪº¨C¤@Ó¸ê®Æªí³æªºDataEnvironment.Error¤¤¡C¦³½ìªº¬O¡A¦pªGDEªºError¤èªk¤¤¨S¦³¥N½X¡A¥¦±N¦Û°Ê½Õ¥Î¨äªí³æªºError¤èªk¡C³o¼Ë§Ú̱N¦bSFMaintFormªºErrDataEnvironment¤èªk¤¤³B²zDEªº¿ù»~¡C³o¨Ç³B²z¥]¬A¤F"ªí©Î¸ê®Æ®w¥¼§ä¨ì"¡A"ªí³X°Ý©Úµ´"¡A"ªí¦b¨Ï¥Î¤¤"¡A©M"¥DÃöÁä¦rµL®Ä"µ¥¿ù»~¡C¦b¤@¯ë±¡ªp¤U¡A°£¤FÅã¥Ü¿ù»~¸ê°T©MÃö³¬ªí³æ¥~§Ų́S¦³§Oªº¿ï¾Ü¡CµM¦Ó¡A§ÚÌÁ٧Ʊæ±o¨ì¤@¨Ç¿ù»~³B²zªA°È¡A¦]¦¹§Ú̦b³]¸m¤FlDisplayErrorsÄݩʬ°.F.«á¡A½Õ¥ÎoError.ErrorHandler¡C³o·|¨Ï¿ù»~³Qµn¿ý¦ý¤£Åã¥Ü¿ù»~¸ê°T¡C§Ú̱N·|¦b¹B¦æ"Ãö³¬ªí³æ"«eÅã¥Ü§Ú̦ۤvªº¿ù»~¸ê°T¡C
IJµo
¦pªGIJµo¾¹¥¢±Ñ¡AP¨ÏIJµo¾¹¥¢±Ñªºª«¥óªºError¤èªk³Q±Ò°Ê¡A¦Ó¤£¬O³QIJµo¾¹(RIError procedure)³]¸mªºon error°Æµ{¦¡¡C³o¬O¤@Ó¤j°ÝÃD¡GRIError³]¸m¤½¦@ÅܼÆpnError¬°¤@Ó«D¹sªºÈ¡A³o¬O¤@Ó³Q¨ä¥L±`¦¡¨Ï¥Îªº¡A¥H«Kª¾¹DIJµo¾¹¤w¸g¥¢±ÑªºÅܼơC³]·Q¥H¤U±¡§Î¡G¥Î¤á¦b¤@Óªí³æ¤¤°µ¤F¬Y¨Ç¨Æ±¡¡A¤ñ¦p§R°£¤@Ó°O¿ý¨ÏIJµo¾¹¥¢±Ñ¦ÓP¨Ï¿ù»~³B²zµ{¦¡³Q½Õ¥Î¡A¦ý¥Ñ©óIJµo¾¹¬O¦b¤@Óª«¥óªºError¤èªk¤¤³Q¤Þµo¡A¸Ó¤èªk³Q½Õ¥În¤ñ½Õ¥Î«O¦s¦b¸ê®Æ®w¤¤ªºRIError±`¦¡n¦n¡C·íError¤èªk³Q°õ¦æ®É¡A°õ¦æªð¦^¨ìIJµo¾¹¡C¦ý¬O¡A¥Ñ©ópnErrorªºÈ¤´µM¬O¹s(¨S¦³§ïÅÜ)¡AIJµo¾¹¥N½X¤£ª¾¹Dµo¥Í¤F¿ù»~¡A¦]¦¹¥¦Ä~Äò°õ¦æ¡C³Ì²×µ²ªG¬O¡AIJµo¾¹¥i¯à³¡¥÷¥¢±Ñ¡C
³oùجO¤@Ó¨ãÅ骺¨Ò¤l¡C·íORDERS¹ï©óORDITEMS¨ã¦³¤@Ó¨î§R°£³W«h®É¡ACUSTOMER¹ï©óORDERS¨ã¦³¤@Ó¯ÅÁp§R°£³W«h¡C·í«eªºCUSTOMER°O¿ý¦³¨â±ø¬ÛÃöªºORDERS°O¿ý¡A²Ä¤@±ø¨S¦³ÃöÁpªºORDITEMS°O¿ý¡A²Ä¤G±ø¦³¤@±ø¬ÛÃöªºORDITEMS°O¿ý¡C·í§A§R°£CUSTOMER°O¿ý®É¡A§A·Q·|µo¥Í¤°»ò±¡ªp?§A·|±o¨ì¤@±øÄ²µo¥¢±Ñªº¿ù»~¸ê°T¡A¦ý§A·|µo²{CUSTOMER°O¿ýªº²Ä¤@±øORDERS°O¿ý¤w³Q§R°£¡C¶È²Ä¤G±øORDERS°O¿ýÁÙ¦s¦b¡A·íµM¡A²{¦b¥¦¦¨¬°¤@Ó¨S¦³¤÷°O¿ýªº°O¿ý¡C
(§A¥i¯à·|»{¬°³o¬O¤@Ó¤£¥i«äijªº¨Ò¤l¡A§Ú¦b¹ê»Ú¤¤½T¹êµo¥Í¤F³o¼Ëªº°ÝÃD¡C)
¸Ñ¨Mªº¿ìªk¬O¡A¥²¶·¦b¿ù»~³B²zµ{¦¡¤¤±NpnError³]¸m¬°«D¹sªºÈ;¦pªG§A¬d¬ÝSFMaintFormªºErrTriggerFailed¤èªk¥N½X¡A§A·|µo²{¥¦¥u°µ¤F³o¤@ÂI¡CµM¦Ó¡A¨º¼Ë°µ¨Ã¨S¦³§¹¥þ¸Ñ¨M³o¤@°ÝÃD¡GVFP¤Þ¥Î§¹¾ã©Ê(RI)¥Í¦¨¾¹¥Í¦¨ªºRIDelete©MRIUpdate¹Lµ{¤¤ªº¤@ÓBUG(§R°£©M§ó·s¤@Ó¤l°O¿ý)¤]¥²¶·§ï¥¿(°Ñ¨£¤U±ªºÃö©óRIDeleteªº¥N½X)¡C¦pªGpnError«D¹s¡A³o¨Ç±`¦¡³]¸mllRetValªºÈ(ªð¦^È)¬°.F.¡A¥H§i¶D¨ä¥L±`¦¡Ä²µo¥¢±Ñ¡CµM¦Ó¡A¥Ñ©óRIOpen±`¦¡³Q½Õ¥Î¨Ó¦b«D½w½Ä¤è¦¡¤U¥´¶}¤lªí¥HÀˬd»P¤÷ªí¬ÛÃöªº°O¿ý¡A¤U¤@¯ÅªºÄ²µo¾¹(¦p¡AÀˬd¤lªíªº¤lªí)¦b¥¼¹J¨ìunlock»y¥y®É¤£·|³Q±Ò°Ê¡A³o¥X²{¦bllRetVal³]¸m¤§«á¡C³o¼Ë¡A·í¸ÕµÛ§R°£©Î§ó·s®]°O¿ý(P¨ÏIJµo¿ù»~¸ê°T¥X²{ªº°O¿ý)®Éµo¥Íªº¿ù»~±N¤£·|³y¦¨llRetVal³Q³]¸m¬°.F.¡A¦]¦¹¸Óµ¥¯ÅªºÄ²µo¾¹¤£·|¥¢±Ñ(§Y¨Ï¥¦½T¹ê¥¢±Ñ¤F)¡C¸Ñ¨M³o¤@°ÝÃDªº¿ìªk¬O¶H¤U±¨º¼Ë¡A²¾°ÊllRetVal»y¥y¨ìunlock©R¥O¥H«á¡C¥Ñ©óRIDelete©MRIUpdate¬O´¶³qªº±`¦¡¡A§A¥i¥H±q¸ê®Æ®wªºÀx¦s¥N½X¤¤½Æ»s³o¨Ç¥N½X¡AÖß¶K¥¦Ì¨ì¸ê®Æ®wªºÀx¦s¥N½Xªºµ²§ô³¡¥÷(¦bRIµù¸}¦æ«á)¨Ã¦b³oùØ×§ï¡C±Ä¥Î³oºØ¤èªk¡A§A¤£¥²¦b¨C¦¸«·s¥Í¦¨RI¥N½X«á¡A³£¶i¦æ¬Û¦Pªº×§ï¡C
procedure RIDELETE
local llRetVal
llRetVal=.t.
IF (ISRLOCKED() and !deleted()) OR !RLOCK()
llRetVal=.F.
ELSE
IF !deleted()
DELETE
IF CURSORGETPROP('BUFFERING') > 1
=TABLEUPDATE()
ENDIF
*** °Å¤Á¤UÄѤ@¦æ...
* llRetVal=pnerror=0
ENDIF not already deleted
ENDIF
UNLOCK RECORD (RECNO())
*** ... §â¥¦Öß¶K¨ì³oùØ
llRetVal=pnerror=0
RETURN llRetVal
¹H¤ÏÄæ¦ì³W«h
¦bVFP 5(¥]¬A5.0a)¤¤ªº¨ç¼Æsys(2018)©Maerror()¤¤¦s¦b¤@ÓBUG¡A·í¤@ÓÄæ¦ì³W«h¹H¤Ï®É¡A¹ê»ÚªºÄæ¦ì¦W±N¤£¥i¥Î¡C¬Û¤Ï¡A§A±o¨ì¨âÓ¦r¦ê¤§¤@¡Gn»ò¬OÄæ¦ìªºRuleTextÄÝ©Ê(¦pªG¥¦¬O¶ñ¼g¤Fªº)¡An»ò¬O¤@Ó¤@¯ëªº¸ê°T"Äæ¦ìÅçÃÒ³W«h½Ä¬ð"¡C
«ç»ò·|¬O³o¼Ë?¨º»ò¡A«ç¼Ë¤~¯à¶H§A§Æ±æªº¨º¼Ë¡G¦b¸ÓÄæ¦ì¨S¦³RuleText®É¡AÅã¥Ü¤@±ø¸ê°T"½Ð¬°Äæ¦ì<Äæ¦ì¼ÐµP>¿é¤J¤@Ó¦XªkªºÈ"?°ÝÃD¬O¦pªG§A¤£ª¾¹D¨º¤@ÓÄæ¦ìªº³W«h³Q¹H¤Ï¡A§A¤S¦p¦óª¾¹D¥Î¨º¤@ÓÄæ¦ìªº¼ÐµP©O?°²¦p§A·Q³]¸mµJÂI¨ìµo¥Í¿ù»~ªºÄæ¦ìµM«áÅã¥Ü¿ù»~¸ê°T¡A§ó¥[¤è«K¥Î¤á×§ï¥X°ÝÃDªºÄæ¦ìªºÈ?°²¦p§A·Q§ïÅܨºÓ±±¨î¶µªºI¹ÒÃC¦â¡A«ç¼ËÅã¦Ó©ö¨£ªº§i¶D¥Î¤áþ¤@Äæ¦ìµo¥Í¤F¿ù»~©O?
¦bVFP 5.0(¤£¬O5.0a)¤¤¡An§ï¥¿³o¤@°ÝÃD¡A§ÚÌ»Ýn°µ¨â¥ó¨Æ¤¤ªº¤@¥ó¡G¦pªG³oÓ¦ê¬O"Äæ¦ìÅçÃÒ³W«h½Ä¬ð"¡A§Ú̱N±q¦ê¤¤«õ¥X¸ÓÄæ¦ì¡C¦pªG¨º¤£¬O¤@Ó¦ê¡A§ÚÌ¥²¶·¦b¸ê®Æ®w¤¤§ä¨ìµ¹¥XRuleTextÄݩʪºÄæ¦ì¡C©¯¹Bªº¬O¡A¦bVFP 5.0a¡A¤@Ó¥¼½sÀÉ¨ç¼Æaerror()¡A¥¦¥i¥H«Ø¥ß¤@Ó5Ó¤¸¯Àªº°}¦C¡A¨ä¤¤¥]§t¤FÄæ¦ì¸¹¡A§Q¥Î¥¦§ÚÌ¥i¥H§ä¨ì§ÚÌn§äªºÄæ¦ì¦W¡C
SFMaintForm.ErrFieldRuleFailed¤èªk³B²z³oºØbehavior;¥N½X¦p¤U¡G
local loObject¡A ;
lcAlias¡A ;
lcTable¡A ;
lcMessage¡A ;
lcField¡A ;
lnSpace1¡A ;
lnSpace2¡A ;
lnI¡A ;
lcText
* If the field rule was checked and failed because
* the user clicked on a button with the Cancel
* property set to .T. or if the button has an lCancel
* property (which is part of the SFCommandButton base
* class) and it's .T.¡A don't bother doing anything
* else¡C
loObject = sys(1270)
if lastkey() = 27 or (type('loObject') = 'O' and ;
type('loObject.lCancel') = 'L' and loObject.lCancel)
return .NULL.
endif lastkey() = 27 ...
with This
* Figure out which field failed¡C
lcAlias = alias(.aErrorInfo[.nLastError¡A ;
cnAERR_WORKAREA])
lcTable = cursorgetprop('SourceName'¡A lcAlias)
lcMessage = .aErrorInfo[.nLastError¡A cnAERR_MESSAGE]
lcField = lower(lcAlias + '.' + ;
field(.aErrorInfo[.nLastError¡A cnAERR_TRIGGER]¡A lcAlias))
* Display the error message and find the object whose
* ControlSource is the field¡C
messagebox(lcMessage¡A MB_ICONSTOP¡A _screen.Caption)
loObject = .FindControlSourceObject(lcField)
* Set the lFieldRuleFailed flag to .T.
.lFieldRuleFailed = .T.
endwith
return loObject
ErrFieldRuleFailedn°µªº²Ä¤@¥ó¨Æ¬OÀˬd¥Î¤á¬O§_³æÀ»¤Fªí³æ¤¤ªº"¨ú®ø"«ö¶s¡A¨Ã¸ÕµÛ³]¸mµJÂI¨ì¸Ó«ö¶s¡A¥H±Ò°Ê·í«e±±¨î¶µªºÄæ¦ìªºÅçÃÒ³W«h¡C¥Ñ©ó¦b¦¹±¡ªp¤U¡A¥¦¤£¥²¦AÅã¥Ü¿ù»~¸ê°T¡A¦]¦¹ErrFieldRuleFailed°£¦¹¤§¥~¤£°µ¥ô¦ó¨Æ±¡¡A²³æªð¦^¡C
¦pªG¥Î¤á¨S¦³¿ï¾Ü"¨ú®ø"¡AErrFieldRuleFailed«ü¥X¨º¤@Äæ¦ìµo¥Í¤F°ÝÃD¡A¥¦½Õ¥ÎFindControlSourceObject¤èªk¨Ó§ä¥Xªí³æ¤¤ªº¨º¤@¹ï¹³¬O¸j©w¨ì¸ÓÄæ¦ì¡C¦pªG§ä¨ì¸Óª«¥ó¡A¥¦ªð¦^¤@ӤޥΨ쪫¥ó¡A¦]¦¹HandleError¥i¥H³]¸mµJÂI¨ì¥¦¡C
ErrFieldRuleFailed¤]³]¸m¤@Ó¥slFieldRuleFailedªºªí³æÄݩʬ°.T.¡A¥¦¥i¥Î©ó·íÄæ¦ì³W«h¥¢±Ñ®É¡A±±¨î¶µªºValid¤èªk¨ÓÁ×§K±±¨î¶µ¥¢¥hµJÂI¡C»Ýn¥¦ªºì¦]¬O¦]¬°Äæ¦ìÅçÃÒ³W«h¹H¤Ïµ{¦¡¦b±±¨î¶µªºValid¤§«e³Q±Ò°Ê¡C·í¿ù»~³Q³B²z«á¡AValid¤èªk±Ò°Ê¡A¥¿±`¦aªð¦^.T.¡A¤¹³\±±¨î¶µ¥¢¥hµJÂI(§Y¨Ï¥¦¥]§t¤F¤@Ó¿ù»~ªºÈ)¡C¥H¤U¬OÁ×§K³o¤@±¡ªpªºSFTextBoxªºValid¤èªk¥N½X¡G
if type('Thisform.lFieldRuleFailed') = 'L' and ;
Thisform.lFieldRuleFailed
Thisform.lFieldRuleFailed = .F.
return 0
endif type('Thisform.lFieldRuleFailed') = 'L' ...
foxer¸ê®Æ¯¸ _________________ #############################
§Ö¼Ö¶ý«}¨t¦C©¯ºÖ¦v°t,³Ü¤Q¥þÂû´ö~ì¨Ó©¯ºÖ¨º»ò²³æ!!
¾Ç·|VFP¨Ï¥ÎªÌªÀ°Ïªº·j´M,Code¤~·|§ó¦³½ì~
############################# |
|
¦^³»ºÝ |
|
 |
Ruey
µù¥U®É¶¡: 2003-03-12 ¤å³¹: 1698 ¨Ó¦Û: tunglo
²Ä 5 ¼Ó
|
µoªí©ó: ¬P´Á¤é ¤K¤ë 24, 2003 10:46 am ¤å³¹¥DÃD: |
|
|
Visual FoxPro ¤¤ªº¿ù»~³B²z
(¤§¤)¨Ò¤l
§@ªÌ¡GDoug Hennig
ĶªÌ¡GRMH
¨Ò¤l
n¬d¬Ýexamples¬O¦p¦ó¦b³oÓ¿ù»~³B²z¾÷¨î¤¤³B²z¹w®Æ¤£¨ìªº¿ù»~©M³B²zªº²Ó¸`¡A¹B¦æ¥Ü¨ÒÀɤ¤ªºMYAPP.APP¡C±qÀÉ¥\¯àªí¤¤¿ï¾Ü"¿ù»~ªí³æ¤@"¨Ã³æÀ»"³o±N³y¦¨¤@Ó¿ù»~"«ö¶s¡C¸Ó«ö¶sªºClick¤èªk¥]§t¤F¨âÓ¿ù»~¡A¦]¦¹§A¦b²Ä¤@Ó¿ù»~¥X²{®Éªº¹ï¸Ü¤è¶ô¤¤¿ï¾ÜÄ~Äò®É¡A²Ä¤GÓ¿ù»~±N¥X²{¨Ã¥B¿ù»~¹ï¸Ü¤è¶ô±N¦A¦¸¥X²{¡C¦pªG³o¦¸§A¿ï¾Ü¨ú®ø¡A²Ä¤GÓ¿ù»~¤£·|¥X²{¡A¦ýµ{¦¡°±¯d¦b¹B¦æª¬ºA¥Bªí³æ¤´µM¬O¥´¶}ªº¡C¿ï¾Ü°h¥X¨Ó°®²b¦a°h¥Xµ{¦¡¡A«ì´_¥\¯àªí±ø¡AÃö³¬ªí³æ¡A¨Ã«·s³]¸mÀô¹Ò¨ì¹B¦æ«eªºª¬ºA¡C«¸Õ¡A·íµM¡A³y¦¨¬Û¦Pªº¿ù»~¸ê°T¥X²{¡A¥Ñ©ó¸Ó°ÝÃD¤w¸g§ï¥¿¡C
n¬d¬Ý¯S®íªº¿ù»~¬O¦p¦ó³B²zªº¡A±qÀÉ¥\¯àªí¤¤¿ï¾ÜCustomerªí³æ¡C±qÀÉ¥\¯àªí¤¤¿ï¾Ü·s«Ø¡A¦bCustomer ID¤¤¿é¤J"ALFKI"¡AµM«á±qÀÉ¥\¯àªí¤¤¿ï¾Ü¿ï¾Ü«O¦s¡C§A·|±o¤@±ø¿ù»~¸ê°T"Customer ID ¤w¸g¦s¦b";¥Ñ©ó¸ÓÄæ¦ì¬O¸Óªíªº¥DÃöÁä¦r¨Ã¥B¤w¸gªº¤@Ó¦W¬°ALFKIªº°O¿ý¦s¦b©ó¸ÓÄæ¦ì¤¤¡A¤@±ø¥DÃöÁä¦r¹H¤Ïªº¿ù»~±Nµo¥Í¨Ã±N¶H®i¥Üªº¨º¼Ë³Q³B²z¡Cn¬d¬ÝÄæ¦ì³W«h¥¢±Ñªºµ²ªG¡A¦bCompanyÄæ¦ì¤¤¿é¤J"Test";¸ÓÄæ¦ì¦³¤@Ó³W«hÁ×§K¿é¤J¸ÓÈ¡C·í§A·QÂ÷¶}¸ÓÄæ¦ì®É¡A§A·|¬Ý¨ìÄæ¦ì³W«h¥¢±Ñªº¿ù»~¸ê°T¡C²MªÅCompanyÄæ¦ì¡C²¾¹B´å¼Ð¨ìCityÄæ¦ì¨Ã¿é¤J"Regina"¡AµM«á±qÀÉ¥\¯àªí¤¤¿ï¾Ü«O¦s¡C§A·|±o¨ì¤@±øªí³W«h¥¢±Ñªº¿ù»~¸ê°T;¸Óªí¦³¤@Ó³W«h©Úµ´±µ¨üCityÄæ¦ìªºÈ¬°"Regina"(³Ì«á¡A½Ö·Q¥Í¬¡¦b³oùØ)¡C±qÀÉ¥\¯àªí¤¤¿ï¾ÜºM¾P¨Ó²¾¥h·s¼W¥[ªº°O¿ý¡C
n¬d¬Ý·í"¨ú®ø"«ö¶s³Q«ö¤U®É¡ASFMaintForm¬O¦p¦óÁ×§K¤@ÓÄæ¦ì³W«h¥¢±Ñ¸ê°T¡A¦bCompanyÄæ¦ì¤W¿é¤J"test"¨Ã¦bÂ÷¶}¸ÓÄæ¦ì«e³æÀ»"ºM¾P"«ö¶s¡C
n¬d¬ÝDE°ÝÃD¬O«ç¼Ë³B²zªº¡A¦b¤å¥óºÞ²z¾¹¤¤±NCUSTOMER.DBF§ï¦W¬°CUST.DBF¡A¹B¦æMYAPP¨Ã¥´¶}Customerªí³æ¡Cª`·N¦b§A¦^À³©Ò¥X²{ªº¿ù»~¸ê°T«á¡Aªí³æÃö³¬¤F¡C±NCUST.DBFªº¦W¦r§ï¦^¨ìCUSTOMER.DBF¡C
n¬d¬ÝIJµo¾¹¥¢±Ñ°ÝÃD¡A°h¥XÀ³¥Îµ{¦¡¡A¥´¶}TESTDATA¸ê®Æ®w¡A¬yÄýCUST_ORDERSµø¹Ï¡C¸Óµø¹ÏÅã¥ÜªíCUSTOMER¡AORDERS¡A©MORDITEMS¤¤ªº°O¿ý¸ê°T¡Cª`·NALFKI«È¤á¦³¤@¨Çq³f¦ý²Ä¤@Ó(ORDER_ID=10062)¨S¦³q³f²Ó¸`(LINE_NO¬O.NULL.)¡C¹B¦æMYAPP¡A¥´¶}Customerªí³æ¡A±qÀÉ¥\¯àªí¤¤¿ï¾Ü§R°£¡A·í½T»{µøµ¡¥X²{®É¿ï¾Ü½T»{½T»{§R°£¡Cª`·NIJµo¥¢±Ñ¸ê°T±N¥X²{;³o¬O¥Ñ©ó¦bªíORDERS»PORDITEMS¶¡¦s¦b¨î§R°£ªº³W«h¡CµM¦Ó¡Aª`·N¦h¦¸±o¨ì³o¤@¸ê°T¡A¨Ã¦b³Ì«á¤@¦¸¤ÏÀ³«á¡AALFKI«È¤á³Q§R°£¤F¡C°h¥Xµ{¦¡¡A¥´¶}CUSTOMERS¡Aª`·NALFKI¯uªº¤w¸g³Q§R°£¤F¡C²{¦b
USE ORDERS ORDER CUST_ID
¨Ãª`·N«Ü¦h«È¤áALFKIªºq³æ°O¿ý¤´µM¦s¦b;·íµM¡A¥¦Ì³£¦¨¤F¨S¦³¤÷°O¿ýªº©t°O¿ý¡C
n×´_³o¤@°ÝÃD¡A«ö¥H¤U¨BÆJ¡G
• CLOSE ALL
• ¸ÑÀ£DATA.ZIP(§Ú̧˶äF¸ê®Æ¡A¦]¦¹§ÚÌ»Ýn«ì´_¥¦Ì)¡C
• OPEN DATABASE TESTDATA
• MODIFY PROCEDURES
• ¶H«e±´yzªº¨º¼Ë¡A±NRIDelete¹Lµ{¤¤ªºllRetVal²¾¨ìUNLOCK»y¥y«á¡C«O¦s¨ÃÃö³¬¥N½Xµøµ¡¡C
• MODIFY PROJECT MYAPP
• ¥´¶}Ãþ®wSFForms¤¤ªºSFMaintFormÃþ¡A¶i¤JErrTriggerFailed¤èªkªº¥N½Xµøµ¡¡A¨ì¥N½X§À³¡¡A¥h±¼pnErrorªºª`ÄÀ¡C¦sÀɨÃÃö³¬¥N½Xµøµ¡¡C
• ««ØMYAPP¨Ã¹B¦æ¥¦¡C
• ¥´¶}Customerªí³æ¡A±qÀÉ¥\¯àªí¤¤¿ï¾Ü§R°£¡A·í³Q¸ß°Ý½T»{§R°£®É¿ï¾Ü½T»{½T»{§R°£¡C
¦¹®É¡A§A·|±o¨ì¤@±ø³æ¤@ªºÄ²µo¾¹¥¢±Ñ¸ê°T¡A¨Ã¥BALFKI«È¤á¥ôµM¦s¦b¡C¿ù»~³Q±±¨î¤F!
nÀˬdªº¨ä¥LªF¦è¡G
• n¬d¬ÝSFErrorMgr¬O¦p¦óµn¿ý¿ù»~ªº¡A¥´¶}ERRORLOGªí¨Ã¬yÄý¥¦¡C¯S§Oª`·NMEMVARSÄæ¦ì;¥¦¥]§t¤Fµo¥Í¿ù»~®É¦b½Õ¥Î°ïÅ|¤Wªº¨C¤@Ó¹Lµ{¤¤ªº¨C¤@ÓÅܼƪºÈ¡C
• ×§ïAPPLIC.INI¤å¥ó¤¤ªºDeveloper¬°Yes¡C¸ÓȳQ¹Lµ{STARTUP.PRG¥Î©ó³]¸moErrorªºlDeveloperÄݩʡC¥´¶}¸ê·½ºÞ²z¾¹¨Ã«ö¤UF5(³o¬O¥²nªº¡A³o¼ËVFP¤~ª¾¹DINIÀɳQ×§ï¤F)¡AµM«á¹B¦æMYAPP¡C±qÀÉ¥\¯àªí¿ï¾Ü"¿ù»~ªí³æ1"¨Ã³æÀ»ÀÉÀY«ö¶s¡Cª`·N¤@Ó½Õ¸Õ¿ï¶µ¥X²{¦b¿ù»~¹ï¸Ü¤è¶ô¤¤¡C³o¹ï©ó½Õ¸Õ¤@Ó¹B¦æ¤¤ªºµ{¦¡¨Ó»¡¬O¯u¥¿¦³¥Îªº¡C·íµM¡A¸òÂܵøµ¡Åã¥ÜSFErrorMgrÃþªº¬OErrorHandler¤èªk¥N½X¡A¥Ñ©ó¨º¬OSET STEP ON©R¥O°õ¦æªº¦a¤è¡Cnªð¦^¨ì¯u¥¿³y¦¨¿ù»~ªº¥N½X¤¤¡A§A¥²¶·¬°¿ù»~³B²zÃ줤ªº¨C¤@±`¦¡³æÀ»Debugger ªº¤u¨ã±ø¤¤ªº¸õ¥X«ö¶s¤@¦¸¡C
• ¦b"¿ù»~ªí³æ1"¤¤ªº"³o±N³yP¤@Ó¿ù»~¦ý¤£·|µo¥Í¤°»ò"«ö¶s¥¿¶H¥¦©Ò»¡ªº¨º¼Ë°µ¡G³æÀ»¥¦¤£·|µo¥Í¤°»ò¡C¦pªG§A¬d¬Ý¥¦ªºClick¤èªk¡A¬Ý°_¨Ó·|¥O¤HÅå§r¡A¦]¬°¦b¨ä¤¤¦³¨âÓ¿ù»~¡CµM¦Ó¡A¬d¬ÝError¤èªk¨Ãª`·N»P¨ä¥Lª«¥ó¤£¦Pªº¦a¤è¡A¥¦ª½±µ½Õ¥Î¨ä¤÷®e¾¹ªºError¤èªk¡C³o¬O¤@Ó°ÝÃD¡G¸Ó«ö¶s¬O©ñ¸m¦b¤@ÓPageFrameªº¶±¤¤¡A¨Ã¥B¸Ó¶¬O¤@ÓVFPªº°òÃþ¶¡A¥¦¨S¦³Error¤èªk¥N½X¡A³o·N¨ýµÛ·í¤@Ó¿ù»~¥X²{®É¤°»ò¤]¤£·|µo¥Í¡C´N¶HON ERROR*¤@¼Ë¡A³o¬O¤@ӨϧAªºµ{¦¡¤£¥X²{¿ù»~¦í³Bªº¦n¤èªk¡C¤£¬O¨S¦³¿ù»~¡A¥u¬O¤£Åã¥Ü¿ù»~¸ê°T¡C³o´N¬O¬°¤°»ò©Ò¦³SFCTRLS.VCX¤¤ªº°òÃþn¦V¤W¯Å®e¾¹Ãþ¬d§äª½¨ì§ä¨ì²Ä¤@Ө㦳Error¤èªk¥N½XªºÃþ¡C
¦h¼Ëªº¿ù»~¸ê°T
³oùجO¤@¨ÇÃö©óVFP¿ù»~³B²z®É¡A§AÀ³ª¾¹DªºªF¦è¡C
• ¦bVFP 6¥H«eªºª©¥»¤¤¡AVFP¦Û°Ê¦øªA¾¹¤£¯à¾A·í¦aªð¦^¿ù»~±ø¥ó¨ì¥¦ªº½Õ¥Îµ{¦¡¡C¥¦Ì³Qªþ¥[ªºcomreturnerror()¨ç¼Æ×§ï¤F¡C¸Ó¨ç¼Æ²¾°ÊCOM¨Ò¥~µ²ºc¥Î¿ù»~µo¥Í¸ê°T¡C¥¦±µ¨ü¨âӰѼơGcExceptionSource¡A¦øªA¾¹ªº¦W¦r¡A©McExceptionText¡A§A·Qªð¦^ªº¸ê°T¡CMYAPP.APP¤¤ªºform1½Õ¥Î¦W¬°MyServerªº¦Û°ÊªA°Èµ{¦¡Test()¤èªkºt¥Ü¤F³o¤@ÂI(MyServer±M®×¥]§t¦bsampleÀɤ¤)¡C
• ¦pªGtype()¦b¿ù»~³B²zÃ줤ªº¥ô¦ó¦a¤è³Q¨Ï¥Î¡A§A¤£·|Á`¬O±o¨ì¥¿½Tªº¿ù»~¸ê°T¡C²z¥Ñ¬Otype()¨Ï¥Î¤F¬Y¨ÇVFPªº¿ù»~³B²z¤º®Ö¡A§@¬°µ²ªG¡A·í³Qtype()®§ÀË´úªºÅܼƩÎÄݩʤ£¦s¦b®É¡Amessage()ªº¤º®e¥i¯à³Q½Æ¼g¡C³o´N¬O¬°¤°»ò¦³®É§Aªº¿ù»~³B²zµ{¦¡·|³ø§i"Åܼƥ¼§ä¨ì"¸ê°T¡C¦bVFP 98¤¤¡AºÉ¥i¯à¦a¨Ï¥Îvartype();¥¦¤ñtype()§ó§Ö¥BÁ×§K¤F¥H¤W°ÝÃD¡C
• ¦bVFP 5¤¤¡A·í¸j©w±±¨î¶µªº¸ê®Æ·½Äæ¦ìªºÅçÃÒ³W«h¹H¤Ï®É¸Ó±±¨î¶µªºError¤èªk³Q½Õ¥Î¡C³o¤¹³\§A±±¨îÅã¥Ü¤°»ò¼Ëªº¿ù»~¸ê°T©M«ç¼ËÅã¥Ü¥¦Ì¡C¦bVFP 3¤¤¡A³o¨Ç¿ù»~¬O¤£¥i®·®»;VFP¾A·í¦a¬°Äæ¦ìÅã¥ÜRule¤å¥»(YRule¤å¥»¬°ªÅ¡A«hÅã¥Ü¤@ÓÃø¬Ýªº¤å¦r¸ê°T)¦b¤@Ó§A¤£¯à±±¨îªºmessagebox()¹ï¸Ü¤è¶ô¤¤¡C
• ¾¨ºÞ§@¬°local©w¸qªºÅܼƦb©w¸q¥¦ªº¹Lµ{¥H¥~¬O¤£¥i¨£ªº¡A¦ýlist memory©R¥O¥i¥H¬Ý¨£½Õ¥Î°ïÅ|¤¤¥þ³¡±`¦¡¤¤©w¸qªº¥þ³¡ÅܼơC³o¬O¤@¥ó¦n¨Æ±¡¡A¦]¬°¥¦¤¹³\§A¦bµo¥Í¿ù»~®É¡A¨ú±o¥þ³¡Åܼƪº¤@Ó¸ê°T¨Ã±N¨äµn¿ý¨ì¤@ÓÀÉ¡CSFErrorMgrªºLogError¤èªk®i¥Ü¤F«ç¼Ë°µ¡C
• list status©R¥O¹ï¿ù»~³B²zªºÀ°§U¨Ã¤£¬O«Ü¤j¡G¥¦¥u¯à¬Ý¨£·í«e¸ê®Æ·|¸Ü°Ï¤¤ªºªF¦è(¨Ò¦p¥´¶}ªºªí©MSET©R¥Oªº³]¸m)¡A¦]¦¹¡A¦pªG¿ù»~³B²zµ{¦¡¬O¦bÀq»{¸ê®Æ¤u§@´Á¡A¥¦¤£¯àµo²{¨p¦³¸ê®Æ¤u§@´Á¤¤ªºªí³æµo¥Íªº¿ù»~¡C¦pªG³o¹ï§A«Ü«n¡A§A¥i¥H¦b¨Ï¥Î¸Ó©R¥O«eÂà´«¨ìªí³æªº¸ê®Æ¤u§@´Á©Î§A¥i¥H¬£¥ÍSFErrorMgrªº¤@Ó¤lÃþ¶i¤Jªí³æªºoErrorÄݩʡA³o¼Ë§@¬°ªí³æ´N³£¦b¬Û¦Pªº¸ê®Æ¤u§@´Á¤F¡C
• ¥X©ó©Ê¯à¤è±ªºì¦]¡A·í¿ù»~µo¥Í®É¡A§A¥i¯à¤£·Q¤@¦¸¤@¨B¦a½Õ¥Î¤÷Ãþªº¥N½X¡A¦]¦¹§A¥i¥Hª½±µ±q¤@Óª«¥óÂà¸õ¨ìªí³æ¯ÅªºError¤èªk©ÎSFErrorMgr.ErrorHandler¡C§Úªº·N¨£¬O¡Aµo¥Í¿ù»~®É¡A©Ê¯à¤£¬O¦Ò¼{¦]¯À¡A¦]¦¹§Ú¦b¥»¤å¤¤«O«ù¤FÃþ³]p²M´·©M±ø²z¡C
• error©R¥O¬O¦³½ìªº¡G¥¦P¨Ï¥Î¤@Ó¿ù»~³QIJµo¡C¦pªG§A·Q¹³VFP¤@¼Ë³B²z¬Y¨ÇÃþ«¬ªº"³n"¿ù»~®É¡A¨Ï¥Î¥¦¬O«Ü¤è«Kªº¡C¨Ò¦p¡A¦pªGfile()ªð¦^¤F.F.«ü¥XÀɤ£¦s¦b¡A§A¥i¥H¨Ï¥Îerror©R¥O±j¨î¿ù»~³B²z¾¹±Ò°Ê³o¼Ë§A¥i¥H±o¨ì¤@¯ë¿ù»~ªA°È(µn¿ý¡AÅã¥Ü¡Aµ¥)¡C§ÚÁͦV©ó¾¨¶q¤Ö¥Î³oºØ¤èªk;²¦³º¡A·í§A¥¿¦b³B²z¤@Óµw¿ù»~®É¡AÁÙ·|¨ü¨ì³n¿ù»~Àˬdªº¤zÂZ¡C¦P®É¡A³oÁÙ¨ú¨M©ó§A¦b¨ºùبϥÎerror©R¥O¡A§A¥i¯à¤£·|Àò±o¥¿½Tªº¤èªk¦WºÙ©M¦æ¸¹¸ê°T¡A¦]¬°¥¦Ì±N¤Ï¬Merror©R¥O¬O¦b¨ºùسQ¨Ï¥Î¦Ó¤£¬O§A¦b¨ºùصo²{ªº°ÝÃD¡C
• ·íª«¥ó¤èªk½Õ¥Îªºµ{¦¡µo¥Í¿ù»~®É¡Aª«¥óªºError¤èªk¥ý©óon error±Ò°Ê¡C³o·N¨ýµÛ¥i¥H¦b½sµ{¤¤¥Î¨âºØ¤£¦Pªº¾÷¨î¨Ó³B²z¤@Ó¿ù»~¡A³on¬Ýµ{¦¡¬O³Q¦p¦ó½Õ¥Îªº¡C³o¼Ë¡A¦b½s½X¤¤ªº¿ù»~³B²z¤£¶H¦bª«¥ó¤¤¨º»ò²³æ¡C³o¬O§â¥¦Ì±qPRG®w¤¤²¾¨ìª«¥ó®w¤¤ªº¥t¤@Ó²z¥Ñ¡C
• ¥H¤WÆ[ÂIÁÙ¦³¥t¤@Ó¦³½ìªº¤è±¡G¦pªG§Aªºread events»y¥y¦b¤@Ó¥þ§½ª«¥óªº¤èªk¤¤(¨Ò¦p¤@Óapplicationª«¥ó)¡A¸Óª«¥óªºError¤èªkªº®ÄªG´N¬Û·í©ó¤@Ó¥þ§½¿ù»~³B²z¾¹¡A¦]¬°¸Óª«¥óÁ`¬O¦b½Õ¥Î°ïÅ|¤W¡C§A¥i¥H¥Îon errorµ²§ô³oºØ±¡ªp¡A³o¼Ë¥¦±N¥u³B²z¤£±qª«¥ó¤¤½Õ¥Îªº¡APRG¥N½X¤¤ªº¿ù»~¡C
• §A¤£¯à¥¿±`¦a®·®»¥H¤U±¡ªp¡G·í¥Î¤á¦bTextBox¤¤¿é¤J¤@ÓµL®Äªº¤é´ÁÈ®É;VFPÅã¥Ü"Invalid Date"¨Ã¤£·|±Ò°Ê¸Ó±±¨î¶µªºValid¤èªk¡C§A¥i¥H¥Îset notify off©R¥OÃö³¬"Invalid Date"¸ê°T¡A¦ý¬O§A¦pªG·Q±Ò°Ê±±¨î¶µªºValid¤èªk(¨Ò¦p¡Anµ¹¥X¤@±ø¤£¦Pªº¸ê°T©Î±a¥X¤é¾ä±±¨î¶µ)¡A§A¥²¶·³]¸m±±¨î¶µªºStrictDateEntryÄݩʬ°0¡C³oùØnª`·Nªº¬O¡G¦pªG¥Î¤á¿é¤J¤F¤£¥i¥Îªº¤é´Á¡A¥¦±N·|³Q¸m¬°ªÅ®æ¡A¦]¦¹¦pªG§A·Q«·sÅã¥Ü¶ñ¤JªºÈ¡A§A¥²¶·¦b±±¨î¶µªºGotFocus¤èªk¤¤«O¦s¥¦¨Ã¦bValid¤¤«ì´_¥¦¡C
• on error¤£®·®»³øªí¤¤ªº©M¥\¯àªí©R¥Oªºskip for¤l¥y¤¤ªº¿ù»~;³o¨Ç¿ù»~¬O¤£¥i®·®»ªº¡A¦]¦¹½T«H§Aªº³øªí©M¥\¯àªí¤¤ªºskip for¤l¥y¤¤ªº±ø¥ó¹Bºâ¦¡¬O¸g¹L¹ý©³´ú¸Õªº¡Cn½T»{³o¤@ÂI¡A½s¿èAPPLIC.INI¨Ã³]¸mNoSuchVariable¤J¤f¬°No¡C¥´¶}Windows Explorer¨Ã«ö¤UF5(³o¬O¥²nªº¡A³o¼ËVFP·|µo²{INIÀɤw¸g³Q×§ï)¡AµM«á¹B¦æMYAPP¡C¦b¥\¯àªí¤W³æÀ»¡A¨Ãª`·NVFP¿ù»~ªº¥X²{¡C
µ²½×
¦b¥»¤å¤¤¡A±´°Q¤F¨âºØ³Ì¨Î¿ù»~³B²z¤è®×(§½³¡³B²z¤j¦h¼Æ¿ù»~¤Î³Ñ¤Uªº¥Ñ¥þ§½³B²z)¡C¦¹¤è®×¤w¦¨¥\¦a¹B¥Î¤_¤@¨t¦CªºÀ³¥Îµ{¦¡¤¤¡A¾¨ºÞ§Ṳ́´¦b¤£Â_¦a§¹µ½¥¦¡C§Ú§Æ±æ§A¯à§ä¨ì¹ï§A¦³¥Îªº¦a¤è¡C¦pªG§A¹ï¥¦¦³¥ô¦ó§ï¶i©Î¦³¥ô¦ó§ï¶i«ØÄ³¡A½Ð³qª¾§Ú¡C
·PÁÂ
§Ún·PÁÂ¥H¤Uª½±µ©Î¶¡±µ¹ï¥»¤åµ¹©óÀ°§Uªº¤H¡G
Darrel Miller¡A Brad Schulz¡A and Lisa Slater Nicholls.
Copyright 1998 Doug Hennig. All Rights Reserved
Doug Hennig
Partner
Stonefield Systems Group Inc.
1112 Winnipeg Street¡A Suite 200
Regina¡A SK Canada S4R 1J6
Phone¡G (306) 586-3341
Fax¡G (306) 586-5080
CompuServe¡G 75156¡A2326
Internet¡G dhennig@stonefield.com
World Wide Web¡G www.stonefield.com
foxer¸ê®Æ¯¸ _________________ #############################
§Ö¼Ö¶ý«}¨t¦C©¯ºÖ¦v°t,³Ü¤Q¥þÂû´ö~ì¨Ó©¯ºÖ¨º»ò²³æ!!
¾Ç·|VFP¨Ï¥ÎªÌªÀ°Ïªº·j´M,Code¤~·|§ó¦³½ì~
############################# |
|
¦^³»ºÝ |
|
 |
Ruey
µù¥U®É¶¡: 2003-03-12 ¤å³¹: 1698 ¨Ó¦Û: tunglo
²Ä 6 ¼Ó
|
µoªí©ó: ¬P´Á¤é ¤K¤ë 24, 2003 10:48 am ¤å³¹¥DÃD: |
|
|
§@ªÌ¡GDoug Hennig
ĶªÌ¡GRMH
ĶªÌ¤åªþ¥ó _________________ #############################
§Ö¼Ö¶ý«}¨t¦C©¯ºÖ¦v°t,³Ü¤Q¥þÂû´ö~ì¨Ó©¯ºÖ¨º»ò²³æ!!
¾Ç·|VFP¨Ï¥ÎªÌªÀ°Ïªº·j´M,Code¤~·|§ó¦³½ì~
############################# |
|
¦^³»ºÝ |
|
 |
|