re debontrols:数据库中没有完全相同的两条记录,我设了关键字的 re vb_support:早就试过了,没用的 实在搞不明白,难道和我打开数据库的方式有关系,还是......? Dim cn as New ADODB.Connection Dim StrCon As String StrCon = " Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db.mdb" & ";Persist Security Info=False" cn.Open StrCon
用 comand命令是一下 dim cmd as new adodb.command cmd.activeconnection = cn cmd.commandtext = "delete * from table where ... " cmd.excutive . .
dim rsUserData as New ADODB.RecordSet If rsUserData.State = adStateOpen Then rsUserData.Close Else rsUserData.Open "select * from UserData where OwnerId='" & "westwin" & "' ", cn, adOpenStatic, adLockOptimistic End If if not rsUserData.eof then rsUserData.Filter=AdFilterNone rsUserData.Delete adAffectGroup end if rsUserData.Close 这样呢?
Dim a As New ADODB.Recordset a.Open "select * from tb", con, adOpenStatic, adLockBatchOptimistic, adCmdText a.Filter = adFilterFetchedRecords a.Delete adAffectGroup a.UpdateBatch 已经通过的代码!!
这句话有点问题
如果要查是否有记录,应该用
if not rsUserData.Eof and not rsUserData.Bof then
rsUserData.Filter = "OwnerId='" & westwin & "'"
westwin 是常数
rsUserData.Filter = "OwnerId='westwin'"
baoxiang说的检查是否有记录,不是产生错误的原因,就算我不检查,也会出这样的错误的.......呵呵,问题还是没有得到解决,gz
试一下
re vb_support:早就试过了,没用的
实在搞不明白,难道和我打开数据库的方式有关系,还是......?
Dim cn as New ADODB.Connection
Dim StrCon As String
StrCon = " Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db.mdb" & ";Persist Security Info=False"
cn.Open StrCon
dim cmd as new adodb.command
cmd.activeconnection = cn
cmd.commandtext = "delete * from table where ... "
cmd.excutive
.
.
的delete,为什么就不可以,困惑!!
但是我不知道具体的原因,我用 ado的delete 也可以的呀
不知道你在什么地方出现错误的你可以把整个类的代码发给我
我来看看
[email protected]
希望下班之前能搞定
这一句去掉!!!如果你要用批次更新的话
那么加上rsUserData.UpdateBatch
该范例使用 Delete 方法从 Recordset 删除指定的记录。Public Sub DeleteX() Dim rstRoySched As ADODB.Recordset
Dim strCnn As String
Dim strMsg As String
Dim strTitleID As String
Dim intLoRange As Integer
Dim intHiRange As Integer
Dim intRoyalty As Integer ' 打开 RoySched 表。
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
Set rstRoySched = New ADODB.Recordset
rstRoySched.CursorLocation = adUseClient
rstRoySched.CursorType = adOpenStatic
rstRoySched.LockType = adLockBatchOptimistic
====================================================================
rstRoySched.Open "SELECT * FROM roysched " & _
"WHERE royalty = 20", strCnn, , , adCmdText ' 提示删除记录。
strMsg = "Before delete there are " & _
rstRoySched.RecordCount & _
" titles with 20 percent royalty:" & vbCr & vbCr
Do While Not rstRoySched.EOF
strMsg = strMsg & rstRoySched!title_id & vbCr
rstRoySched.MoveNext
Loop
strMsg = strMsg & vbCr & vbCr & _
"Enter the ID of a record to delete:"
strTitleID = UCase(InputBox(strMsg)) ' 移到记录并保存数据以使其可被恢复。
rstRoySched.Filter = "title_id = '" & strTitleID & "'"
intLoRange = rstRoySched!lorange
intHiRange = rstRoySched!hirange
intRoyalty = rstRoySched!royalty ' 删除记录。
rstRoySched.Delete
rstRoySched.UpdateBatch
================================================
' 显示结果。
rstRoySched.Filter = adFilterNone
rstRoySched.Requery
strMsg = ""
strMsg = "After delete there are " & _
rstRoySched.RecordCount & _
" titles with 20 percent royalty:" & vbCr & vbCr
Do While Not rstRoySched.EOF
strMsg = strMsg & rstRoySched!title_id & vbCr
rstRoySched.MoveNext
Loop
MsgBox strMsg ' 恢复数据,因为这只是演示。
rstRoySched.AddNew
rstRoySched!title_id = strTitleID
rstRoySched!lorange = intLoRange
rstRoySched!hirange = intHiRange
rstRoySched!royalty = intRoyalty
rstRoySched.UpdateBatch rstRoySched.CloseEnd Sub
而我的目的是想通过rsUserData.Delete adAffectGroup删除所有filter过滤的记录,如果用rsUserData.Delete(后面不加adAffectGroup),只会删除单条记录,不会出错........(呵呵,不想用循环删)
如果你用乐观锁定的话,delete就把记录删除,
再用update一定会出错!
所以,你要偷懒的话只能用批次更新了
请看参数说明
adAffectGroup 删除满足当前 Filter 属性设置的记录。使用该选项须将 Filter 属性设置为有效的预定义常量之一。
===================================================AdFilterNone 删除当前筛选条件并恢复查看的所有记录。
AdFilterPendingRecords 允许只查看已更改且尚未发送到服务器的记录。只能应用于批更新模式。
AdFilterAffectedRecords 允许只查看上一次 Delete、Resync、UpdateBatch 或 CancelBatch 调用所影响的记录。
AdFilterFetchedRecords 允许查看当前缓冲区中的记录,即上一次调用从数据库中恢复记录的结果。
AdFilterConflictingRecords 允许查看在上一次批更新中失败的记录。
只有以上的常量才能删除一个集合的数据
否则,你只能一条一条删!
然后的delete ad...........照样出错
受不了了,555
If rsUserData.State = adStateOpen Then
rsUserData.Close
Else
rsUserData.Open "select * from UserData where OwnerId='" & "westwin" & "' ", cn, adOpenStatic, adLockOptimistic
End If
if not rsUserData.eof then
rsUserData.Filter=AdFilterNone
rsUserData.Delete adAffectGroup
end if
rsUserData.Close
这样呢?
rsUserData.UpdateBacth
给我你的代码,我给你试试
a.Open "select * from tb", con, adOpenStatic, adLockBatchOptimistic, adCmdText
a.Filter = adFilterFetchedRecords
a.Delete adAffectGroup
a.UpdateBatch
已经通过的代码!!
不然的话,也用不着为ADO设置那么多对象,只要一种不就可以了吗。
是不是有点搞笑?那怎么用delete删除单条纪录可以