实时错误91
一,前言:
? ? ? ?在做學生系統的時候經常會遇到“實時錯誤‘91’”這個錯誤,我們親切的稱呼它為“奪命91”,這個錯誤還是有點麻煩的,但是又必須要解決,不然就沒法往下走,所以就硬著頭皮正面剛吧。
二,分析:
? ? ? ?當出現這種情況時大家不要盲目的去改,去搜,最好先想一下,可能會發生錯誤91的原因有哪些?開始之前的那些準備工作有沒有做好,比如數據庫的配置,ODBC的連接,查詢語句的書寫,代碼的問題,以及數據庫中是否有數據,在看完這些沒問題之后再找其他原因,站在巨人的肩膀上,去看看他們是怎么解決的。
三、問題:
1.ODBC沒有連接成功?;
2.VB模塊中連接數據庫的代碼,用戶名、密碼和ODBC不同步?;
3.代碼中語句出錯,連接不到數據庫中所要連接的表。
四、錯誤位置:
txtsql = "select * from user_Info where userID = '" & txtUserName.Text & "'"
Set mrc = ExecuteSQL(txtsql, msgtext)
If mrc.EOF=true Then
MsgBox "沒有這個用戶,請重新輸入用戶名!", vbOKOnly, "提示"
txtUserName.SetFocus
else
…
? ? ? ?當在這里提示的時候我們肯定會想到數據庫中有沒有記錄,有沒有把想要的信息添加進去,既然在有EOF的這里出現,就再說一下EOF,在說EOF時肯定還有與之相對應的BOF,看看它們的用法:
BOF:指當前記錄位置位于Recordset對象的第一個記錄之前;
EOF:指當前記錄位置位于Recordset對象的最后一個記錄之后。
這兩個的屬性值均返回布爾型:True和False,使用BOF和 EOF 屬性可確定 Recordset 對象是否包含記錄,或者從一個記錄移動到另一個記錄時是否超出 Recordset 對象的限制。 下表即是各自的使用說明及查詢結果:
說明:
(1)如果當前記錄位于第一個記錄之前,BOF?屬性將返回 True(-1),如果當前記錄為第一個記錄或位于其后則將返回 False (0)。
(2)如果當前記錄位于?Recordset 對象的最后一個記錄之后 EOF 屬性將返回True,而當前記錄位于 Recordset 對象的最后一個記錄或位于其前,則將返回 False。
(3)如果?BOF 或 EOF 屬性為 True,則沒有當前記錄。
(4)如果打開沒有記錄的?Recordset 對象,BOF 和 EOF 屬性將設置為True,而 Recordset 對象的 RecordCount 屬性設置為零。打開至少包含一條記錄的 Recordset 對象時,第一條記錄為當前記錄,而BOF 和 EOF 屬性為 False。
(5)如果刪除?Recordset 對象中保留的最后記錄,BOF 和 EOF屬性將保持 False,直到重新安排當前記錄。
具體用法:
If objRs.BOF Then
表示:當前指針的位置是在第一行記錄之前,則…
If objRs.EOF Then
表示:當前指針的位置是在最后一行記錄之后,則…
If Not objRs.EOF Then
表示:當前指針的位置沒有到達最后一條記錄
If Not objRs.BOF then
表示:當前指針的位置沒有到達第一條記錄
推薦使用下面兩條
If Not (objRs.BOF AND objRs.EOF) Then
表示:指針位于RecordSet 的當中(并非是最后一條和第一條) ,說明一定有記錄。
If objRs.BOF AND objRs.EOF Then
表示:沒有任何記錄
五、解決辦法:
? ? ? ?使三者同步,即查詢數據庫表的代碼規范,語法——ODBC——模塊中的用戶名,密碼,數據庫?。我的錯誤是在 If mrc.EOF Then 這句代碼上提示有錯,有時我們就會鉆牛角尖,這句代碼出現錯誤就在這一句上找,我出現的錯誤就要從這句話的前面找了。其實找來找去也看是數據庫中的表名,列名和VB中的不一樣。?所以不要局限于一處地方,要多想想與之有關聯的地方。
?
轉載自:https://blog.csdn.net/yyp0304devin/article/details/81006617
?
總結
- 上一篇: 学生系统优化(二)- - 窗体代码
- 下一篇: 学生系统优化(三)- -细节优化