注册 登录
编程论坛 VB6论坛

vb怎么用mshflexgrid实时删除、清空数据库

凛冬1 发布于 2020-03-25 21:41, 4044 次点击
请教各位大神们,我这个为什么总是删除不了数据库的内容,只是把当前mshflexgrid表格上的数据删了,下次再查询的时候原来删除的内容依旧还在?我用了rs.Update    MSHFlexGrid1.Refresh都没有反应,要么就是报错对象关闭时不允许操作。
还有清空的话清空不了mshflexgrid表格,只有下次再打开这个表格或者再次查询的时候才显示把表格清空了??

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  
MSHFlexGrid1.RemoveItem MSHFlexGrid1.Row
rs.Open sql, conn, adOpenKeyset, adLockBatchOptimistic

Dim i%
For i = 1 To MSHFlexGrid1.rows - 1
 MSHFlexGrid1.TextMatrix(i, 0) = i
Next
conn.Close  
Set conn = Nothing   
End Sub

'清空
Private Sub Command12_Click()
Dim sql$
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

sql = " Delete  from [设计计算] "
 conn.Execute sql
 MsgBox "已清空"
 conn.Close
End Sub
10 回复
#2
wufuzhang2020-03-26 09:21
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Test.mdb"
conn.Execute "delete * from testdata where TSID='100'" ''删除TSID为100的那条记录
两点:1、我不知道你为什么要加[] 2、where后面这么多空格,且=后面也不应该有空格
#3
凛冬12020-03-26 11:04
[]是因为那是字段名称,不加[]容易识别错误。空格没有影响吧?
#4
风吹过b2020-03-26 12:54
在手机上,没看代码,只提下程序优化
1,连接数据库的代码段,建议单独做一个过程。
2,执行sql命令的建议单独做一个过程,查询的单独也做个过程。
需要删除时,把sql命令传进去就可以。免得同样的代码倒处都有,如果需要修改下,那就好烦了。

字段名,表名写中括号是个好习惯。
#5
ZHRXJR2020-03-27 12:25
点击 MSFlexGrid1 中的记录,就可以直接删除一条记录
只有本站会员才能查看附件,请 登录

在 MSFlexGrid1_Click 事件中删除,按钮事件不能操作MSFlexGrid1对象
程序代码:

Private Sub MSFlexGrid1_Click()
'删除
Dim I As String
Call KKK(conn)
sql = "delete from 设计计算 where  管段编号='" & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 2) & "'"
conn.Execute sql
conn.Close
Set conn = Nothing
MsgBox "删除成功!"
Unload Me
删除清空数据库.Show
End Sub

Sub KKK(conn)
conn.ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & App.Path & "\设计计算.mdb;Persist Security Info=False"
conn.Open
End Sub

至于全部清空代码将不贴上来了。
#6
凛冬12020-03-27 15:28
回复 5楼 ZHRXJR
我运行完了打开数据库依旧没有删除。如果直接点击mshflexgrid就删除的话万一用户不小心点到了某一行怎么办
#7
ZHRXJR2020-03-27 15:50
加一个判断是否要删除将可以了。
程序代码:
Private Sub MSFlexGrid1_Click()
'删除
If MsgBox("是否要确定删除这条记录?", 33, "删除确认!") = 1 Then
    Call KKK(conn)
    sql = "delete from 设计计算 where  管段编号='" & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 2) & "'"
    conn.Execute sql
    conn.Close
    Set conn = Nothing
    MsgBox "删除成功!"
    Unload Me
    删除清空数据库.Show
End If
End Sub

如果按照我的代码,不可能没有删除,除非您的mdb是以前打开的!
#8
凛冬12020-03-27 21:30
我是运行完了才打开mdb的,mdb真的没有变化,只是mshflexgrid上数据删掉了
#9
ZHRXJR2020-03-28 10:55
回复 8楼 凛冬1
你的代码发上来看看,我的代码一点问题都没有.
#10
凛冬12020-03-28 17:06
程序代码:
Private Sub MShFlexGrid1_Click()
'删除
Dim i As String
Call KKK(conn)
sql = "delete from [设计计算] where  [管段编号]='" & MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 2) & "'"
conn.Execute sql
conn.Close
Set conn = Nothing
MsgBox "删除成功!"
End Sub

Sub KKK(conn)
conn.ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & App.Path & "\设计计算.mdb;Persist Security Info=False"
conn.Open
End Sub


mdb一直没有动静,因为我只是要删一行,所以把你那个Unload Me    删除清空数据库.Show   这段代码删了,界面上mshflexgrid也没有反应,但是会弹出“删除成功!”
#11
ZHRXJR2020-03-30 21:12
sql = "delete from [设计计算] where  [管段编号]='" & MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 2) & "'"
VB的ADO不支持操作mdb数据库时将数据库名、字段名用方括号括起来,上面已经说过了,为什么还要这样!!怪不得删除不了记录!!!
sql = "delete from 设计计算 where  管段编号='" & MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 2) & "'"

[此贴子已经被作者于2020-3-30 21:14编辑过]

1