Private Sub Command5_Click()
  ''''''新建班级''''''''''''''''''''''
  If iso = False Then
    iso = True
    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist        Security Info=False;Data Source=C:\Documents and Settings\Administrator\My Documents\xsgl\stu.mdb"
    cn.open
    End If                                    ◆①毛病出在此↓
    rs.open "insert into 班级(专业,年级,班级,人数) values( combo1(0).text ,combo1(1).text,combo1(2).text,combo1(3).text) ", cn, adOpenStatic, adLockOptimistic
    
end sub
     问:①提示定界符有问题
         ②rs.open的最后的两个参数是什么意思?
         ③动态的插入了数据以后,我想显示出全部的记录,该怎么做?
      是不是直接
           rs.open "select * from 班级",vn,adOpenStatic,adLockOptimistic
           set datagrid1.datasource=rs
       就可以了?

解决方案 »

  1.   


    rs.open "insert into 班级(专业,年级,班级,人数) values( '" & combo1(0).text & "' ,'" & combo1(1).text & "','" & combo1(2).text & "', " & combo1(3).text & ")" , cn, adOpenStatic, adLockOptimistic
      

  2.   

    cn.execute  "insert into 班级(专业,年级,班级,人数) values('" & Combo1(0).Text & "','" & Combo1(1).Text & "','" & Combo1(2).Text & "'," & Combo1(3).Text & ") "
      

  3.   

    adOpenStatic, adLockOptimisticadOpenStatic 提供一个位于recordset静态拷贝上的可滚动游标,类似于snapshot类型的dao.recordset,但多了可更新特性 adLockOptimistic使用乐观锁(仅在更新过程中才锁定记录或页面)
      

  4.   

    locktype属性用到的常数
    常数 含义 
    adlockrecordonly 指定只读访问(默认值) 
    adlockbatchoptimistic 使用批量更新模式而不是默认的立即更新模式 
    adlockoptimistic 使用乐观锁(仅在更新过程中才锁定记录或页面) 
    adlockpessimistic 使用悲观锁(编辑或更新整个过程中均锁定记录或页面) 
    cursortype属性用到的常数
    常数 含义 
    adopenforwardonly 提供单向移动游标和只读recordset(默认值) 
    adopendynamic 提供可滚动游标,可显示其他用户对recordset所做的改动(包括添加新记录) 
    adopenkeyset 提供可滚动游标,只隐藏其他用户所做的改动,类似于dynaset类型的dao.recordset 
    adopenstatic 提供一个位于recordset静态拷贝上的可滚动游标,类似于snapshot类型的dao.recordset,但多了可更新特性 
    --------------显示出全部的记录 
       Rs.CursorLocation = adUseClient
        Rs.Open "select * from 班级", CN, adOpenDynamic, adLockOptimistic
       Set DataGrid1.DataSource = Rs
      

  5.   

    ①提示定界符有问题
    Re:
    最好不要用rs来执行insert\ delete等命令,它一般用来执行查询(select)的,可以改成:
    cn.Execute "insert into 班级(专业,年级,班级,人数)" _
            & " select '" & Combo1(0).Text & "','" & Combo1(1).Text & "','" & Combo1(2).Text & "'," & Combo1(3).Text _
            , , adExecuteNoRecords
    此处注意:因为人数是数字类型,故不需要加单引号,其他的字符类型需要加!②rs.open的最后的两个参数是什么意思?
    Re:
    CursorType 属性   指示在 Recordset 对象中使用的游标类型。设置和返回值设置或返回以下某个 CursorTypeEnum 值。常量 说明 
    AdOpenForwardOnly 仅向前游标,默认值。除了只能在记录中向前滚动外,与静态游标相同。当只需要在记录集中单向移动时,使用它可提高性能。 
    AdOpenKeyset 键集游标。尽管从您的记录集不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,键集游标与动态游标相似。仍然可以看见其他用户更改的数据。 
    AdOpenDynamic 动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书签操作。 
    AdOpenStatic 静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。 LockType 属性
          指示编辑过程中对记录使用的锁定类型。设置和返回值设置或返回以下某个 LockTypeEnum 的值。常量 说明 
    adLockReadOnly 默认值,只读。无法更改数据。 
    adLockPessimistic 保守式记录锁定(逐条)。提供者执行必要的操作确保成功编辑记录,通常采用编辑时立即锁定数据源的记录的方式。 
    adLockOptimistic 开放式记录锁定(逐条)。提供者使用开放式锁定,只在调用 Update 方法时锁定记录。 
    adLockBatchOptimistic 开放式批更新。用于与立即更新模式相反的批更新模式。 ③动态的插入了数据以后,我想显示出全部的记录,该怎么做?
          是不是直接
               rs.open "select * from 班级",vn,adOpenStatic,adLockOptimistic
               set datagrid1.datasource=rs
           就可以了?
    Re:是的,但是需要设置cn.CursorLocation = adUseClient
            才能用set datagrid1.datasource=rs
      

  6.   

    谢谢还有几个简单的问题.
    1.   cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist        Security Info=False;Data Source=C:\Documents and Settings\Administrator\My Documents\xsgl\stu.mdb"
      此句中的provider不选择3.51可以么?这是什么意思?
    2.
       在我插入了记录以后,如果直接显示,将会显示为空,可是我如果先close,再open就可以了,为什么?
    3.  
       定义中的
           dim cn as new connection   和   dim cn as new odbc.connection 有什么区别?
        我用的就是前一种,可是结果也是完全正确啊,这是为何?
      

  7.   

    1.   cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist        Security Info=False;Data Source=C:\Documents and Settings\Administrator\My Documents\xsgl\stu.mdb"
      此句中的provider不选择3.51可以么?这是什么意思?  数据库引擎的版本号。3.51 对应与 Access 97。2.
       在我插入了记录以后,如果直接显示,将会显示为空,可是我如果先close,再open就可以了,为什么?
       
       加上一句:
       rs.Requery3.  
       定义中的
           dim cn as new connection   和   dim cn as new odbc.connection 有什么区别?
        我用的就是前一种,可是结果也是完全正确啊,这是为何?    dim cn as new connection 选择缺省的数据库引擎连接对象,一般等于dim cn as new ADODB.connection ;dim cn as new odbc.connection 则指定使用 ODBC 引擎的连接对象。
       
      

  8.   

    谢谢啊现在有了如下的问题:
           1.要将一个数据库表中的记录的三个属性加入到三个combo中,该怎么做?是用普通的combo还是用那个datacombo?
           该怎么加入呢?
           2.怎么样才可以只显示符合条件的某条记录?比如说是第一条,或者是下一条,或者是前三条,或者是全部?/
           3.怎么样可以判断一下如果我这个表中有的记录就不再加入新的了?然后给用户一个提示?
      

  9.   

    谢谢啊现在有了如下的问题:
           1.要将一个数据库表中的记录的三个属性加入到三个combo中,该怎么做?是用普通的combo还是用那个datacombo?
           !!!没用过datacombo,不过这个好像也只为加强了与adodc控件配合使用吧?我一般用combo!顺便问一下,哪种类型的combo的Item能有tag属性,呵,可以保存主键啊!
           该怎么加入呢?
           2.怎么样才可以只显示符合条件的某条记录?比如说是第一条,或者是下一条,或者是前三条,或者是全部?/
           !!!用游标!不过我想一般上一条,下一条够用了.
           3.怎么样可以判断一下如果我这个表中有的记录就不再加入新的了?然后给用户一个提示?
           !!!sql="select * from tablename where name='xxx'"
              rst.open sql ....
              if rst.eof=false then
                 msgbox "已经存在!"
              else
                sqlstring="insert..."
                cnn.execute sqlstring
              end if
      

  10.   

    射天狼说:工程->引用->Microsoft ActiveX Data Objects 2.0 Library (后面为版本号)
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.RecordsetPrivate Sub Combo1_Click()
        rs.Open "SELECT * FROM TABLENAME WHERE NAME = '" & txtName.Text & "'", cn, adOpenDynamic, adLockOptimistic
        While Not rs.EOF Then
               Combo1.AddItem trim(rs!name)
               
               rs.MoveNext
        Wend
        
    End SubPrivate Sub Form_Load()
        cn.ConnectionString = "DSN=SCM_ACCESS;pwd=;uid="
        cn.Open
        '查询字符串可以上这里查
        'http://www.connectionstrings.com/
    End Sub
      

  11.   

    又有一问:
         插入记录代码如下:
         Private Sub xinjj_Click()
         ①inzhy$ = InputBox("请输入想新建的专业的名称:", "新建专业")
         ②If iso = flase Then
           cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=C:\Documents and Settings\Administrator\My Documents\xsgl\stu.mdb"
           cn.open
           iso = True
         Else
           rs.Close
         End If
      If Len(inzhy) = 0 Then
         MsgBox "专业不能为空", vbCritical + vbOKOnly, "添加专业出错"
      Else
         cn.Execute "insert into 专业 values ( '" & inzhy & "' )"
         cn.CursorLocation = adUseClient
         rs.open "select * from 专业", cn, adOpenStatic, adLockOptimistic
         Set DataGrid1.DataSource = rs
      End If
    End Sub
    问:1.
         我的inputbox中如果输入英文,很好,可是一输入中文,在对话框中就成了乱码,但是保存在数据库中,倒是完好的.这是为何/
       2.
         大家都看的出我用一个iso标志了数据库是否被打开,原因是我如果不判断数据库是否打开,也就是如果数据库如果打开了我再用rs.open,就会提示:在数据库打开时,该操作不可用.这是为什么?
    难道就非要加上rs.close么?
       3.
         第一次我新建数据库时,完全正确,但是如果在此基础上,再新建一个时,在datagrid显示时,提示,此行不可用.点确定以后,数据却被完好的+入了.为何?
       4.
      

  12.   

    问:1.
         我的inputbox中如果输入英文,很好,可是一输入中文,在对话框中就成了乱码,但是保存在数据库中,倒是完好的.这是为何/
       没懂.在inputbox还是在哪?我的机器上inputbox正常!
       2.
         大家都看的出我用一个iso标志了数据库是否被打开,原因是我如果不判断数据库是否打开,也就是如果数据库如果打开了我再用rs.open,就会提示:在数据库打开时,该操作不可用.这是为什么?
     难道就非要加上rs.close么?
      判断cn自已就有标志.cn.state=value
      adStateClosed 默认,指示对象是关闭的。 
      adStateOpen 指示对象是打开的。 
      adStateConnecting 指示 Recordset 对象正在连接。 
      adStateExecuting 指示 Recordset 对象正在执行命令。 
      adStateFetching 指示 Recordset 对象的行正在被读取 
      更改你的代码:
      if cn.state=adstateclose then  '如果是关闭的才打开.
         cn.open
      endif
      rst.open  ....,cn.....
       3.
         第一次我新建数据库时,完全正确,但是如果在此基础上,再新建一个时,在datagrid显示时,提示,此行不可用.点确定以后,数据却被完好的+入了.为何?
       这个俺是不会了,俺从不用这个控件!