数据库连接字: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有分
数据表 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有分
此贴也是这个问题,有人提出一些办法,只是不太明确,
哪位能帮看看啊,楼主急死啦!!!我的面包哪去了??????
Rst!id = USER_SEQID.NEXTVAL
Rst!name = txtU1
Rst!salary=txtU2
rst!birthday=txtU3
Rst.update
birthday是data型 你的数据库是用什么做的?VB还是office 的Access
data型 不知道好像没有只有date日期型 字段。
salary 是 number型字段,birthday 是date 型字段 ,
运行时提示错误“多步操作产生错误。请检查每一步的状态值。”
而name是字符型字段,运行时没有错误。 请问如何保存salary、birthday字段数据? 我用的是Oracle9i数据库
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
现在问题集中在序列号问题上。
我按照射天狼的办法,先求出下一个序列值,然后将值保存到新添加的记录中。 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
怎么办?
你这句不对吧,你把这个放在ORACLE的查询分析器中执行一下,看看能否查到序列值,如果能查到在VB中就可以用!
否则不行!!
如果,我直接把 Rst("ID") = rsID(0) 改成 Rst("ID") = '35' 则运行正常
注意,这个t_user表中的id是varchar2型的。
请射天狼同志解决一下好吗? 射天狼在不在?我的QQ: 47734819
SELECT BIT.USER_SEQID.NEXTVAL AS id1 FROM BIT.USER_SEQID
运行时出现错误:ora-02201:sequence not allowed here
郁闷啊!这么说在VB中不能用了?
难道只有Insert into...Values才是唯一的办法吗?
提示一下:起初的问题所在是USER_SEQID.NEXTVAL是sql语句,不能作为变量在VB中使用。
建议如果对sql比较熟的话就直接用完整的sql语句吧,我个人认为sql语句的功能很强大,也很方便。
改为:SELECT USER_SEQID.NEXTVAL AS id1 FROM USER_SEQID
试一下!!
加用户名干什么,因为你连接数据库的时候已经指定用户名了!!
不过还想问题一下, 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值不唯一或者不确定等其它问题呢?因为,操作此表的不止一个用户,而是多个用户。