注册 登录
编程论坛 ASP技术论坛

[已解决] -同一个access库不能同时写入两个表?

soarb 发布于 2008-06-30 17:37, 2771 次点击
RT.

我同时向一个数据库中两个表写入数据.但只有前面一个表写入成功.

我用的是
rs.open sql,conn,1,3
rs.addnew
rs("bt")=request.form("bt")
rs("nr")=request.form("nr")
rs("du")=request.form("du")
rs.update
rs.close
set rs=nothing
conn.close
set conn=nothing

这样的写入方法.

但结果是,只写入了前面的一个前,而后面的一个表反回是提交成功,但没有数据写入(也没有空白).

当我把写入后面表的代码分离出来,在另一个asp文件中测试时切又可以写入了.

小弟刚学asp,请问asp同时写入两个表有什么特殊的要求吗?我打开表都是用的同一个方法和事件.
---------2008.07.06-解决------------

在各位的帮助下我肯定了adodb的操作是没有错误的.于是我将每一个关键及可能为问题的代都用response.write出来.
结果问题发现了.我上下两个表的sql语句都是用sql变量定义,因为php中,变量是随着内存变化的.而asp中在一个声明中是不变的. 困扰多天的问题终于解决了!感觉asp比php难多了.

-----------------------------
TO:tianyu 和hmhz版主.
 我重新写了一个简单的入库代码,同时都用的是一个记录集(rs),切可以同时写入两个表
我也记得在学adodb时候,官方有说明,如果是同时链接两个库的话,那么需要两个记录集和两个事件来连接.

不知道是否是二位记错了.


同时怀疑这个不能写入是其它的原因,但经验不足...
还请大家多多讨论!



-----------------------------

[[it] 本帖最后由 soarb 于 2008-6-30 23:44 编辑 [/it]]

[[it] 本帖最后由 soarb 于 2008-7-6 23:17 编辑 [/it]]
15 回复
#2
tianyu1232008-06-30 17:49
同时向两个表中写入数据,需要创建两个不同的记录集
#3
hmhz2008-06-30 17:52
例如:

rs1.open sql1,conn,1,3
rs1.addnew
rs1("bt")=request.form("bt")
rs1("nr")=request.form("nr")
rs1("du")=request.form("du")
rs1.update
rs1.close
set rs1=nothing

rs2.open sql2,conn,1,3
rs2.addnew
rs2("bt")=request.form("bt")
rs2("nr")=request.form("nr")
rs2("du")=request.form("du")
rs2.update
rs2.close
set rs2=nothing

conn.close
set conn=nothing
#4
soarb2008-06-30 18:26
谢谢tianyu ,这是第二次你对我的帮助了.
谢谢版主hmhz.提供这么详劲的说明!
#5
soarb2008-06-30 20:10
偶太菜了,问题还没解决.

请问下,如果是同时写入两个表,是不是不能用"rs"命名这个事件.而非要用rs1, rs2 这样的词?
#6
soarb2008-06-30 20:59
哪位好心人,能否能一份asp同时写入access两个表的源码给小弟学习下.

今天我试了很多方法都不能用.
#7
hmhz2008-07-01 00:09
rs 是自定义的,你也可以写成ABC啊,或者Ars 都可以的,只要两个记录集名不相同就行了
#8
soarb2008-07-01 00:47
版主,我用了同一记录集,切可以写入两个不同的表,但我把此代码运行到其它代码中时确无法写入
#9
hmhz2008-07-01 08:29
为了不出问题,最好两个不一样,防止冲突
#10
dhdhzzw2008-07-01 09:17
版主的说法是对的。或者你可以这样
rs1.open sql1,conn,1,3
rs2.open sql2,conn,1,3

rs1.addnew

rs2.addnew

rs1("bt")=request.form("bt")
rs1("nr")=request.form("nr")
rs1("du")=request.form("du")
rs2("bt")=request.form("bt")
rs2("nr")=request.form("nr")
rs2("du")=request.form("du")
rs1.update
rs1.close
rs2.update
rs2.close
set rs1=nothing



set rs2=nothing

conn.close
set conn=nothing
这样好懂一些吧/。
#11
soarb2008-07-01 10:47
[bo][un]dhdhzzw[/un] 在 2008-7-1 09:17 的发言:[/bo]

版主的说法是对的。或者你可以这样
rs1.open sql1,conn,1,3
rs2.open sql2,conn,1,3

rs1.addnew

rs2.addnew

rs1("bt")=request.form("bt")
rs1("nr")=request.form("nr")
rs1("du")=request.form("du") ...


这个前面是不是还应该加入:
set rs1=Server.CreateObject("ADODB.RecordSet")
set rs2=Server.CreateObject("ADODB.RecordSet")
这两句代码呢?
#12
hmhz2008-07-01 12:04
是的,这两句肯定要加
#13
zhangyao32872008-07-01 13:07
Set Rs = Server.CreateObject("ADODB.RecordSet")
是创建记录集并且付值给Rs

SQL = ""
Rs.Open SQL,Conn,1,3
执行完一个表之后可以通过
Rs.Close关闭此次执行

SQL = ""
Rs.Open SQL,Conn,1,3
Rs可以继续执行第二个表的操作,Rs使用完之后
Rs.Close : Set Rs = Nothing清理Rs
Conn.Close : Set Conn = Nothing 关闭数据库连接,清理Conn
#14
robinbest2008-07-02 11:00
直接用INSERT不就完事了!
#15
天涯听雨2008-07-02 15:30
直接用INSERT 速度快

建议不用要记录集方式进行插入数据。。如果表中数据量大,可想打开表的时间都需要很长
#16
soarb2008-07-06 23:12
终于解决了!谢谢各位的帮助
1