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

Error¿ù»~³B²zµ{¦¡½X(Âà¶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´Á¤­ ¤K¤ë 29, 2003 4:42 pm    ¤å³¹¥DÃD: Error¿ù»~³B²zµ{¦¡½X(Âà¶K) ¤Þ¨¥¦^ÂÐ

¨Ó·½:myf1ź¶Æ¤½¥D

*-- ³o­Ó¹Lµ{¥D­n³B²zÃþ©Îª«¥óµo¥Íªºª«¥ó¨Æ¥ó
*-- ¥u¯à±N¤èªk¥Î©ó Error ¨Æ¥ó
*--
*!* IF Type("ThisForm.Caption") = "C"
*!* MyErrorEven( m.nError , m.cMethod , m.nLine , MESSAGE( ), MESSAGE(1) , PROGRAM() , This , ThisForm.Caption )
*!* Else
*!* MyErrorEven( m.nError , m.cMethod , m.nLine , MESSAGE( ), MESSAGE(1) , PROGRAM() , This , "<¥¼ª¾>" )
*!* Endi
PROC MyErrorEven
LPARA lnErrorNo , lcMethod , lnLineNo , lcMessage , lcMessage1 , lcProgram , loErrorObj , lcCaption
*-- Àˬd¬O§_ÄÝ©ó¤@¯ë©Ê¿ù»~
IF NOT MyCheckSmallErrorNo( m.lnErrorNo )
*--
*-- ¹B¦æ®É¿ù»~¡AÅã¥Ü²µu¸ê°T
IF m.lnLineNo = 0
Messagebox( ;
'(' + LTRIM( STR(m.lnErrorNo) ) + ") " + ;
m.lcCaption + " - " + ;
Lower(JUSTSTEM(m.lcProgram)) + "." + lcMethod + " " + ;
m.lcMessage + " " + m.lcMessage1 ;
, 64 , _Screen.Caption )
ENDI
*--
*-- ½Õ¸Õ´Á¿ù»~¡A©Î±j¨îÅã¥Ü¸Ô²Ó¸ê°T
IF (m.lnLineNo > 0) OR ( VfpGetKeyState( "CTRL" ) AND VfpGetKeyState( "ALT" ) )
= Messagebox(;
'lnErrorNo: ' + LTRIM( STR(m.lnErrorNo) ) + SPACE(100) + CHR(13) + ;
'Methods: ' + lcMethod + CHR(13) + ;
'lnLineNo: ' + LTRIM( STR(m.lnLineNo) ) + CHR(13) + ;
'Message(): ' + m.lcMessage + CHR(13) + ;
'Message(1): ' + m.lcMessage1 + CHR(13) + ;
'Program: ' + m.lcProgram + CHR(13) + ;
'ObjName: ' + loErrorObj.Name + CHR(13) + ;
'ClassLibrary: ' + loErrorObj.ClassLibrary + CHR(13) + ;
'FormCaption: ' + m.lcCaption ;
, 64 , _Screen.Caption )
ENDI
*-- Àˬd¬O§_ÄY­«¿ù»~
MyCheckBigErrorNo( m.lnErrorNo )
ENDI
* PROGRAM([nLevel]) ªð¦^·í«e¥¿¦b°õ¦æªºµ{¦¡ªº¦WºÙ¡A©ÎªÌ¿ù»~µo¥Í®É©Ò°õ¦æªºµ{¦¡ªº¦WºÙ¡C
* MESSAGE([1]) ¥H¦r¦ê§Î¦¡ªð¦^·í«e¿ù»~¸ê°T¡A©ÎªÌªð¦^¾É­P³o­Ó¿ù»~ªºµ{¦¡¦C¤º®e¡C
ENDPROC
* My_Error
* ³o­Ó¹Lµ{¥D­n¦b¬O on error ±`¦¡
* ¤èªk¤@(±ÀÂË)¡GON ERROR DO My_Error WITH ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM(), LINENO()
* ¤èªk¤G(½Õ¸Õ)¡GON ERROR My_Error ( ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM(), LINENO() )
* ----------------------------------------
* ³o­Ó¹Lµ{¥D­n¦b¦³¤@­ÓµLªk¹w´úªº¿ù»~µo¥Í®Éª½±µ°h¥X VFP
PROC My_Error
* ON ERROR DO My_Error WITH ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM(), LINENO()
* ON ERROR My_Error ( ERROR( ), MESSAGE( ), MESSAGE(1), PROGRAM(), LINENO() )
LPARA lnError , lcMessage1 , lcMessage2 , lcProgram , lnLineNo
*--
*-- ¥H¤U¬O©l²×¥i¥H©¿²¤¤£°O¿ýªº¿ù»~
IF MyCheckSmallErrorNo( m.lnError )
= Messagebox("µ{¦¡¸òÂÜ°O¿ý¸¹¡G" + TRANSFORM(m.lnError) , 0 , _Screen.Caption )
ELSE
PRIVATE lcErrorSafe , llErrorQuit , lcErrorTextmerge
Local lcErrorSafe , llErrorQuit , lcErrorTextmerge
*-- °O¿ý¤§«eªºÀô¹Ò
lcErrorSafe = SET('SAFE')
lcErrorTextmerge = SET("TEXTMERGE")
llErrorQuit = .T.
*-- §ïÅÜÀô¹Ò¥H¥¿±`¤u§@
SET TEXTMERGE DELIMITERS TO
SET TEXTMERGE ON
SET TEXTMERGE TO DEBUGLOG.TXT ADDITIVE NOSHOW
SET SAFE OFF
*-----------------------------------------
\¤£¥i¹wª¾ªº¿ù»~ ...
\-------------------------------------------------------
\<<DATE( )>> <<TIME( )>> ¶}©l´yø¸Ó¿ù»~
\µ{¦¡¼ÐÃD: <<_Screen.Caption>>
\µ{¦¡¶}µoª©¥»: <<VERSION(1)>>
\ISUNIX: <<_UNIX>>
\ISWINDOWS: <<_WINDOWS>>
\¥Dµ¡¤f¼e«×: <<_Screen.Width>>
\¥Dµ¡¤f°ª«×: <<_Screen.Height>>
\¥Dµ¡¤f¥ªÃä¶Z: <<_Screen.Left>>
\¥Dµ¡¤f¤WÃä¶Z: <<_Screen.Top>>
DO CASE
CASE _Screen.WindowState = 0
\µøµ¡ª¬ºA: ´¶³q
CASE _Screen.WindowState = 1
\µøµ¡ª¬ºA: ³Ì¤p¤Æ
CASE _Screen.WindowState = 2
\µøµ¡ª¬ºA: ³Ì¤j¤Æ
ENDC
\µ¡¤f¥iµø: <>
\µøµ¡¶°¦X¼Æ: <<_Screen.FormCount>>
\¾Þ§@­û Comment: <<_Screen.Comment>>
\¾Þ§@­ûÃѧO Tag KEY: <<_Screen.Tag>>
\ºô¸ô¾÷¾¹¸ê°T: <<SYS(0)>>
\VFP ±Ò°Ê¥Ø¿ý: <<SYS(2004)>>
\VFP ¥Ø¿ýºÏºÐªÅ¶¡: <>M
\°õ¦æµ{¦¡: <<JUSTFNAME(SYS(16,1))>>
\°õ¦æµ{¦¡©Ò¦b¥Ø¿ý: <<JUSTPATH(SYS(16,1))>>
\°õ¦æµ{¦¡©Ò¦b¥Ø¿ýºÏºÐªÅ¶¡: <>M
\Àq»{¥Ø¿ý: <<SYS(5)>><<SYS(2003)>>
\Àq»{¥Ø¿ýºÏºÐªÅ¶¡: <>M
\ÀÉ·j´M¸ô®|: <<SET('PATH')>>
\¨t²ÎÁ{®É¥Ø¿ý: <<SYS(2023)>>
\Á{®É¥Ø¿ýºÏºÐªÅ¶¡: <>M
\µêÀÀ°O¾ÐÅé¦À¤j¤p: <>M
\¸ê·½ÀÉ®×: <<SYS(2005)>>
\¥¿¦b¨Ï¥Îªº¤u§@°Ï: <<Alias()>>
\¬¡°ÊÄæ¦ì: <<VARREAD()>>
IF Type('_Screen.ActiveForm.Name') = 'C'
\¬¡°Êªí³æ: <<_Screen.ActiveForm.Name>>
\ªí³æ¼ÐÃD: <<_Screen.ActiveForm.Caption>>
\ªí³æ°òÃþ: <<_Screen.ActiveForm.BaseClass>>
\ªí³æ¬£¥Í: <<_Screen.ActiveForm.Class>>
\ªí³æ¬£¥Í®w: <<_Screen.ActiveForm.ClassLibrary>>
\ªí³æ¦ì¸m: <<SYS(1271, _Screen.ActiveForm)>>
Else
\µL¬¡°Êªí³æ
Endi
IF Type('_Screen.ActiveForm.ActiveControl') = 'O'
\¬¡°Ê±±¨î: <<_Screen.ActiveForm.ActiveControl.Name>>
IF Type('_Screen.ActiveForm.ActiveControl.Caption') = 'C'
\±±¨î¼ÐÃD: <<_Screen.ActiveForm.ActiveControl.Caption>>
Endi
\±±¨î¶µ°òÃþ: <<_Screen.ActiveForm.ActiveControl.BaseClass>>
\±±¨î¶µ¬£¥Í: <<_Screen.ActiveForm.ActiveControl.Class>>
\±±¨î¶µ¬£¥Í®w: <<_Screen.ActiveForm.ActiveControl.ClassLibrary>>
\±±¨î¶µ¦ì¸m: <<SYS(1271, _Screen.ActiveForm.ActiveControl)>>
Else
\µL¬¡°Ê±±¨î
Endi
*-- ­«ÂI¼Ð¥X
\***********************
\¿ù»~¥N¸¹: <<m.lnError>>
\©Ò¦b¦æ¸¹: <<m.lnLineNo>>
\¿ù»~¸ê°T: <<m.lcMessage1>>
\¿ù»~¥N½X: <<m.lcMessage2>>
\¿ù»~¦ì¸m: <<m.lcProgram>>
\¿é¥X°O¾ÐÅé¨Ï¥Î±¡ªp -> MEMORYLOG.TXT
\¿é¥X¤u§@Àô¹Ò¨ì -> STATUSLOG.TXT
DISPLAY MEMORY NOCONSOLE TO FILE MEMORYLOG.TXT
DISPLAY STATUS NOCONSOLE TO FILE STATUSLOG.TXT
*--
*-- ³o¬O¹ï¤vª¾¥BµL®`ªº¿ù»~³B²z
*-- ¦b³oùؤ~µ¹¥X´£¥Üµøµ¡¬O¬°¤F¯à¥¿½T°O¿ý¨ì¬¡°Ê¨ì±±¨î¶µ¦W
DO CASE
*!* CASE m.lnError = 1967
*!* *-- ¸ê®ÆÀô¹Ò¤v¸g¨ø¸ü
*!* = Messagebox( "¸ê®ÆÀô¹Ò¤v¸g¨ø¸ü¡I" , 0 , "¿ù»~¸òÂÜ" )
*!* RETURN
*!* CASE m.lnError = 1001
*!* *-- ¦¹¥\¯à¤£¥i¥Î
*!* = Messagebox( "¦¹¥\¯à¤£¥i¥Î¡I" , 0 , "¿ù»~¸òÂÜ" )
*!* RETURN
CASE m.lnError = 39
*-- ¼Æ­È¤W·¸¡C¸ê®Æ¤w¥á¥¢
*-- ¨ú®øµ{¦¡ªº°õ¦æ¶Ü
m.llErrorQuit = Messagebox(" ®·®»¨ì¤@­Ó©Î¦h­Ó¤Ó¤j¿é¤J¼Æ­È©ÎªÌ¥X²{°£¹s¿ù»~¡A®Ö¹ê§A¸ê®Æªº¦Xªk©Ê¡C" + ;
"¦P®É³o­Ó¿ù»~¤v³Q°O¿ý¡A¥¦±NÅã¥Ü¬° * ¸¹¥H´£¥Ü§A³o­Ó¸ê®Æ¬O«Dªkªº¡C" + CHR(13) + CHR(13) + ;
" ¦pªG¥»¿ù»~µo¥Í¦bŪ¨ú¸ê®Æ®É¡A¥¦¬OµL®`ªº¡A¦pªG¥¦µo¥Í¦b«O¦s¸ê®Æ®É¡A«Øij¿ï¾Ü¨ú®ø¤¤¤îµ{¦¡ªº¹B¦æ¡AÀˬd¸ê®Æªº¦Xªk©Ê¡C", 32 + 5 + 256 , '¿ù»~¸òÂÜ') = 2

*-- ³oùع良ª¾ªº¥i¯à¦³®`ªº³B²z
OTHERWISE
= Messagebox('¨Æ¥ó¥N¸¹: ' + LTRIM( STR(m.lnError) ) + CHR(13) + ;
'µ{¦¡¦C¸¹: ' + LTRIM( STR(m.lnLineNo) ) + CHR(13) + ;
'¨Æ¥ó¸ê°T: ' + m.lcMessage1 + CHR(13) + ;
'¨Æ¥ó¥N½X: ' + m.lcMessage2 + CHR(13) + ;
'¨Æ¥ó¦ì¸m: ' + m.lcProgram + CHR(13) + CHR(13) + ;
' ¦¬¨ì³o­Ó®ø®§¡Aµ{¦¡¤v±j¦æ¤¤¤î¡C¨M©w³B²z³o­Ó¿ù»~¡AÁpô³nÅéµo®i°Ó¡C' + ;
'¦C¦L©Î³Æ¥÷µ{¦¡¦w¸Ë¥Ø¿ý¤Uªº¿ù»~®·®»ÀÉ: Debuglog.txt , Memorylog.txt , Statuslog.txt. ' + ;
'¹ï©ó¤Î¦­³B²z±z²{¦b¸I¨ìªº³o­Ó¿ù»~¬O¦³À°§Uªº¡C' , 48 , '¨t²Î¯Å¨Æ¥ó')
ENDCASE
\³B²z¤èªk: <>
\<<DATE( )>> <<TIME( )>> µ²§ô¹ï¿ù»~ªº´yø
\-------------------------------------------------------
*--
*-- «ì´_¤§«eªºÀô¹Ò
*-- Ãö³¬¤å¥ó±±¨î½X
SET TEXTMERGE TO
SET TEXTMERGE &lcErrorTextmerge
SET SAFE &lcErrorSafe
*-- ¬O§_²×¤îµ{¦¡
IF ( _Vfp.StartMode = 2 OR _Vfp.StartMode = 4 ) AND m.llErrorQuit
ON ERROR
ON SHUTDOWN
CLEAR EVEN
= My_Shutdown()
CANCEL
QUIT
ENDI
ENDIF
ENDPROC
*--
*-- ¬O§_ÄÝ©ó¤@¯ë¿ù»~
PROC MyCheckSmallErrorNo
LPARA lnErrorNo
DO CASE
CASE _Vfp.StartMode = 0
*-- ½Õ¸Õ´Á¥ô¦ó¿ù»~³£¥²¶·³B²z
RETURN .F.
CASE INLIST( m.lnErrorNo , 1001 , 1967 , 1533 ,1559)
RETURN .T.
*-- 1001 ¦¹¥\¯à¤£¥i¥Î
*-- 1967 ¸ê®ÆÀô¹Ò¤v¸g¨ø¸ü
*-- 1533 ¦¹ÄÝ©Ê°ßŪ
*-- 1559 §ä¤£¨ìÄÝ©Ê
OTHERWISE
RETURN .F.
ENDCASE
ENDPROC
*--
*-- ¬O§_ÄÝ©óÄY­«¿ù»~¸¹
PROC MyCheckBigErrorNo
LPARA lnErrorNo
*-- ¤¹³\²{³õ³B²zªº¿ù»~¸¹
DO CASE
CASE m.lnErrorNo = 1585
*-- 1585 §ó·s½Ä¬ð¡C
TABLEREVERT( .F. )
CASE m.lnErrorNo = 1589
*-- 1589 ªí½w½Ä¤Î¦æ½w½Ä­n¨D SET MULTILOCKS ³]¸m¬° ON¡C
SET MULTILOCKS ON
CASE INLIST( m.lnErrorNo , 1549,1590,1593,1599,1593)
*-- 1549 ¤u§@´Á #½s¸¹ ³Q­¢¦^ºu¥þ³¡¨Æ°È³B²z¥HÁקKÂꦺ¡C
*-- 1590 BEGIN TRANSACTION ©R¥O¥¢±Ñ¡C´O®M¼h¦¸¤Ó¦h¡C
*-- 1593 ¦b¨Æ°È³B²z´Á¶¡¤£¯àµo§G¦¹©R¥O
*-- 1599 ¤£¯à¦bÄÀ©ñ¤u§@´Á¡§#½s¸¹¡¨«á¤´µM¥´¶}µÛ¨Æ°È³B²z¡C
*-- ¥²¶·¦^ºu¨Æ±ø
DO While Txnlevel() # 0
ROLLBack
EndDO
* RETRY
OTHERWISE
*-- ¤£¥i«ì´_¿ù»~±j¨î°h¥X VFP
*-- 6 ¥´¶}ªº¤å¥ó¤Ó¦h
*-- 19 ¯Á¤ÞÀÉ»Pªí¤£¤Ç°t
*-- 47 §ä¤£¨ì­n³B²zÄæ¦ì
*-- 56 ¨S¦³¨¬°÷ªººÏºÐªÅ¶¡«O¦s¡§ÀÉ¡¨
*-- 96 ´O®M¿ù»~
*-- More ...
IF INLIST( m.lnErrorNo , 6 , 56 ) ;
OR INLIST( m.lnErrorNo , 19 , 96) ;
OR INLIST( m.lnErrorNo , 47 )
ON ERROR
ON SHUTDOWN
CLEAR EVEN
CANCEL
IF _Vfp.StartMode = 2 OR _Vfp.StartMode = 4
QUIT
ENDI
ENDI
ENDCASE
ENDPROC
*--
*-- VfpGetKeyState( leVirKey )
*-- leVirKey ¨ú ¦r¤¸«¬¡B¼Æ­È«¬
PROCEDURE VfpGetKeyState( leVirKey )
*- SHIFT = 16 CTRL = 17 ALT = 18
PRIVATE lnVirKey , lcVirKey
Local lnVirKey , lcVirKey
DO CASE
CASE VarType(leVirKey) = "N"
lnVirKey = leVirKey
CASE VarType(leVirKey) = "C" AND LEN(leVirKey) > 1
lcVirKey = UPPE( leVirKey )
DO CASE
CASE lcVirKey = "TAB"
lnVirKey = 9
CASE lcVirKey = "SHIFT"
lnVirKey = 16
CASE lcVirKey = "CTRL"
lnVirKey = 17
CASE lcVirKey = "ALT"
lnVirKey = 18
CASE lcVirKey = "ESC"
lnVirKey = 27
OTHERWISE
lnVirKey = ASC( LEFT(lcVirKey,1) )
ENDC
OTHERWISE
RETURN .F.
ENDC
DECLARE INTEGER GetKeyState IN Win32Api LONG
RETURN BITTEST( GetKeyState( m.lnVirKey ) , 15 )
ENDPROC

_________________
#############################
§Ö¼Ö¶ý«}¨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§@