我用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
     
     请高手瞧一下,这代码错在哪?请指正

解决方案 »

  1.   

    我提供思路:
    先把编号为12345678的记录删除,然后把编号大于12345678的记录编号都减1
    一共两据SQL语句.
      

  2.   

    你自己的思路也挺不错的,有出现什么错误吗?按你的三点要注意一下:
    1.recordno列不能是自动增长型的
    2.recordno列要是唯一值的
    3.先用Delete删除要删除的行,再用Update更新后面的recordno如果你现在的写法有什么错,不妨先把错误信息贴出来看看
      

  3.   

      Dim db As ADODB.Connection
    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   请高手指正
      

  4.   

      asftrhgjhkjlkttttttt你好! 我已发过去了!
      

  5.   

    你的错误在于把变量写成字符串写到SQL中去了, SQL处理器又怎么可能知道你在VB中的变量名是什么意思呢:
    "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 你就能知道你传给数据库的到底是什么命令了
      

  6.   

    修改如下:Private Sub Command2_Click()
        '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
      

  7.   

        在asftrhgjhkjlkttttttt(孤独剑)的帮助下,可以结贴.  代码:   Option ExplicitDim db As ADODB.Connection
    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(孤独剑)这样的高手,真是福气!!!!!!!!!!!!