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

奋斗一生的程序员 2004-04-30 05:08:43
数据库连接字: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有分
...全文
38 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
^
  • 打赏
  • 举报
回复
关于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
怎么办?

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

射天狼在不在?我的QQ: 47734819
flymoon 2004-05-08
  • 打赏
  • 举报
回复
number型和date型的数据如何保存?给出例子好吗?
  • 打赏
  • 举报
回复
number型和date型的数据如何保存?给出例子好吗?
  • 打赏
  • 举报
回复
另外,
salary 是 number型字段,birthday 是date 型字段 ,
运行时提示错误“多步操作产生错误。请检查每一步的状态值。”
而name是字符型字段,运行时没有错误。

请问如何保存salary、birthday字段数据?
射天狼 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).value
billyuhui 2004-05-05
  • 打赏
  • 举报
回复
你可以用SELECT USER_SEQID.NEXTVAL FROM DUAL 先得到序列号!
flymoon 2004-05-03
  • 打赏
  • 举报
回复
哪位能帮看看啊,楼主急死啦!!!我的面包哪去了??????
  • 打赏
  • 举报
回复
哪位能帮看看啊,楼主急死啦!!!我的面包哪去了??????
  • 打赏
  • 举报
回复
lvjack(叶飞)
----------------
你的方法我试过了,可行。我是想知道另外如题所示的办法如何实现,原因不想多说。

glsensor(超能胶)
-----------------
抱歉,我没用过odbc。

gechangwei(葛长伟)
-----------------
如何取出的USER_SEQID.NEXTVAL值?
lvjack 2004-04-30
  • 打赏
  • 举报
回复
直接用SQL多好??
strsql = "insert into t_user values (USER_SEQID.NEXTVAL,'" & _
txtU1 + "'," & _
txtU2 + ",to_date('" & _
txtU3 + "','yyyy-mm-dd')"
conn.Execute (strSQL)

glsensor 2004-04-30
  • 打赏
  • 举报
回复
可以用触发器作insert before给字段赋值。

不过我反问一个问题,我也用VB的ADO对象+ODBC对oracle插入数据,
连接字符串=Provider=MSDASQL.1;Password=123;Persist Security Info=True;User ID=alert_user;Data Source=localDB
但是在执行以下语句时
rs.AddNew
rs("A")="abcedf"
rs.Update
报错
[Oracle][ODBC][Ora]ORA-03113: 通信通道的文件结束
直接执行INSERT就没问题,但是我需要INSERT的字段是很大的字符串且有很多非法字符的HTML源码,所以只能用给对象赋值的方法。
有解决过这个问题吗?
gechangwei 2004-04-30
  • 打赏
  • 举报
回复
这种方式下我觉得只能先取出USER_SEQID.NEXTVAL值,然后再赋值。

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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