我在一个过程中使用了一个on error goto aaa 但是我有一句产生了实时错误“94”,使用null无效,然后为什么,应该说它出现了这个错误后应该跳到aaa的语句啊,为什么它还是在那个语句提示这个错误呢。谢谢!!!!
解决方案 »
- 如何判断TEXT1内容字节数,分割并保存。
- VB中文本框绑定到DataEnvironment的问题
- 高手请进,真是一个让人烦燥的问题 mciSendString
- 根据屏幕像素点颜色值,VB获取其坐标程序
- 高人指点!如何利用vb访问我放在租用的web服务器上的access数据库
- 高手求救,当我打开"外接程序->可视化数据管理器"是,出现了对话框
- 程序报错的问题,不理解,不能解决(平安夜超级烦恼,紧急求助若渴)
- 如何创建自己的MSAgent卡通人物
- 急需高手帮助,VB解析只包含文字内容的PDF文档!
- 那里可以发送手机铃声或图片给摩托罗拉t2688?爱立信t28sc也可以。
- 问问大家VB在对一个文本文件进行操作时怎样删除它的内容
- 为什么我用RegQueryValueEx函数得到的键值是乱码?
Private Sub Command3_Click()
On Error GoTo Flag '出现null错误后处理
Dim i, n As Double
Dim j As Double
Dim Str1, Str2, Str3, Str5, Str6, Str7 As String
Set DataB2 = OpenDatabase(App.Path & "\xxxxx.mdb")
Set RecordS2 = DataB2.OpenRecordset("aaaaa")
j = 0
Second:
With RecordS2
i = .RecordCount
.MoveFirst
Text1.Text = i
If j >= i - 19 Or i = j Or i <= 1 Then '执行到记录结尾退出软件
.Close
DataB2.Close '关闭数据库
msg = MsgBox("数据已经删除完毕!!!")
Exit Sub
End If
If j <> 0 Then
For n = 1 To j
.MoveNext
Next
End If
Str1 = .Fields(1)
Str2 = .Fields(2)
Str3 = .Fields(5) ‘因为这个字段经常出现空。提示 错误的地方
If i > 0 Then
For n = 0 To i - (j + 20)
.MoveNext
If Len(Trim(.Fields(5))) = 0 Then .Delete: GoTo Flag1
Str5 = .Fields(1)
Str6 = .Fields(2)
Str7 = .Fields(5)
If Str1 = Str5 And Str2 = Str6 And Str3 = Str7 Then
.Delete
End If
Flag: 'flag标志
If Err.Number = 94 Then
.Delete
End If
Flag1: Next
End If
j = j + 1
.MoveFirst
GoTo Second
End With
End Sub
谢谢!!!!!!!!!!!!!!!!!!!!指导!!!!!!!!!!!!!!
Flag: 'flag标志
If Err.Number = 94 Then
.Delete
End If这段错误处理代码通常应该放到 sub 的最后,并且在 FLAG 上面添加 exit sub 你居然在循环里面加这个代码总的来说这代码写的惨不忍睹楼主你写了多久代码了
.Delete
End If
==>
If Err.Number = 94 Then
.Delete
Resume Flag1
End If
Flag: 'flag标志
If Err.Number = 94 Then
.Delete
Resume Flag1
End If
Flag1:
dim AA as String
...
AA = RecordSet.Fields(N) & ""
...
假设字段内容为数字格式:
DimAA as Double
...
AA = Val( RecordSet.Fields(N) & "" )
...同样的道理,在将记录写进数据库的时候也会发生NULL的问题,比如一个没有初始化的变量直接写入字段就会发生同样的错误。
解决的方法相同:
假设字段内容为文本格式:
dim AA as String
...
RecordSet.Fields(N) = AA & ""
...
假设字段内容为数字格式:
DimAA as Double
...
RecordSet.Fields(N) = Val( AA & "" )
...希望对楼主有所帮助。另外,看了楼主的程序,对于楼主在程序中GOTO满天飞的做法不是很赞同。
因为完全可以使用同一个ON ERROR来解决,之需要在错误处理中使用:
Flag:
Select case Err.Number
case XXX:
case XXX:
...
end select
按照不同的错误号,就可以对不同错误区别处理了。
delete from xxx where yyy=zzz
还有个问题,我acess数据库里有个表,我用代码打开这个表后用***.RecordCount来统计有多少条记录,为什么会出现记录条数不一致呢,统计出来的比实际的多了18条,这是为什么,如何准确统计呢谢谢。
On Error GoTo Flag '出现null错误后处理 '这里写执行代码
'......
Str3 = .Fields(5) & "" '这样可以避免 Null 错误
'......Flag: 'flag标志
If Err.Number = 94 Then
.Delete
Resume Next '这样可以回到原来的流程
End If
MsgBox Err.Number & ": " & Err.Description, "Runtime Error"
End Sub
Set DataB2 = OpenDatabase(App.Path & "\xxxxx.mdb")
'首先删除有 Null 值的记录
DataB2.Execute "Delete From aaaaa Where field5 Is Null"
'提取不重复的记录,至一临时表
DataB2.Execute "Select * Into Temp From aaaaa Group By Field1,Field2,Field5"
'清空原表
DataB2.Execute "Delete From aaaaa"
'写回提取的记录
DataB2.Execute "Insert Into aaaaa Select * From Temp"
'删除临时表
DataB2.Execute "Drop Table Temp"
DataB2.Close