请教datagrid和text绑定数据库后,如何进行错误处理?请给个好的思路。

maplewind 2002-05-10 11:44:23
用ado数据控件adodc连接数据库
绑定了一个datagrid和多个textbox。来维护一个库表,增加,删除,修改
用Datagrid来移动,选择记录,不允许add,delete,update
用textbox显示记录的详情,每个字段对应一个textbox
ado增加的时候ado.recordset.addNew,通过textbox来输入内容。
问题是对错误如何处理???
比如没有关键字,关键字字段输入的值与已有的值重复。这些错误,该如何控制和处理?在什么地方处理。
我现在是在Ado_WillChangeRecord里调用数据检查:
Private Sub Ado_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If CancelUpdate_Flag = True Then '已经取消过,则退出,check里设为false
Exit Sub
End If
Call Check_Txt
'Ado.Recordset.Filter = adFilterAffectedRecords
If ErrFlag = True Then
MsgBox ErrMsg
ErrFlag = False
CancelUpdate_Flag = True
' adStatus = adStatusCancel
adStatus = adStatusUnwantedEvent
txtXiangmuName.DataChanged = False
' Ado.Recordset.CancelUpdate

End If
End Sub

但是老是datagrid出现error事件,并且出错。
对ado和datagrid不熟悉,请指点该如何处理错误。
...全文
4 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdsbjcailei 2002-05-10

这样,你的文本框如果没有数据则就不会保存了。也就不会触发datagrid的error了。
回复
jdsbjcailei 2002-05-10
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
If Text1.Text = "" Then
MsgBox "对不起,不能为空!"
Exit Sub
Else
'保存
End If
End If
End Sub
回复
Jameszht 2002-05-10
validate是當跳出textbox時進行校驗,程序要自己寫。如果檢驗不成功則令
cancel=true,用戶不能跳離textbox,也就是說一定要輸入正確才能跳離。
如你上所說,如果用戶不輸入關鍵字,則用
Private Sub Text1_Validate(Cancel As Boolean)
    If Text1.Text = "" Then Cancel = True
End Sub
關鍵字重復的問題比較複雜,一般的作法是由存盤時由sql產生一個錯誤,程序捕捉之。也有的是在程序中用代碼實現。如果你希望能在前台完成校驗,我推薦使用存儲過程的output參數來完成。
回复
maplewind 2002-05-10
说具体点好吗?
偶刚用,什么都不懂
回复
maplewind 2002-05-10
好多个textbox
对textbox的validate怎么做校验????
回复
bitsoft 2002-05-10
在textbox的Validate事件中加校验吧
回复
acptvb 2002-05-10
感谢您使用微软产品。

对于诸如关键字重复的等问题,您还可以在ADODB.Connection 的ExecuteComplete事件发生时判断SQL语句是否执行成功,并获取错误信息。如果此时不对错误进行处理,将发生Rum-time Error,您可以使用On Error Statement来处理错误,防止程序的崩溃。

如果SQL语句的执行没有错误,ADO.connection对象的execute方法的第二个参数是存储返回值的变量,反映了受影响的记录个数,您可以通过这个参数变量获得SQL语句执行结果的信息。如下例:

Private WithEvents cases As ADODB.Connection ‘为了获取对象的事件,需在声明对象时加WithEvents关键字。

Private Sub cases_ExecuteComplete(ByVal RecordsAffected As Long, _
ByVal pError As ADODB.Error, _
adStatus As ADODB.EventStatusEnum, _
ByVal pCommand As ADODB.Command, _
ByVal pRecordset As ADODB.Recordset, _
ByVal pConnection As ADODB.Connection)
If adStatus = adStatusErrorsOccurred Then
MsgBox pError.Description
Else
MsgBox "exec success"
End If
End Sub

Private Sub Command2_Click()
Set cases = CreateObject("ADODB.Connection")
cases.Open ("testdb1")
Dim num As Integer
exsql = "delete from Table1 where ID>0"
On Error GoTo errl
cases.Execute exsql, num
Text2.Text = num
Exit Sub

errl:
MsgBox Err.Description
Exit Sub

End Sub

每次执行与ADO有关的操作时,所有provider errors都被加入connection的Errors属性,您也可以由此获得错误信息。修改on error的处理代码如下:
errl:
For Each Err In cases.Errors

strError = "Error #" & Err.Number & vbCr & _
" " & Err.Description & vbCr & _
" (Source: " & Err.Source & ")" & vbCr & _
" (SQL State: " & Err.SQLState & ")" & vbCr & _
" (NativeError: " & Err.NativeError & ")" & vbCr
If Err.HelpFile = "" Then
strError = strError & " No Help file available"
Else
strError = strError & _
" (HelpFile: " & Err.HelpFile & ")" & vbCr & _
" (HelpContext: " & Err.HelpContext & ")" & _
vbCr & vbCr
End If

Debug.Print strError
Next
Exit Sub

详细信息请参考:
Execute Method (ADO Connection)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcnnexecute.asp
ExecuteComplete Event
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdevtexecutecomplete.asp
On Error Statement
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vblr7/html/vastmonerror.asp
Errors Collection
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdcolerrors.asp
Description, HelpContext, HelpFile, NativeError, Number, Source, and SQLState Properties Example (VB)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdprodescriptionx.asp


- 微软全球技术中心 VB技术支持
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款
(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查
(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。


回复
maplewind 2002-05-10
我想利用validate是个好主义,但是对诸如关键字重复的问题该怎么办?
我觉得利用往ado里转入时的错误信息是个好主意,但是该怎么扑捉和处理呢?
能利用ado的WillChangeRecord和cancelUpdate吗?
回复
发动态
发帖子

1181

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
社区公告
暂无公告