请问高手,excel支持事务吗?有无解决办法?

Abo 2002-04-18 04:14:09
两个表,其中一个表引用另一个表,更新一个表时,浏览器显示“不能执行选定查询。”
这是否表示excel不支持事务?那如何解决两个表进行更新的问题?
...全文
148 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Abo 2002-04-23
  • 打赏
  • 举报
回复
感谢tripofdream(梦之旅)回答.
tripofdream 2002-04-23
  • 打赏
  • 举报
回复
1.使用ODBC驱动时,要指定readonly=false,如
conn.Open "Driver={Microsoft Excel Driver (*.xls)};readonly=false;dbq=" & server.MapPath("test.xls")
readonly缺省为true,即是只读的.
2.excel中的计算字段是不能用ado更新的,只能用vba操作
3.原因大致同上
Abo 2002-04-23
  • 打赏
  • 举报
回复
还有人回答吗?
Abo 2002-04-22
  • 打赏
  • 举报
回复
我发现一情况,用jet引擎可以进行更新,用另一个擎(我不知怎么讲,即上面你讲的)只能浏览,不能更新,浏览器老是显示"无法显示网页,内部服务器错误等等”。现在我用jet引擎将部分代码写出来,大家帮忙分析一下。
在excel表1中,本来第四个字段(总计一栏)在excel中是由第2列和3列自动算出的,但asp更新前两个字段数值后,excel并不能对第四字段的数值更新。详细的情况是这样的:
(1)更新数据:
<%
response.expires=0
Dim conn
Dim rs
Set conn=server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Extended Properties='Excel

8.0;HDR=Yes';Data Source="&server.mappath("test.xls")
Set rs=Server.CreateObject("ADODB.Recordset")
sql="update [原表$] set 存货=120,单价=666 where 名称='大米' "
conn.execute(sql)
rs.Open "[原表$]", conn, 0.5
%> <html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title> 浏览Excel数据表</title>
</head>
<body bgcolor="#FFFFFF" >
<h2 align="center">浏览Excel数据表</h2>
<CENTER><TABLE style="font-size: 10pt" border="0" bgcolor="#000000" cellpadding="0" cellspacing="1"

nowrap>
<%Response.Write "<TR BGCOLOR=#008000 ><TD>编号</TD>"
For i=0 to rs.Fields.Count-1
Response.WRITE "<TD>" & rs.Fields(i).Name & "</TD>"
Next
Response.Write "</TR>"
RecNo=1
Do While Not rs.EOF Response.Write "<TR bgColor=#e6e6e6 >"
Response.Write"<TD>"&RecNo&"</TD>"
for i=0 to rs.fields.count-1
Response.Write"<TD>"&rs.Fields(i).Value&"</TD>"
Next
Response.Write "</TR>"
rs.MoveNext
RecNo=RecNo+1

Loop
rs.close
conn.close
%>
</TABLE></CENTER>
</body></html>
以上代码均可以正确无误通过,在浏览器上均可以看到要改变的数值(存货和单价)已被改变。但问题是第四列(总计)的数据却不改变。
(2)当单独打开excel表格,可以看到第四列数值在改变,而且在无任何改动退出时,excel要求保存,保存后,如果此时在浏览器中对表格浏览,可以看到数值能正确输出。
(3)我又在excel工作薄中的第二表设一列引用前一表中的两列进行数值运算,现进行事务处理。所加部分代码如下:
Set rs=Server.CreateObject("ADODB.Recordset")
conn.begintrans
sql="update [原表$] set 单价=1127 where 名称='大米' "
conn.execute(sql)
if conn.Errors.Count>0 then
conn.Errors.Clear
conn.RollBackTrans
else
conn.commitrans
end if
rs.Open "[原表$]", conn, 0.25
浏览器则显示如下错误:

Microsoft JET Database Engine 错误 '80004005'

不能执行选定查询。
asp/exceltest/update.asp,行15
(4)根据上述情况,大家能否帮我分析一下,这个问题到底出在哪里。
Abo 2002-04-22
  • 打赏
  • 举报
回复
非常感谢tripofdream(梦之旅)回答,对于前面你说的,加上我的试验,的确odbc不支持事务处理。
但我仍有几个问题:
(1)你后来说“odbc连接时也可以更新”是否指可以进行添加,更新纪录处理,但经我试验通不过,显示“你访问的网页有问题”的错误。现在只能用ole db进行添加和更新。
(2)根据你第二段所说,是不是要让excel部分自动更新纪录只能使用vba操作?
(3)应用事务处理,即让几个表的数据同时更新能给点代码。我怎么一加上事务处理的代码就出现前面的错误。
tripofdream 2002-04-22
  • 打赏
  • 举报
回复
打开工作表时,其中的计算字段会重新计算(应该是由事件控制的),如果是使用vba操作就不会出现上述情况.另外,使用odbc连接时也可以更新的.
tripofdream 2002-04-22
  • 打赏
  • 举报
回复
使用odbc连接时excel是不支持事务的,而使用oledb连接(即使用jet database engine)时是支持的.
tripofdream 2002-04-22
  • 打赏
  • 举报
回复
使用odbc连接时excel是不支持事务的,而使用oledb连接(即使用jet database engine)时是支持的.
MeXP 2002-04-20
  • 打赏
  • 举报
回复
由"不能执行选定查询"就能判断不支持事务,我觉得结论下的太早
恐怕你的代码有错吧

请看

将Excel97或Excel2000生成的XLS文件(book)看成一个数据库,其中的每一个工作表(sheet)看成数据库表。

  Function CreateExcelRecordset( XLS文件名,Sheet名 )

  Dim conn,Driver,DBPath

  ‘ 建立Connection对象
  Set conn = Server.CreateObject("ADODB.Connection")
  Driver = "Driver={Microsoft Excel Driver (*.xls)};"
  DBPath = "DBQ=" & Server.MapPath( "XLS文件名" )

  ‘ 调用Open 方法打开数据库
  conn.Open Driver & DBPath
  Set CreateExcelRecordset = Server.CreateObject("ADODB.Recordset")
  ‘ 打开Sheet,参数二为Connection对象,因为Excel ODBC驱动程序无法直接用‘sheet名来打开sheet,所以请注意以下的select语句
  CreateExcelRecordset.Open "Select * From ["&sheet&”$]”, conn, 2, 2

  End Function
先查查你的代码,将conn.begintrans加入做个实验,我觉得应该没有问题。事务是个范围很广的概念
flyfox 2002-04-20
  • 打赏
  • 举报
回复
写出语句来看看
julyclyde 2002-04-19
  • 打赏
  • 举报
回复
只有数据库才支持事务
Abo 2002-04-19
  • 打赏
  • 举报
回复
julyclyde你好,非得改成数据库?,excel自己不能解决?
julyclyde 2002-04-18
  • 打赏
  • 举报
回复
改用数据库
Abo 2002-04-18
  • 打赏
  • 举报
回复
我现在能够进行对excel进行查询、增加、更新了,就是不能应用事务,使另一个表同时更新。各位有没有什么解决办法?
Abo 2002-04-18
  • 打赏
  • 举报
回复
不是数据库,能按数据库进行查询不行嘛,我现在可以进行查询,更新,增加数据了,据说对excel不能删除纪录。我现在就进行事务操作,没想到老是提示不能更新表的错误,不知各位没有没什么解决办法。
Lostinet 2002-04-18
  • 打赏
  • 举报
回复
excel能是数据库?
Abo 2002-04-18
  • 打赏
  • 举报
回复
不要vba,能否做到?直接用ado行吗?
iloveyouonlyonce 2002-04-18
  • 打赏
  • 举报
回复
vba编程

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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