数据库连接字:Conn.ConnectionString = "Provider=MSDAORA.1;Password=pwd;User ID=user;Data Source=orcl;Persist Security Info=True"(Rst是已定义的记录集) Public Rst As New ADODB.Recordset---------------------------------------------
数据表 t_user :
     id        varchar2(11) not null (序列生成)
     name      varchar2(20)
     salary    number(6,0)  
     birthday  date
--------------------------------------------     
在添加新记录时出现问题,如下:   Rst.AddNew
   Rst("id") = USER_SEQID.NEXTVAL
   Rst("name") = txtU1
   Rst("salary")=txtU2
   rst("birthday")=txtU3
   Rst.update
   
1、id是序列生成的,如何保存?
2、salary 是 number型字段,birthday 是date 型字段 ,
   运行时提示错误“多步操作产生错误。请检查每一步的状态值。”
   而name是字符型字段,运行时没有错误。   请问如何保存salary、birthday字段数据?   另,其实,可以用Insert into 语句保存数据,只是我要保存的字段数太多了。只好用上面的办法。我手里有一个例子,是用Insert into 保存序列号的语句。
   Insert into t_user(id) values(USER_SEQID.NEXTVAL)
   可是,如果用上面的Rs.Addnew方法,该如何保存?好了,我的问题主要是需要解决保存序列号、Number型、Data型数据。谢谢。
--------
UP有分

解决方案 »

  1.   

    将Rst("id") = USER_SEQID.NEXTVAL这句注释掉试试
      

  2.   

    序列要用SQL语句先求出来!!如下:rs.open "SELECT USER_SEQID.NEXTVAL AS ID FROM USER_SEQID",CNRst("id") = rs!
      

  3.   

    建议你找一本ORACLE PSQL 的书看一下~~~
      

  4.   

    ORACLE偶是沒有環境的但是序列生成,如果它自動生成的話,你那句話就可以不要如果是你人工判斷下一個序列號的時候,就要先去判斷, 但是不能寫  Rst("id") = USER_SEQID.NEXTVAL
      

  5.   

    http://expert.csdn.net/Expert/topic/3025/3025748.xml?temp=.2543451
    此贴也是这个问题,有人提出一些办法,只是不太明确,
    哪位能帮看看啊,楼主急死啦!!!我的面包哪去了??????
      

  6.   

    Rst.AddNew
       Rst!id = USER_SEQID.NEXTVAL
       Rst!name = txtU1
       Rst!salary=txtU2
       rst!birthday=txtU3
       Rst.update
    birthday是data型 你的数据库是用什么做的?VB还是office 的Access
    data型 不知道好像没有只有date日期型 字段。
      

  7.   

    序列要用SQL语句先求出来!!如下:rs.open "SELECT USER_SEQID.NEXTVAL AS ID FROM USER_SEQID",CNRst("id") = rs!ID或者Rst("id") = rs.Fields(0).values
      

  8.   

    另外,
       salary 是 number型字段,birthday 是date 型字段 ,
       运行时提示错误“多步操作产生错误。请检查每一步的状态值。”
       而name是字符型字段,运行时没有错误。   请问如何保存salary、birthday字段数据?   我用的是Oracle9i数据库
      

  9.   

    number型和date型的数据如何保存?给出例子好吗?
      

  10.   

    我说楼主,你先找一个简单的表试一下,表中不要有NUMBER和DATE型的字段,只有自增值,看看我给你的方法能不能存上,然后再解决其他的问题!!
      

  11.   

    试试: 
       Rst.AddNew
       Rst!id = USER_SEQID.NEXTVAL '这句不要
       Rst!name = Trim(txtU1)
       If Trim(txtU2)<>"" then
           Rst!salary=Trim(txtU2)
       End If
       rst!birthday=Format(txtU3,"yy-mm-dd") '这里用文本控件会有问题,最好使用日历控件
       Rst.update
      

  12.   

    关于Number和Date型的数据,我已经解决了。暂告一段落。
    现在问题集中在序列号问题上。
     我按照射天狼的办法,先求出下一个序列值,然后将值保存到新添加的记录中。  Dim rsID As New ADODB.Recordset
      rsID.Open "SELECT BIT.USER_SEQID.NEXTVAL AS id1 FROM BIT.USER_SEQID", Conn, adOpenKeyset, adLockOptimistic, adCmdText
      Rst("ID") = rsID(0)
      rsID.Close
      Set rsID = Nothing  Rst----是本人要添加的记录集。-------------------
    可是用这个办法后,运行时出现错误:ora-02201:sequence not allowed here
    怎么办?
      

  13.   

    SELECT BIT.USER_SEQID.NEXTVAL AS id1 FROM BIT.USER_SEQID
    你这句不对吧,你把这个放在ORACLE的查询分析器中执行一下,看看能否查到序列值,如果能查到在VB中就可以用!
    否则不行!!
      

  14.   

    Bit 是oracle的用户名,因为这个数据表是Bit拥有的。
    如果,我直接把 Rst("ID") = rsID(0) 改成 Rst("ID") = '35' 则运行正常
    注意,这个t_user表中的id是varchar2型的。
    请射天狼同志解决一下好吗?                  射天狼在不在?我的QQ: 47734819
      

  15.   

    我在 Oracle SQL*Plus 运行下面语句
    SELECT BIT.USER_SEQID.NEXTVAL AS id1 FROM BIT.USER_SEQID
    运行时出现错误:ora-02201:sequence not allowed here
    郁闷啊!这么说在VB中不能用了?
    难道只有Insert into...Values才是唯一的办法吗?
      

  16.   

    建议:检查一下bit用户下是否还有该序列,如果没有,重新创建一下。
    提示一下:起初的问题所在是USER_SEQID.NEXTVAL是sql语句,不能作为变量在VB中使用。
    建议如果对sql比较熟的话就直接用完整的sql语句吧,我个人认为sql语句的功能很强大,也很方便。
      

  17.   

    在ORACLE中执行也有错误说明你写的求序列的值的SQL语句有问题!!
    改为:SELECT USER_SEQID.NEXTVAL AS id1 FROM USER_SEQID
    试一下!!
    加用户名干什么,因为你连接数据库的时候已经指定用户名了!!
      

  18.   

    问题解决了,是用"SELECT BIT.USER_SEQID.NEXTVAL FROM DUAL" 获得序列值。
    不过还想问题一下,  Dim rsID As New ADODB.Recordset
      rsID.Open "SELECT BIT.USER_SEQID.NEXTVAL FROM DUAL", Conn, adOpenKeyset, adLockOptimistic, adCmdText
      Rst("ID") = rsID(0)            'Rst----是本人要添加的记录集。
      rsID.Close
      Set rsID = Nothing用这种办法获得序列值,会不会发生id值不唯一或者不确定等其它问题呢?因为,操作此表的不止一个用户,而是多个用户。
      

  19.   

    这个oracle数据表不是我建立的,是bit本人建立的,我的用户名是net,而且每个人对数据库的操作权限是不一样的。比如,修改、删除、查询等权限。
      

  20.   

    序列是ORACLE管理的,你取得一个之后,在序列表里就已经把这个值加到序列里了,其他人再读绝对不会取得和你一样的值,取序列的并发功能是ORACLE内部实现的,不用你费心了~~~~