标题: 批量删除记录 [打印本页] 作者: ycxchen 时间: 2008-12-18 10:19 标题: 批量删除记录 我想通过用手机号码作条件来删除记录,想在窗体的文本框中连续输入一定数量的手机号码,例如5个或10个号码,每个号码用中文的顿号隔开,后单击“删除”按钮,能将输入的手机号码的所有记录删除。请问,要实现此功能如何写VBA代码?[attach]33895[/attach]作者: Henry D. Sy 时间: 2008-12-18 10:34
Private Sub Command2_Click()
Dim strWhere As String, strSQL As String
Dim strArray() As String
Dim i As Integer
If IsNull(Me.输入手机号码) Then Exit Sub
strArray = Split(Me.输入手机号码, "、")
For i = 0 To UBound(strArray)
strWhere = strWhere & "'" & strArray(i) & "',"
Next
strSQL = "delete from 表1 where 手机 in (" & strWhere & ")"
CurrentDb.Execute strSQL
End Sub
[ 本帖最后由 Henry D. Sy 于 2008-12-19 19:46 编辑 ]作者: ycxchen 时间: 2008-12-18 15:04
6D版主太厉害了,不愧是版主,十分感谢您!我想完善两点:1、如果一次输入了数个号码,但其中一个或多个在表中是不存在的,如何用VBA判断?
2、每次限制输入的号码最多不能超过50个,如何写代码?
盼6D高手指教!作者: Henry D. Sy 时间: 2008-12-18 15:49
问题1,如果这样要求,在最后一个号码输入完毕必须输入中文顿号,否则access不知道你输入结束。
哪这样的话,上面的删除代码需要修正
供你参考,自己测试一下
Private Sub 输入手机号码_KeyDown(KeyCode As Integer, Shift As Integer)
Dim strWhere As String
Dim strTemp As String
Dim intCount As Integer
If KeyCode = 229 Then
If Len(Me.输入手机号码.Text) >= 11 Then
strTemp = Mid(Me.输入手机号码.Text, Len(Me.输入手机号码.Text) - 10, 11)
strWhere = "手机='" & strTemp & "'"
intCount = DCount("*", "表1", strWhere)
If intCount = 0 Then
MsgBox "您刚输入的手机号码不存在"
End If
End If
End If
End Sub作者: wang1950317 时间: 2008-12-18 16:00
受教![:50] [:50]作者: Henry D. Sy 时间: 2008-12-18 16:05
问题2
Private Sub 输入手机号码_Change()
Dim intLength As Integer
intLength = Len(Me.输入手机号码.Text)
If intLength > 600 Then
MsgBox "输入的号码数量已到极限"
End If
End Sub作者: Henry D. Sy 时间: 2008-12-18 16:09
判断最后是不是以中文顿号结束输入
Private Sub 输入手机号码_BeforeUpdate(Cancel As Integer)
If Right(Me.输入手机号码, 1) <> "、" Then
MsgBox "请输入中文顿号结束输入"
Cancel = True
End If
End Sub作者: ycxchen 时间: 2008-12-18 17:55
万分感谢6D版主,你的水平太高超了!在你面前,对于我的ACCESS水平,我只不过是个小弟弟。好,我先试用。作者: changweiren 时间: 2008-12-18 19:23
6D,真高,佩服,学习,收藏代码作者: koutx 时间: 2008-12-18 19:33
收藏 .作者: ycxchen 时间: 2008-12-18 21:36
6D版主,问题基本解决,感谢您!现还有两个问题不明,再向你请教:
1、你的语句只有当号码位数大于11位才出现提示,而我想当输入的号码小于11位或大于11位时,只要输入顿号就出现提示,于是,我将4楼的代码改成如下:
Dim strWhere As String
Dim strTemp As String
Dim intCount As Integer
If KeyCode = 229 Then
If Len(Me.输入手机号码.Text) > 11 Then
strTemp = Mid(Me.输入手机号码.Text, Len(Me.输入手机号码.Text) - 12, 13)
strWhere = "手机='" & strTemp & "'"
intCount = DCount("*", "表1", strWhere)
If intCount = 0 Then
MsgBox "您刚输入的手机号码不存在"
Else
If Len(Me.输入手机号码.Text) < 11 Then
strTemp = Mid(Me.输入手机号码.Text, Len(Me.输入手机号码.Text) - 1, 10)
strWhere = "手机='" & strTemp & "'"
intCount = DCount("*", "表1", strWhere)
If intCount = 0 Then
MsgBox "您刚输入的手机号码不存在"
End If
End If
End If
End If
End If
但不能正确运行,不知是什么原因?还觉得我这样写语句结构太混乱。
2、我看过MID函数帮助,字符位数参数前面是用英文的“,”,但在你的语句中为何用了“-”呢?例如,“- 10”。作者: Henry D. Sy 时间: 2008-12-18 21:41
问题2先回你,这里是扣掉10.是减号的意思。作者: Henry D. Sy 时间: 2008-12-18 21:46
Private Sub 输入手机号码_KeyDown(KeyCode As Integer, Shift As Integer)
Dim strWhere As String
Dim strTemp As String
Dim intCount As Integer
If KeyCode = 229 Then
If Len(Me.输入手机号码.Text) >= 11 Then
strTemp = Mid(Me.输入手机号码.Text, Len(Me.输入手机号码.Text) - 10, 11)
strWhere = "手机='" & strTemp & "'"
intCount = DCount("*", "表1", strWhere)
If intCount = 0 Then
MsgBox "您刚输入的手机号码不存在"
End If
Else
MsgBox "您输入的电话号码位数不够"
End If
End If
End Sub作者: ycxchen 时间: 2008-12-19 10:05
我真糊涂,“Len(Me.输入手机号码.Text) - 10”就个是个参数。衷心感谢6D版主的热心指教!
6D版主真是水平一流,品德一流!作者: ycxchen 时间: 2008-12-19 11:11
我测试过,按13楼代码运行,只要输入一个数字,电脑都会提示输入的电话号码位数不够,以致不能正常录入号码。于是,我将代码改成如下:
Dim strWhere As String
Dim strTemp As String
Dim intCount As Integer
If KeyCode = 229 Then
If Len(Me.输入手机号码.Text) >= 11 Then
strTemp = Mid(Me.输入手机号码.Text, Len(Me.输入手机号码.Text) - 10, 11)
strWhere = "手机='" & strTemp & "'"
intCount = DCount("*", "表1", strWhere)
If intCount = 0 Then
MsgBox "您刚输入的手机号码不存在"
End If
Else
If Len(Me.输入手机号码.Text) < 12 And Right(Me.输入手机号码.Text, 1) = "、" Then
MsgBox "您输入的电话号码位数不够"
End If
End If
End If
问题基本解决,但不完善,不能达到输入的号码小于11位时,只要输入顿号就出现提示,而是输入顿号后再输入一数字时才出现提示,如何解决?盼指教。作者: Henry D. Sy 时间: 2008-12-19 11:25
13楼的代码应该不会出现你说的情况,进行判断的前提是你输入中文顿号。
问题基本解决,但不完善,不能达到输入的号码小于11位时,只要输入顿号就出现提示,而是输入顿号后再输入一数字时才出现提示,如何解决?盼指教。
If Len(Me.输入手机号码.Text) < 12 And Right(Me.输入手机号码.Text, 1) = "、" Then
你的代码我没有测试,但这里至少有个问题,应该<11,而不是12。作者: ycxchen 时间: 2008-12-19 12:01
谢谢!测试13楼的代码时人是输入中文顿号的,但不能达到目的。我的设想:11位的手机号码加上1个顿号就是12位了。所以,用“If Len(Me.输入手机号码.Text) < 12 And Right(Me.输入手机号码.Text, 1) = "、" Then”来判断,但为何不能达到输入的号码小于11位时,只要输入顿号就出现提示,而是输入顿号后再输入一数字时才出现提示?如何解决?盼指教。作者: Henry D. Sy 时间: 2008-12-19 12:30
我的设想:11位的手机号码加上1个顿号就是12位了
keydown事件在前,输入在后,所以还是11位
但为何不能达到输入的号码小于11位时,只要输入顿号就出现提示
我测试过是这样的呀。
而是输入顿号后再输入一数字时才出现提示
没发现此问题。作者: ycxchen 时间: 2008-12-19 12:46
感谢6D的热心教导!但我在我的电脑再次测试13楼的代码时,出现的现象始终是一输入一个数字,电脑就会运行“MsgBox "您输入的电话号码位数不够"”这句,我觉得,这并不是输入不输入顿号的问题,应是小于11位的手机号码时的判断问题了。版主大人你认为呢?作者: Henry D. Sy 时间: 2008-12-19 13:38
你是不是将
Else
MsgBox "您输入的电话号码位数不够"
放错位置了。作者: ycxchen 时间: 2008-12-19 15:37
谢谢了!我没有放错位置,我还是按15楼的办法加一句判断。如果不输入顿号,退出时会出现一错误提示,如下图:
[attach]33934[/attach]
我在更新前事件中加一屏蔽语句: DoCmd.SetWarnings False,
但不起作用。请问,如何才能屏幕上图的提示?
Private Sub 输入手机号码_BeforeUpdate(Cancel As Integer)
If Right(Me.输入手机号码, 1) <> "、" Then
MsgBox "请输入中文顿号结束输入"
Cancel = True
End If
DoCmd.SetWarnings False
End Sub作者: ycxchen 时间: 2008-12-19 17:42
要屏幕21楼图的提示除了考虑用DoCmd.SetWarnings False语句外,还有其它办法吗?盼大家指教。作者: Henry D. Sy 时间: 2008-12-19 19:48
怎么到了你哪里出现这么多的错误???作者: ycxchen 时间: 2008-12-23 10:12
“冬至”回乡下几天了,现才看到帖子,6D真够热心,万分感谢!向您学习。作者: ycxchen 时间: 2008-12-23 14:58
6D高手,我下载23的例子试用了,但13楼21楼的问题仍会出现,不知何因?作者: Henry D. Sy 时间: 2008-12-23 16:15
难道是输入法引起的,我的是搜狗拼音作者: ycxchen 时间: 2008-12-23 17:59
6D高明!我用的是极品五笔输入法。我试过,将输入法转换英方状态,且在代码中将中文的顿号改为“/”,则位数不够等判断语句不起作用了。为方便起见,我想输入手机号码时用输入法为英方状态下的“/”代替中文的顿号,以隔开每个手机号码。请问,如果这样做,要如何改一下代码呢?作者: Henry D. Sy 时间: 2008-12-23 18:22
Private Sub 输入手机号码_KeyDown(KeyCode As Integer, Shift As Integer)
Dim strWhere As String
Dim strTemp As String
Dim intCount As Integer
If KeyCode = 191 Then
If Len(Me.输入手机号码.Text) >= 11 Then
strTemp = Mid(Me.输入手机号码.Text, Len(Me.输入手机号码.Text) - 10, 11)
strWhere = "手机='" & strTemp & "'"
intCount = DCount("*", "表1", strWhere)
If intCount = 0 Then
MsgBox "您刚输入的手机号码不存在"
End If
Else
MsgBox "您输入的电话号码位数不够"
KeyCode = 0
End If
End If
End Sub
Private Sub Command2_Click()
Dim strWhere As String, strSQL As String
Dim strArray() As String
Dim i As Integer
If IsNull(Me.输入手机号码) Then Exit Sub
strArray = Split(Me.输入手机号码, "/")
For i = 0 To UBound(strArray)
strWhere = strWhere & "'" & strArray(i) & "',"
Next
strSQL = "delete from 表1 where 手机 (" & strWhere & ")"
CurrentDb.Execute strSQL
End Sub
Private Sub 输入手机号码_Change()
Dim intLength As Integer
intLength = Len(Me.输入手机号码.Text)
If intLength > 600 Then
MsgBox "输入的号码数量已到极限"
End If
End Sub
Private Sub 输入手机号码_BeforeUpdate(Cancel As Integer)
If Right(Me.输入手机号码, 1) <> "/" Then
MsgBox "请输入“ / ”号结束输入"
Cancel = True
End If
End Sub 作者: ycxchen 时间: 2008-12-24 10:19
万分感谢6D版主!你真是位高手中的高手。我现请教:“ If KeyCode = 191 Then”中的“KeyCode”在F1中帮助中看不到相关的解释,但为何在VBA中可应用的?作者: Henry D. Sy 时间: 2008-12-24 10:32
有呀,怎么会没有?
在帮助中输入keycode回车看看。作者: ycxchen 时间: 2008-12-24 12:15
万分感谢6D版主,教导我学会不少VBA!!直接按F1不能查到,但通过搜索可以查到。看过帮助,但对KeyCode = 191 为什么代表英文输入法不明白,请指教!作者: Henry D. Sy 时间: 2008-12-24 14:43
但对KeyCode = 191 为什么代表英文输入法不明白
不是代表英文输入法,而是英文斜杆的keycode=191
[ 本帖最后由 Henry D. Sy 于 2008-12-24 14:58 编辑 ]作者: ycxchen 时间: 2008-12-24 16:15
明白,谢谢!