关于oracle的addnew问题,大家看看

cslf 2004-11-18 03:21:56
表结构如下:
CREATE TABLE JTDAMS.JT_DICT1
(
ID CHAR(10),
DH CHAR(10) NOT NULL,
MZ CHAR(10) NOT NULL,
LX CHAR(10) NOT NULL,
FLAG CHAR(1) DEFAULT 'N' NOT NULL,
CONSTRAINT PRI_JT_DICT1 PRIMARY KEY (DH, LX)
)
/
vb测试代码如下:
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Private Sub Command1_Click()
qzh = "121"
qzm = "qwqw"
rs.CursorLocation = 3
sqlstr = "select * from jt_dict1"
rs.Open sqlstr, conn, 1, 3
rs.AddNew
rs("dh") = CStr(qzh)
rs("lx") = "#QZ#"
rs("mz") = CStr(qzm)
rs.Update'执行到这里死机。
End Sub

说明:win2000+vb6+sp6+oracle815。上面的例子在access2000里正常,或者用execute也正常。用asp执行类似代码,iis马上死掉。
...全文
131 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
射天狼 2004-11-18
  • 打赏
  • 举报
回复
不同的数据库对SQL语句及事务的处理有很大的差别的!!
解决之后记住,这就是经验~~~~~~~
阿泰 2004-11-18
  • 打赏
  • 举报
回复
oracle的自增字段用起来稍微烦琐些

我们的实现思路是这样的

做一个临时ID表,保存ID列表,
每次程序从这个表中取一个最小的,取好后立刻删除。然后用这个ID去参与后面的操作

这个表每天晚上做个计划任务,如果这个表的数据小于1000条(可以自己定义)
那么就在这个表中再顺序增加1000个 ID(ID从这个表中当前最大的那个ID开始依次+1)

这个用在C/S上还是不错的,但是估计用在B/S很多用户并发估计就不行了
cslf 2004-11-18
  • 打赏
  • 举报
回复
跟贴有分。
cslf 2004-11-18
  • 打赏
  • 举报
回复
用上面的代码在access2000里可以返回自增的ID,在oracle就是空值了(不用客户游标)。是不是和触发器时机有关?在oracle里,不用过程能否就通过rs取得当前ID?
阿泰 2004-11-18
  • 打赏
  • 举报
回复
刚才看了好几看,就没注意到游标
Oracle的引擎好象对游标要求比较严格,如果只是做Select的话用3就OK
cslf 2004-11-18
  • 打赏
  • 举报
回复
加了之后就死机了,不加?在ora里又取不到返回的ID的值(不用存储过程),但可以插入记录。ID的值是通过触发器:
CREATE OR REPLACE TRIGGER JTDAMS.TRIG_JT_DICT1
BEFORE INSERT
ON JTDAMS.JT_DICT1
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
SELECT SQ_JT_DICT1.NEXTVAL INTO :NEW.ID FROM DUAL;
END;
/
来实现自增的。
tztz520 2004-11-18
  • 打赏
  • 举报
回复
你可以试一下.
在加了rs.CursorLocation = 3之后.
rs.RecordCount是多少,没加又是多少.
cslf 2004-11-18
  • 打赏
  • 举报
回复
问题已解决。把客户游标去掉就可以了。但为什么在access2000里却正常?欢迎大家讨论。

1,216

社区成员

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

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