我用vb+access+adodc1+datagrid,有3个字段,编号,账号,金额,在表中"编号"成12345678...连续要求实现在datagrid中任删除一行,字段编号仍保持12345678....连续. 思路,先取要删除行的"编号"值,删除后更新编号
代码 Dim db As ADODB.Connection
Dim rs As ADODB.Recordset
Dim r As Intege Private Sub Form_Load()
Command3.Visible = False
Set db = New ADODB.Connection
Set rs = New ADODB.Recordset
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\tyq.mdb;Persist Security Info=False;"
Adodc1.Recordset.MoveLast
End Sub Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) r = DataGrid1.Columns("编号").CellValue(DataGrid1.Book) '取得删除行的"编号" End Sub Private Sub Command2_Click()
Call DataGrid1_RowColChangeAdodc1.Recordset.Delete
sql = "update table set recordno=recordno-1 where recordno>r"
End Sub
请高手瞧一下,这代码错在哪?请指正
代码 Dim db As ADODB.Connection
Dim rs As ADODB.Recordset
Dim r As Intege Private Sub Form_Load()
Command3.Visible = False
Set db = New ADODB.Connection
Set rs = New ADODB.Recordset
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\tyq.mdb;Persist Security Info=False;"
Adodc1.Recordset.MoveLast
End Sub Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer) r = DataGrid1.Columns("编号").CellValue(DataGrid1.Book) '取得删除行的"编号" End Sub Private Sub Command2_Click()
Call DataGrid1_RowColChangeAdodc1.Recordset.Delete
sql = "update table set recordno=recordno-1 where recordno>r"
End Sub
请高手瞧一下,这代码错在哪?请指正
解决方案 »
- 怎样把exe文件转换为frm文件和vbp文件?
- 怎么只返回一条记录
- 有关进程的问题,好像比较难(在线待)我现在比较穷只有20分了谢谢高手了
- 有什么办法可以让FORM.SHOW 的时候不影响目前正在执行程序呢,尤其是全瓶播放或者是游戏 例如CS
- help!在线。。,怎样将ic卡的内容读出来并写到窗口中的各个显示控件中??
- 在Mdi程序中,如何在子Form退出之后自动显示进入此Form时所在的Mdi菜单?
- 如何稳定禁用window任务管理器,2000/98都要,没用不要回了,没时间试你的^^^^^^^^
- 怎么将图片添加到excel里
- 谁能帮我解释一下三层结构的定义?
- vb6.o中如何注册dll,ocx
- 在服务程序中调用Excel打印功能(Windows server 2000)
- 在不用控件的前提下,如何快速画多个按钮而不拖慢系统?
先把编号为12345678的记录删除,然后把编号大于12345678的记录编号都减1
一共两据SQL语句.
1.recordno列不能是自动增长型的
2.recordno列要是唯一值的
3.先用Delete删除要删除的行,再用Update更新后面的recordno如果你现在的写法有什么错,不妨先把错误信息贴出来看看
Dim rs As ADODB.Recordse
Dim r As Integer
Private Sub Command2_Click()
db.Execute "alter table biao add recordno int(2)" -----这地方有错误db.Execute "delete from table where recordno=r ----这地方有毛病
db.Execute "update table set recordno=recordno-1 where recordno> r" ---这地方有毛病
db.CloseEnd SubPrivate Sub Command3_Click()
Form1.Refresh
Adodc1.Refresh
DataGrid1.Refresh
Adodc1.Recordset.MoveFirst
Adodc1.Recordset.MoveLastEnd SubPrivate Sub Form_Load()
Command3.Visible = False
Set db = New ADODB.Connection
Set rs = New ADODB.Recordset
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\tyq.mdb;Persist Security Info=False;"
Adodc1.Recordset.MoveLastEnd Sub
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)r = DataGrid1.Columns("编号").CellValue(DataGrid1.Book)End Sub 请高手指正
"delete from table where recordno=r" 这里你把变量r写在字符串里,那它就不再是你程序中的变量了,它只能代表字符串中的一个字符而已
最好这么写:
DIM SQLSTR AS STRING
SQLSTR= "delete from table where recordno=" & r
DB.EXECUTE SQLSTR你还可以在EXECUTE之前加一句: DUBEG.PRINT SQLSTR 你就能知道你传给数据库的到底是什么命令了
'db.Execute "alter table biao add no int(2)" '这一句有问题
'db.Execute "delete from table where No=r" '这一句也有问题
'db.Execute "update table set r=r-1 where r> r"
'db.Close Adodc1.Recordset.Delete
rs.Open "update biao set 编号=编号-1 where 编号>" & r, db, adOpenKeyset, adLockOptimistic
Timer1.Interval = 1000 '间隔1秒
Timer1.Enabled = True
End SubPrivate Sub Timer1_Timer()
Timer1.Enabled = False
Call Command3_Click
End Sub
Dim rs As ADODB.Recordset
Dim dmin As Integer
Dim r As Integer
Dim recordNo As IntegerPrivate Sub Command1_Click()
Dim dmin As Integer
rs.Open "select max(编号) as [dmin] from biao", db, adOpenKeyset, adLockOptimistic
dmin = Val(rs(0).Value)
Adodc1.Recordset.AddNew
rs.Close
Adodc1.Recordset.Fields("编号") = dmin + 1
Adodc1.Recordset.Fields("账号") = Val(Text1.Text)
Adodc1.Recordset.Fields("金额") = Val(Text2.Text)
Adodc1.Recordset.Update
Adodc1.Recordset.MoveFirst
Adodc1.Recordset.MoveLast
Adodc1.Refresh
DataGrid1.Refresh
Call Command3_Click
End SubPrivate Sub Command2_Click()
Adodc1.Recordset.Delete
rs.Open "update biao set 编号=编号-1 where 编号>" & r, db, adOpenKeyset, adLockOptimistic
Timer1.Enabled = True
End SubPrivate Sub Command3_Click()
Form1.Refresh
Adodc1.Refresh
DataGrid1.Refresh
Adodc1.Recordset.MoveFirst
Adodc1.Recordset.MoveLastEnd SubPrivate Sub Form_Load()
Timer1.Enabled = False
Command3.Visible = False
Set db = New ADODB.Connection
Set rs = New ADODB.Recordset
db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\tyq.mdb;Persist Security Info=False;"
Adodc1.Recordset.MoveLastEnd Sub
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
On Error Resume Next
r = DataGrid1.Columns("编号").CellValue(DataGrid1.Book)
End SubPrivate Sub Timer1_Timer()
Timer1.Enabled = False
Call Command3_Click
End Sub 这是一个输入数据自动编号,任删除一行编号连续的源码. 在csdn能碰上asftrhgjhkjlkttttttt(孤独剑)这样的高手,真是福气!!!!!!!!!!!!