VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

C/S 錯誤處理方案(轉貼)

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
Ruey



註冊時間: 2003-03-12
文章: 1698
來自: tunglo

第 1 樓

發表發表於: 星期六 九月 20, 2003 10:42 am    文章主題: C/S 錯誤處理方案(轉貼) 引言回覆

來源:myf1 lzrwj
http://61.145.116.139/bbs/dispbbs.asp?BoardID=1&id=222224&replyID=111389&star=1&skin=



軟件剛開始有 bug 在所難免, 軟件本來就是要千錘百煉慢慢完善.
在公司推行軟件兩年, 發現很多用戶在使用軟件過程中發現莫名的錯
誤(其實就是程式的bug)時, 按 取消 後重新登入繼續使用, 他
們很少跟管理員說:你的軟件有問題, 然後配合我們查找錯誤. 因此,
我們失去了很多改進自己軟件的機會.

為了更好的了解自己的軟件的使用情況和發現錯誤及時改正, 我用了
以下六步處理錯誤.


1.在 SQL 里建立一個資料表 error, 用來儲存用戶使用系統時發生的程式錯誤
信息. 如下圖:


2.在 SQL 里編寫一個儲存過程用來寫入錯誤記錄. 如下圖:


3.在 VFP 里編寫一段代碼, 用來處理錯誤信息, 保存到 my_error.prg.
因為發生錯誤時, 有可能儲存錯誤信息到 SQL 服務器不成功(比如說網絡不通等),
所以當儲存至 SQL 失敗時要先把記錄保存到本地機, 下一次登入再儲存至 SQL.
如下圖:


4.在主程序里加入這句代碼:
ON ERROR DO my_error WITH ERROR( ),MESSAGE(),SYS(16),LINENO(),MESSAGE(1)


5.在登入加入處理上一次存儲錯誤至 SQL 失敗的記錄. 如下圖:


6.在 VFP 做一個界面用來查詢用戶端反潰回來的錯誤信息. 如下圖:



代碼:
my_error.prg

PARAMETER nErroId,cErroMessage,cErroPro,nErroRownum,cErroCommand &&接收錯誤信息參數

cErroMessage="原?#93;: "+ALLT(STR(nErroId))+", "+ALLT(cErroMessage )+"位置: "+ALLT(cErroPro)+;
 ", 第"+ALLT(STR(nErroRownum))+"行("+ALLT(cErroCommand)+")。" &&錯誤信息

cUpdateName=cpLoginUserID &&登入用戶名
cCPID=ALLTRIM(SUBSTR(SYS(0),1,AT("#",SYS(0))-1)) &&登入電腦
cErroID=CHRTRAN(CHRTRAN(CHRTRAN(TTOC(DATETIME()),".","")," ",""),":","") &&自定義錯誤代號

&&將錯誤信息寫入 SQL 資料表
cSQLCommand="EXECUTE sp_erros_insert ?cErroID,?cUpdateName,?cCPID,?cErroMessage,?cUpdateName"
DO programs\connect_sql
IF npSQLHand>0
 IF SQLEXEC(npSQLHand,cSQLCommand)>0
  MESSAGEBOX("不明原?#93;錯誤。"+CHR(13)+ "已經將錯誤傳送至伺服器, 請記下錯誤代"+;
   "號並且立即聯絡系統管理員。"+CHR(13)+"錯誤代號 : "+cErroID,16,"信息")
  RETURN
 ENDIF
ENDIF
&&&&&&&&&&&&&&&&&&&&&

&&如寫入 SQL 資料表失敗, 把錯誤信息保存在用戶本地電腦上, 以便一次登入時再寫入 SQL 資料表
IF FILE("c:\ct_tc_erro.dbf")
 USE c:\ct_tc_erro IN 0 ALIAS ct_tc_erro
ELSE
 CREATE TABLE c:\ct_tc_erro.DBF (error_id c(30),users_id c(8),error_mess c(200))
ENDIF
INSER INTO ct_tc_erro value(cErroID,cUpdateName,cErroMessage)
MESSAGEBOX("不明原?#93;錯誤。"+CHR(13)+"傳送錯誤至伺服器失敗, 請記下錯誤代號並且立即聯"+;
 "絡系統管理員"+CHR(13)+"錯誤代號 : "+cErroID,16,"信息")
IF USED("ct_tc_erro")
 SELECT ct_tc_erro
 USE
ENDIF
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&




代碼:
登入處理上一次錯誤信息:
IF FILE("c:\ct_tc_erro.DBF")
 USE c:\ct_tc_erro.DBF
 FOR I=1 TO RECCO()
  GO I
  cErroID=error_id &&錯誤代號
  cErrorUsersID=users_id &&發生錯誤時操作者
  cCPID=ALLTRIM(SUBSTR(SYS(0),1,AT("#",SYS(0))-1)) &&登入電腦
  cErroMessage=error_mess  &&錯誤信息
  cUpdateName=cpLoginUserID &&登入用戶名
  cSQLCommand="EXECUTE sp_erros_insert ?cErroID,?cErrorUsersID,?cCPID,?cErroMessage,?cUpdateName"
  IF SQLEXEC(npSQLHand,cSQLCommand)>0
   DELETE
  ENDIF
 ENDFOR
 PACK
 nCount=RECCO()
 USE
 IF nCount=0
  DELETE FILE "c:\ct_tc_erro.DBF"
 ENDIF
ENDIF

_________________
#############################
快樂媽咪系列幸福宅配,喝十全雞湯~原來幸福那麼簡單!!

學會VFP使用者社區的搜尋,Code才會更有趣~
#############################


Ruey 在 星期四 十月 02, 2003 11:35 pm 作了第 2 次修改
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作