 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
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 次修改 |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|