★急!VB + ADO + Oracle 添加数据出现问题★

奋斗一生的程序员 2004-04-30 05:01:24
数据库连接字: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有分
...全文
183 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ranma_True 2004-05-09
  • 打赏
  • 举报
回复
mark
射天狼 2004-05-09
  • 打赏
  • 举报
回复
序列是ORACLE管理的,你取得一个之后,在序列表里就已经把这个值加到序列里了,其他人再读绝对不会取得和你一样的值,取序列的并发功能是ORACLE内部实现的,不用你费心了~~~~
  • 打赏
  • 举报
回复
这个oracle数据表不是我建立的,是bit本人建立的,我的用户名是net,而且每个人对数据库的操作权限是不一样的。比如,修改、删除、查询等权限。
  • 打赏
  • 举报
回复
问题解决了,是用"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值不唯一或者不确定等其它问题呢?因为,操作此表的不止一个用户,而是多个用户。
射天狼 2004-05-08
  • 打赏
  • 举报
回复
在ORACLE中执行也有错误说明你写的求序列的值的SQL语句有问题!!
改为:

SELECT USER_SEQID.NEXTVAL AS id1 FROM USER_SEQID
试一下!!
加用户名干什么,因为你连接数据库的时候已经指定用户名了!!
xijiejing 2004-05-08
  • 打赏
  • 举报
回复
建议:检查一下bit用户下是否还有该序列,如果没有,重新创建一下。
提示一下:起初的问题所在是USER_SEQID.NEXTVAL是sql语句,不能作为变量在VB中使用。
建议如果对sql比较熟的话就直接用完整的sql语句吧,我个人认为sql语句的功能很强大,也很方便。
  • 打赏
  • 举报
回复
我在 Oracle SQL*Plus 运行下面语句
SELECT BIT.USER_SEQID.NEXTVAL AS id1 FROM BIT.USER_SEQID
运行时出现错误:ora-02201:sequence not allowed here
郁闷啊!这么说在VB中不能用了?
难道只有Insert into...Values才是唯一的办法吗?


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

射天狼在不在?我的QQ: 47734819
射天狼 2004-05-08
  • 打赏
  • 举报
回复
SELECT BIT.USER_SEQID.NEXTVAL AS id1 FROM BIT.USER_SEQID
你这句不对吧,你把这个放在ORACLE的查询分析器中执行一下,看看能否查到序列值,如果能查到在VB中就可以用!
否则不行!!
  • 打赏
  • 举报
回复
关于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
怎么办?
  • 打赏
  • 举报
回复
^
  • 打赏
  • 举报
回复
number型和date型的数据如何保存?给出例子好吗?
  • 打赏
  • 举报
回复
是date,不是data型
  • 打赏
  • 举报
回复
另外,
salary 是 number型字段,birthday 是date 型字段 ,
运行时提示错误“多步操作产生错误。请检查每一步的状态值。”
而name是字符型字段,运行时没有错误。

请问如何保存salary、birthday字段数据?

我用的是Oracle9i数据库
射天狼 2004-05-06
  • 打赏
  • 举报
回复
序列要用SQL语句先求出来!!如下:

rs.open "SELECT USER_SEQID.NEXTVAL AS ID FROM USER_SEQID",CN

Rst("id") = rs!ID

或者

Rst("id") = rs.Fields(0).values
flc 2004-05-06
  • 打赏
  • 举报
回复
学习
vbman2003 2004-05-06
  • 打赏
  • 举报
回复
试试:
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
射天狼 2004-05-06
  • 打赏
  • 举报
回复
我说楼主,你先找一个简单的表试一下,表中不要有NUMBER和DATE型的字段,只有自增值,看看我给你的方法能不能存上,然后再解决其他的问题!!
Abyss-Xu 2004-05-03
  • 打赏
  • 举报
回复
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日期型 字段。
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/3025/3025748.xml?temp=.2543451
此贴也是这个问题,有人提出一些办法,只是不太明确,
哪位能帮看看啊,楼主急死啦!!!我的面包哪去了??????
加载更多回复(6)

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧