我用vb+access+adodc1+datagrid 
  有3个字段,编号,账号,金额.我在datagrid中新增记录,只输入账号,金额,编号自动加1成12345678....连续    Dim db As ADODB.Connection    
Dim rs As ADODB.Recordset    
Dim dmin As IntegerPrivate Sub Command3_Click()
Dim dmin As Integer
rs.Open "select max(编号) as [dmin] from biao", db, adOpenKeyset, adLockOptimistic
    
    rs.Close
    
    
    
    Adodc1.Recordset.Fields("编号") = dmin + 1
    Adodc1.Recordset.Fields("账号") = Text1.Text
    Adodc1.Recordset.Fields("金额") = Text2.Text
    Adodc1.Refresh
    DataGrid1.RefreshEnd Sub
Private Sub Form_Load()
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;"
End Sub   请问高手这代码错在哪?请指正!

解决方案 »

  1.   

    Private Sub Command3_Click() 
    Dim dmin As Integer 
    rs.Open "select max(编号) as [dmin] from biao", db, adOpenKeyset, adLockOptimistic 
        
        dmin= val(rs(0).Value)  '少了这一句
       
        rs.Close 
        
        Adodc1.Recordset.Fields("编号") = dmin + 1 
        Adodc1.Recordset.Fields("账号") = Text1.Text 
        Adodc1.Recordset.Fields("金额") = Text2.Text 
        Adodc1.Refresh 
        DataGrid1.Refresh End Sub 
      

  2.   

      Adodc1.Recordset.Fields("编号") = dmin + 1   这一句显示"对象变量或with块变量未设置"请1楼高手指点!
      

  3.   


    Adodc1.Recordset.Fields("编号") = Adodc1.Recordset.RecordCount + 1这样试试
      

  4.   

    Adodc1.Recordset.Fields("编号") = Adodc1.Recordset.RecordCount + 1   这样用后,确实连续,但当你关闭后再打开输入数据,它会从第一行开始,编号仍连续,但账号,金额两字段的数却从第一行开始,覆盖了原来的数字,怎办???高手指正!!!
      

  5.   

        dmin= val(rs(0).Value) 
          Adodc1.Recordset.AddNew    '加上这一句
         rs.Close     Adodc1.Recordset.Fields("编号") = dmin + 1 
        Adodc1.Recordset.Fields("账号") = Text1.Text 
        Adodc1.Recordset.Fields("金额") = Text2.Text 
          Adodc1.Recordset.update    '加上这一句  
        Adodc1.Refresh 
        DataGrid1.Refresh 
      

  6.   

    sql语句上加个order by 编号 desc ,逆序排序
      

  7.   

         Dim db As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim dmin 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.Refresh
        DataGrid1.RefreshEnd SubPrivate Sub Command2_Click()
    Adodc1.Recordset.Delete
    End SubPrivate Sub Form_Load()
    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;"End Sub   不行,主要问题是关闭再打开,账号,金额两字段的数字只在第一行显示.不换行,不形成在上一次数据之后添加,编号却连续并正常显示,请问高手昨办????? 
      

  8.   

    在Command1_Click里最后加上
    Adodc1.Recordset.MoveFirst
    Adodc1.Recordset.MoveLast

        Adodc1.Refresh 
        DataGrid1.Refresh 这是个小问题,如果还不行,将工程发过来 [email protected]
      

  9.   

    rs.Close 
        
        
        
        Adodc1.Recordset.Fields("编号") = dmin + 1 
        Adodc1.Recordset.Fields("账号") = Text1.Text 
        Adodc1.Recordset.Fields("金额") = Text2.Text 把以上的修改为:
    rs.Fields("编号") = dmin + 1 
    rs.Fields("账号") = Text1.Text 
    rs.Fields("金额") = Text2.Text 你使用了ADO对象,根本就不需要Adodc1控件了,多余。另外,给你三个使用ADO对象操作Access数据库的函数,每次操作只需要带入参数即可,很方便。
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    '函数功能:连接指定的数据库 
    '参数说明:cnnP:数据库连接对象; 
    '        :adoP:数据集存储对象; 
    '        :strPath:数据库路径; 
    '        :strPassword:数据库密码; 
    '返回说明:True:连接成功  False:连接失败 
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    Public Function funConnectDataBase(cnnP As ADODB.Connection, adoP As ADODB.Recordset, ByVal strPath As _ 
        String, ByVal strPassword As String) As Boolean 
    On Error GoTo errFunction 
        Set cnnP = New ADODB.Connection 
        Set adoP = New ADODB.Recordset 
        cnnP.Provider = "Microsoft.Jet.OLEDB.4.0" 
        cnnP.Open "Data Source = " & strPath & ";jet oledb:database password=" & strPassword 
        funConnectDataBase = True 
        Exit Function 
    errFunction: 
        funConnectDataBase = False 
    End Function 
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    '函数功能:关闭数据库连接对象和数据文件的关联 
    '参数说明:cnnP:数据库连接对象; 
    '        :adoP:数据库存储对象; 
    '返回说明:True:关闭连接成功  False:关闭连接失败 
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    Public Function funCloseDataBase(cnnP As ADODB.Connection, adoP As ADODB.Recordset) As Boolean 
    On Error GoTo errFunction 
        Set adoP = Nothing 
        Set cnnP = Nothing 
        funCloseDataBase = True 
        Exit Function 
    errFunction: 
        funCloseDataBase = False 
    End Function 
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    '过程功能:对指定的对象执行指定的SQL语句 
    '参数说明:cnnP:ADO连接对象 
    '        :adoP:ADO记录集对象 
    '        :strSql:SQL语句 
    '        :bolQueryRecord:是否是查询记录集 
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Public Sub subExcuteSQL(cnnP As ADODB.Connection, adoP As ADODB.Recordset, strSql As String, bolQueryRecord _ 
        As Boolean) 
        If bolQueryRecord Then  '如果是查询记录集 
            adoP.Open strSql, cnnP, adOpenStatic, adLockBatchOptimistic 
        Else 
            cnnP.Execute strSql 
        End If 
    End Sub 
      

  10.   

       非常感谢高手asftrhgjhkjlkttttttt给我改好的能运行的源码,
     代码如下:
     Dim db As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim dmin 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.AddNew
        
        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
    End 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
       以上代码希能给初学者以帮助!再次感谢高手asftrhgjhkjlkttttttt   !!!!