【原创】Excel数据导入到Access ,Excel数据插入到Access ,Excel数据更新到access, ASP代码演示
思良:看不到图片还是去百度空间查看原文, http://wenzhang.baidu.com/page/view?key=3d36195d5c342d2a-1426994983
最近同事要我帮她解决一个问题:我们有个值班表,每天要更新,她想直接修改EXCEL来实现修改ACCESS数据。网站是ASP的,值班表是通过ASP调用ACCESS数据显示的,上网搜索了一些代码,大部分是把EXCEL数据插入到ACCESS里,这不是我想要的,我们每个月1号,上面发个EXCEL格式的值班表来,然后每天进网站后台按照当天值班表修改ACCESS数据(这样很麻烦所以才想解决),ACCESS数据库中,值班表的表有个ID主键字段,网站显示数据的条件是按ID=1到31(既那天对应那天的ID数,例10号对应ID=10)虽然能按网络上给的代码插入数据,但表中主键ID会自动增加,那么显示数据的话还得修改显示值班表的页面,后台也有很多页面都有调用到值班表的数据,这样修改其他工作量很大,而且那个循环语句也不好写(每个月天数还不同,想起头都大),所以想到如果能直接更新该值班表的表就好了,去百度知道提问,也许没说明白,大家都没给出好的解决方法,只能靠自己,插入数据用into语句,更新数据用update语句,因为更新语句要有条件,不然把表更新成同样的数据了,我对ASP不太了解,就在" ,' 什么的操作上折腾半天,终于update语句写通了,下面给出实例:
文件目录:(大家想测试可以按照下面给出的文件做出样例来)
根目录:#123tel.mdb(access数据库) index.asp(显示值班表网页不用做)up(文件夹)
up(文件夹):dabiaoadoconn.asp(连接数据库网页)update.asp(更新数据库网页)file(文件夹)
file(文件夹):zbb.xls(excel文件)
访问:http://localhost/up/update.asp就实现更新
1,#123tel.mdb ACCESS数据库,里面有值班表zbb,字段如下,ID主键,数字自动增长,其他字段为文本,(就是这个主键ID的数据类型,引起很多问题,按网络上的代码并不能插入下面表中,是有错误的,如果不要主键,怎么插数据都可以的,当然我是不能删除主键的,不然值班表怎么显示,开始测试插入时,怎么插都不行,后来修改ID的数据类型,改为其它的,例如文本就可以插入,如果想更新就直接不管,按我的方法做吧)
2,zbb.xls excel表,其它字段就不抓出来,下面那个zbb就是excel的表
3,连接数据库的asp---dabiaoadoconn.asp,DB="../#123tel.mdb",我是把更新数据库的页面放到跟目录里的UP文件夹里,所以连接代码写../
代码:
--------------------------------------------
<%
DB="../#123tel.mdb"
path=Server.MapPath(DB)
set conn=server.createobject("adodb.Connection")
connstr="provider=Microsoft.Jet.OLEDB.4.0;Data Source="&path
conn.Open connstr
Set rs=server.CreateObject("adodb.recordset")
%>
------------------------------------
4,更新数据库的ASP---update.asp
代码:
-----------------------------------------------------
<!-- #include file="dabiaoadoconn.asp" -->
<%
'连接excel数据库
path="./"
Dim xlsconn,strsource,xlbook,xlsheet,i
Dim myConn_Xsl,xlsrs,sql,objCmd
Set xlsconn = server.CreateObject("adodb.connection")
Set xlsrs = Server.CreateObject("Adodb.RecordSet")
filename="file/zbb"
file2="zbb"
source=server.mappath(path&filename&".xls")
myConn_Xsl="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &source& ";Extended Properties=Excel 8.0"
xlsconn.open myConn_Xsl
sql = "Select * from ["&file2&"$]"
xlsrs.open sql,xlsconn,1,1
If xlsrs.eof Then
else
i=1
response.write "<TABLE border=1><tr><a href='index.htm'>点我返回</a></tr><TR><TD>id</TD><TD>bm1</TD><TD>tel1</TD><TD>bm2</TD><TD>tel2</TD><TD>ks</TD><TD>xzzw</TD><TD>bm3</TD><TD>tel3</TD><TD>tel4</TD><TD>tel5</TD><TD>bm4</TD><TD>bm5</TD></TR>"
Do While not xlsrs.eof
id=xlsrs("id")
bm1=xlsrs("bm1")
tel1=xlsrs("tel1")
bm2=xlsrs("bm2")
tel2=xlsrs("tel2")
ks=xlsrs("ks")
xzzw=xlsrs("xzzw")
bm3=xlsrs("bm3")
tel3=xlsrs("tel3")
tel4=xlsrs("tel4")
tel5=xlsrs("tel5")
bm4=xlsrs("bm4")
bm5=xlsrs("bm5")
%>
<TD> <%=id%></TD>
<TD> <%=bm1%></TD>
<TD> <%=tel1%></TD>
<TD> <%=bm2%></TD>
<TD> <%=tel2%></TD>
<TD> <%=ks%></TD>
<TD> <%=xzzw%></TD>
<TD> <%=bm3%></TD>
<TD> <%=tel3%></TD>
<TD> <%=tel4%></TD>
<TD> <%=tel5%></TD>
<TD> <%=bm4%></TD>
<TD> <%=bm5%></TD></TR><%
sql="update zbb set bm1='"&bm1&"',tel1='"&tel1&"',bm2='"&bm2&"',tel2='"&tel2&"',ks='"&ks&"',xzzw='"&xzzw&"',bm3='"&bm3&"',tel3='"&tel3&"',tel4='"&tel4&"',tel5='"&tel5&"',bm4='"&bm5&"',bm5='"&bm5&"'where id="&id&""
conn.execute(sql)
i=i+1
xlsrs.MoveNext
Loop
response.write "</table>"
End If
xlsrs.close
Response.write "共更新<font color='red'>" & i-1 & "</font>条记录.<br>" & vbCrLf
set xlsconn=nothing
set objCmd=nothing
%>
----------------------------------------------------
说明:
代码有点多,
1,filename="file/zbb"(这个是excel文件位置和名字,zbb是excel名字file是放zbb.xls的文件夹,) file2="zbb" (excel里面最下面那个表名,上图红线标出,自己做样例时默认名字是Sheet1) ,
2,response.write "<TABLE border=1><tr><a href='index.htm'>点我返回.....这段代码作用是显示更新数据后的数据,怎么修改漂亮一点看各位网页编辑能力了。
效果:
,3,最关键的是SQL语句写法:sql="update zbb set bm1='"&bm1&"',tel1='"&tel1&"',bm2='"&bm2&"',tel2='"&tel2&"',ks='"&ks&"',xzzw='"&xzzw&"',bm3='"&bm3&"',tel3='"&tel3&"',tel4='"&tel4&"',tel5='"&tel5&"',bm4='"&bm5&"',bm5='"&bm5&"'where id="&id&""
开始一直错误,后来网络搜索,asp中id=数字时不必用',大家注意下了。
4,现在顺便给出删除SQL语句和插入语句
删除语句:sql="DELETE FROM zbb WHERE ID>0"
插入语句: sql="insert into zbb(id,bm1,tel1,bm2,tel2,ks,xzzw,bm3,tel3,tel4,tel5,bm4,bm5) values('"&id&"','"&bm1&"','"&tel1&"','"&bm2&"','"&tel2&"','"&ks&"','"&xzzw&"','"&bm3&"','"&tel3&"','"&tel4&"','"&tel5&"','"&bm4&"','"&bm5&"')"
5,出现错误:
错误类型:
Microsoft JET Database Engine (0x80004005)
解决方法:文件夹选项,去掉简单共享,找到c盘系统文件夹window里的temp文件夹,看属性,打开安全,给users用户一个写入权限(最好是完全权限),不然不能写东西,如果还不行,找到网站文件夹,同样给它一个完全权限。
6,出现错误:
错误类型:
Microsoft JET Database Engine (0x80004005)
Microsoft Jet 数据库引擎打不开文件''。 它已经被别的用户以独占方式打开,或没有查看数据的权限。
解决方法:它已经被别的用户以独占方式打开说明你打开着zbb.xls 或者#123tel.mdb 文件,关闭了
7,好了用EXCEL更新ACCESS数据库代码写完,但还有一个步骤是,上传,每个月更新时,要把excel上传到file文件夹里,把新的替换原来的,接着运行update.asp就更新数据了,
因为不同员工的权限不同,同事她只能进网站后台,不能进服务器,所以上传文件只能由网站管理员来操作,所以为了不想让她每个月都来烦我,我就从网络上下了一个上传文件的源码来,在后台页面里加了一个连接,这样她就可以直接通过上传页面来实现上传excel文件,不过一般的上传源码上传的文件都自动改名了,这个也不是我想要的,好在我找到一个可以直接自己命名的,不命名为原名的上传源码,这篇文章就不写出了,给个下载地址:http://www.asp300.com/SoftView/10/SoftView_29627.html
--------------------------------------------------------
方便大家测试,我已经把做好的例子上传到网盘了,具体操作在里面说了
http://dl.dbank.com/c0s61m7an2