注册 登录
编程论坛 VB6论坛

删除 ACCESS 中表记录的最后一行出现了问题,请大侠指点

coucongzi 发布于 2014-12-03 17:07, 584 次点击
程序代码:

Private Sub Text5_Change()
If Len(Text5) = 13 Then
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.ConnectionString = "Data Source=" & App.Path & "\tmdata.mdb" & " ;Jet OLEDB:Database password= coucongzi" ';Persist Security Info=False"
cn.Open
rs.CursorLocation = adUseClient
SQL = "select * from spxx where sptm = '" & Text5.Text & "' "
rs.Open SQL, cn, adOpenDynamic, adLockPessimistic
If rs.EOF = True Then
MsgBox "不存在'" & Text5.Text & "'这个条码,请重新输入", 16, "错误!"

rs.Close
cn.Close
Else
Label1.Caption = rs.Fields("spbm") + Chr(32) + rs.Fields("spys") + Chr(32) + rs.Fields("spcm") + ""


Set cn2 = CreateObject("ADODB.Connection")
Set rs2 = CreateObject("ADODB.Recordset")
cn2.Provider = "Microsoft.Jet.OLEDB.4.0"
cn2.ConnectionString = "Data Source=" & App.Path & "\tmdata.mdb" & " ;Jet OLEDB:Database password= coucongzi" ';Persist Security Info=False"
cn2.Open
rs2.CursorLocation = adUseClient
SQL = "select spbm as 商品编码 ,spys as 颜色  , spcm as 尺码 , sptm as 条码 , spjg as 价格  from zxd "
rs2.Open SQL, cn2, adOpenDynamic, adLockPessimistic
rs2.AddNew
rs2.Fields("商品编码") = rs.Fields("spbm")
rs2.Fields("颜色") = rs.Fields("spys")
rs2.Fields("尺码") = rs.Fields("spcm")
rs2.Fields("条码") = rs.Fields("sptm")
rs2.Update
Set DataGrid2.DataSource = rs2
Label2.Caption = rs2.RecordCount
Command3.Enabled = True
Text5.Text = ""
End If
End If
End Sub

Private Sub Command6_Click()
rs2.MoveLast
rs2.Delete   这里出现了错误啊
rs2.Update
Set DataGrid2.DataSource = rs2
DataGrid2.Refresh
Label2.Caption = rs2.RecordCount
End Sub
8 回复
#2
coucongzi2014-12-03 17:12
Private Sub Command6_Click()
rs2.MoveLast
rs2.Delete     这里出现了错误啊
rs2.Update
Set DataGrid2.DataSource = rs2
DataGrid2.Refresh
Label2.Caption = rs2.RecordCount
End Sub

错误提示:健列信息不足或不正确。更行影响到多行

我的目的是想要删除最后的那一行记录
#3
xzlxzlxzl2014-12-03 17:55
你的rs2是局部变量,只在过程Text5_Change中有效,在Command6_Click就无效了,需重新连接数据库和记录集打开操作。
#4
coucongzi2014-12-04 08:07
回复 3 楼 xzlxzlxzl
Private Sub Command6_Click()
Set cn4 = CreateObject("ADODB.Connection")
Set rs4 = CreateObject("ADODB.Recordset")
cn4.Provider = "Microsoft.Jet.OLEDB.4.0"
cn4.ConnectionString = "Data Source=" & App.Path & "\tmdata.mdb" & " ;Jet OLEDB:Database password= coucongzi" ';Persist Security Info=False"
cn4.Open
rs4.CursorLocation = adUseClient
SQL = "select * from zxd "
rs4.Open SQL, cn4, adOpenDynamic, adLockPessimistic
'On Error Resume Next
rs4.MoveLast
rs4.Delete
rs4.Update
Set DataGrid2.DataSource = rs4
DataGrid2.Refresh
Label2.Caption = rs4.RecordCount
End Sub

我把Command6_Click()里面的内容按照您说的情况改了
还是出现的同样的报错
#5
coucongzi2014-12-04 08:07
错误提示:健列信息不足或不正确。更行影响到多行
#6
xzlxzlxzl2014-12-04 09:30
这是因为你表格没有关键字段导致的,没有关键字段表格打开应使用adOpenKeyset方式因此修改语句rs4.Open SQL, cn4, adOpenDynamic, adLockPessimistic
为rs4.Open SQL, cn4, adOpenKeyset, adLockPessimistic,试试。
#7
coucongzi2014-12-04 11:29
回复 6 楼 xzlxzlxzl
感谢您的指点  按照您的方法是可以了,但是只能删除不同的记录
如果遇到的记录是重复的情况(如重复扫描了同样的条码记录,想要删除其中的一条),删除其中一条时,还是会有同样的报错
#8
xzlxzlxzl2014-12-04 12:10
对于没有关键字段的表,要想明确删除某一条记录,大概只有使用条件查询解决了,语句如下:
a="delete aa from aa where bb=XX and cc=YY"
conn.Execute a
#9
coucongzi2014-12-04 12:38
回复 8 楼 xzlxzlxzl
好的,感谢您的指导啊
1