注册 登录
编程论坛 VB6论坛

我想用mshflexgrid删除某一行并同时删除数据库中那一行,为什么总是显示参数类型不匹配,或不在可以接受的范围内,或与其他参数冲突

凛冬1 发布于 2020-03-16 21:48, 2107 次点击
Private Sub Command2_Click()
'连接数据库
If conn.State = 0 Then
   conn.ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & _
 App.Path & "\设计计算.mdb;Persist Security Info=False"   '连接数据库的驱动字符串并打开数据库
   conn.Open
End If


'删除
Dim sql As String, r$
Set rs = New ADODB.Recordset     '创建数据集对象的连接

sql = "delete from [设计计算] where  [管段编号]=' " & MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 0) & " ' "     '删除指定行
conn.Execute sql   '执行sql语句
MSHFlexGrid1.RemoveItem MSHFlexGrid1.Row

rs.Open sql, conn, adOpenKeyset, adLockBatchOptimistic

MsgBox "删除成功!"

'删除数据库中该行记录
Dim a As String
a = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 0)

'锁定到这条记录,然后查询并删除
txtSQL = "select * from [设计计算]  where [管段编号]= '" & a & "'"

Set rs = conn.ExecuteSQL(txtSQL, msgtext)     这行显示参数类型不匹配,或不在可以接受的范围内,或与其他参数冲突

conn.Close  '关闭连接
Set conn = Nothing   '释放变量

End Sub
3 回复
#2
show1472020-03-19 11:22

你用rs 删除数据并没有真正写入数据库, 要在后面加上 rs.update  ,  这样才真正的在数据库里删掉了记录,MSHFlexgrid控件绑定了数据表的,你数据表变了,只要刷新MSHFlexgrid1就行了,不用再删除相应MSHFlexgrid1 对应的行,即在这里rs.update后再加上去MSHFlexgrid1.Refresh 就可以了。  
好久没用过ado对象了,比较喜欢用Adodc控件,不知道你sql这样写行不行,你先看看问题解决没,不行的话在帮你查下以前资料
#3
凛冬12020-03-19 20:26
回复 2楼 show147
Private Sub Command2_Click()
'连接数据库
If conn.State = 0 Then
   conn.ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & _
 App.Path & "\设计计算.mdb;Persist Security Info=False"   '连接数据库的驱动字符串并打开数据库
   conn.Open
End If

'删除(有问题,按查询则删除的东西又回来了!)
Dim sql As String
Set rs = New ADODB.Recordset     '创建数据集对象的连接

Set rs.ActiveConnection = conn
sql = "delete from [设计计算] where  [管段编号]=' " & MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 0) & " ' "     '删除指定行
conn.Execute sql   '执行sql语句
MSHFlexGrid1.RemoveItem MSHFlexGrid1.Row
rs.Open sql, conn, adOpenKeyset, adLockBatchOptimistic
rs.Update
MSHFlexGrid1.Refresh
MsgBox "删除成功!"
conn.Close  '关闭连接
Set conn = Nothing   '释放变量
End Sub

是这样子么?可是还是在rs.update报错对象关闭时,不允许操作
#4
show1472020-03-21 17:11
Private Sub Command2_Click()
'连接数据库
If conn.State = 0 Then
   conn.ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & _
 App.Path & "\设计计算.mdb;Persist Security Info=False"   '连接数据库的驱动字符串并打开数据库
   conn.Open
End If

Dim sql As String
Set rs = New ADODB.Recordset     '创建数据集对象的连接

Set rs.ActiveConnection = conn
sql = "delete from [设计计算] where [管段编号]='" & MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 0) & "'"     '删除指定行
conn.Execute sql   '执行sql语句
rs.Open sql, conn, adOpenKeyset, adLockBatchOptimistic
MSHFlexGrid1.Refresh
MsgBox "删除成功!"
conn.Close  '关闭连接
Set conn = Nothing   '释放变量
End Sub

试试这样可以吗
1