![ADO组件之显示数据记录_第1页](http://file4.renrendoc.com/view8/M00/36/1A/wKhkGWbFJ8mASyxfAAOxfGgszbk040.jpg)
![ADO组件之显示数据记录_第2页](http://file4.renrendoc.com/view8/M00/36/1A/wKhkGWbFJ8mASyxfAAOxfGgszbk0402.jpg)
![ADO组件之显示数据记录_第3页](http://file4.renrendoc.com/view8/M00/36/1A/wKhkGWbFJ8mASyxfAAOxfGgszbk0403.jpg)
![ADO组件之显示数据记录_第4页](http://file4.renrendoc.com/view8/M00/36/1A/wKhkGWbFJ8mASyxfAAOxfGgszbk0404.jpg)
![ADO组件之显示数据记录_第5页](http://file4.renrendoc.com/view8/M00/36/1A/wKhkGWbFJ8mASyxfAAOxfGgszbk0405.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ADO组件之显示数据记录学习ASP的万里长征就快到终点了:等把ASP的ADO组件搞定。当然这也是最重要的一步,几乎前面所有的学习都是为了这个最终的目的。OK,下面就来详细系统地来一一掌握,步步为营,各个击破。
一,拥有数据库
可以这么说:静态页面和动态页面最大的区别就是采用了数据库。有关一个WEB程序采用数据库和不采用的优越性比较,就不去细细分析了,主要精力还是放在如何使用数据库,如何熟练运用数据库,如何更灵活地运用数据库等等……其中运用操作数据库主要是对数据库内容进行:显示、插入、修改、更新、查询和删除。
这些方法当然也不是一口就能吃出来的,要慢慢感受咀嚼、理解消化。当然首先很重要的便是先拥有数据库了。否则,一切都是空谈,巧媳妇难以无米之炊嘛。
一般而言,我们所说的数据库其实就是一个数据库文件,该文件是由一些数据库管理系统(DBMS)建立生成的。目前一般的DBMS也就是常用常听说的ACCESS,SQLSERVER,MYSQL,ORACLE。当然一般个人站点,小型企业采用ACCESS完全足够;稍微大些的就采用同样是Microsoft公司的SQLSERVER或者是MYSQL,值得注意的是MYSQL一般是和另外一种网络编程语言PHP完美结合的。当然更大型的就采用ORACLE了。呵呵,曾经在学习PB时还运用到SYBASE数据库,UNIX系统的Informix数据库……DBMS简直是多如牛毛-_-!
话说过来,目前我们就直接使用ACCESS了:1,使用简单;2,入门掌握容易;3,实在没有比这个更适合初学的了。
一切还得从实际操作开始。
1,打开ACCESS数据库,选择新建数据库,将其命名为cnbruce.mdb,并保存到一专门文件夹database中
[被屏蔽广告]
2,在新建的数据库容器中双击“使用设计器创建表”,弹出的表1窗口中字段名称输入“cn_id”,数据类型选择“自动编号”,并选择上方工具栏中的钥匙按钮,将该字段设为主键。
继续输入字段“cn_title”,数据类型选择“文本”;NEXT输入字段“cn_content”,数据类型选择“备注”;
PS:备注和一般类型文本最大的区别就是备注允许插入的字段值相对要多些,这在插入一些较长文章的时候尤其重要。
仍然输入字段“cn_author”,数据类型选择“文本”;并且切换到下面“常规”中的“允许空字符串”选择“是”。
PS:这表面允许cn_author字段的值可以是空的,这在当提交表单,某些信息不填写但要正确插入数据库时,显得很重要。
最后输入字段“cn_time”,数据类型选择“日期/时间”,继续切换到“常规”中的“默认值”输入“now()”函数
末了,将“表1”另存为“cnarticle”
[被屏蔽广告]
3,双击打开cnartile表,填写第一行:“cn_title”输入“test”,“cn_content”输入“thisisatest”,“cn_author”输入“cnbruce”,时间已经自动添加。完成!关闭表,关闭数据库。
[被屏蔽广告]
二,建立数据库连接
OK,数据库已经建立完毕,并且已经填写了一行信息内容。那么现在需要的就是同过ASP将该行信息显示出来。
要想显示,首先还是需要ASP与该数据库文件建立连接,具体怎么建立?往下看。
1,conn.asp:主要起的是连接并打开某数据库文件的功能。该文件建议单独存在,并且位置是和存放数据库的文件夹database处与同一物理层次。
<%
db_path="database/cnbruce.mdb"
Setconn=Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath(db_path)
conn.Openconnstr
%>
db_path="database/cnbruce.mdb",不用说,就是将数据库的相对路径赋到一个变量上,以方便下面继续调用。
Setconn=Server.CreateObject("ADODB.Connection"),和其它建立组件一样,建立了一个ADO连接,并用一对象conn来接受。
connstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath(db_path),很显然就是连接字符串了,其包括打开数据库的驱动方法OLEDB,和打开和哪个数据库的连接(即数据库的路径)。
需要再次提醒的是:无论是FSO对文件、文件夹的操作还是ADO对数据库的操作,对被操作文件的取得都是获得的绝对的物理地址,一般情况之下,采用Server.MapPath方法相对较好。
conn.Openconnstr最后对象conn通过连接字符串connstr打开了数据库的连接。
三,显示数据库内容
建立了数据库,建立了和数据库的连接,下面水到渠成地就是将数据库中的内容通过ASP显示出来。
2,showit.asp
<!--#includefile="conn.asp"-->
<%
Setrs=Server.CreateObject("ADODB.Recordset")
sql="Select*fromcnarticle"
rs.Opensql,conn,1,1
%>
<%
ifrs.EOFandrs.BOFthen
response.write("暂时还没有文章")
else
DoUntilrs.EOF
response.write("文章标题是:"&rs("cn_title"))
response.write("<br>文章作者是:"&rs("cn_author"))
response.write("<br>文章加入时间是:"&rs("cn_time"))
response.write("<br>文章内容是:"&rs("cn_content"))
response.write("<hr>")
rs.MoveNext
Loop
endif
%>
<%
rs.close
Setrs=Nothing
conn.close
setconn=Nothing
%>
简单调试本页,不出任何意外,相信一定能将数据库中的信息显示出来了。(PS:我的数据库中输写了两行)
[被屏蔽广告]
下面就来具体一个一个解释来理解没行的含义:
1,<!--#includefile="conn.asp"-->没有任何争议,主要是调用conn.asp的所起的功效,这在解释conn.asp文件的时候已经明白。
2,Setrs=Server.CreateObject("ADODB.Recordset")ADO组件除了Connection连接以外,还有Recordset绑定记录集(相信用过DW做ASP的人现在开始有些重回故里的感觉了)当然rs可以形象地想象成数据库表中的某一行。
3,sql="Select*fromcnarticle"标准的SQL结构化查询语言。很简单:建立了数据库连接,也绑定了记录集,那具体需要哪些信息呢?也就是要筛选一些记录集合了,不过当前采用的是无任何条件,即可以提取所有。
4,rs.Opensql,conn,1,1真正地打开通向数据库中记录集的大门,具体有关后面的参数可以从如下网址中获得。不带1,1会出错
前一个1是游标类型,第二个是锁定类型,在ADODB.inc(好像是这个文件名)定义了一堆常量,其中就有这两个,但是必须要包含那个文件才可以使用,所以就都使用数值了
第一个:
1,前向游标:即读取数据记录只能从前向后读,不能返回,并且不能反映读取同时其它用户对数据库的更新
2,静态游标,可向前和向后,但是不能反映其它用户的更新
3,动态游标,功能最强,当然也最耗资源
第二个
1,只读锁定,只能读不可以写的锁定数数据库
2,悲观锁定,从打开数据库开始锁定数据库,即锁定时其它用户无法更新数据库
3,乐观锁定,只在更新的瞬间锁定数据库
4,批量乐观锁定,在更新完一批以后提交到数据库时才锁定,如果有很多用户同时在更新数据库,则有可能更新到同一条记录
悲观锁定最不容易发生冲突,但是锁定时间太长,各有各的用途,实际应用时选择
5,ifrs.EOFandrs.BOFthen该语句里面涉及到了rs.EOF和rs.BOF以及两者的逻辑运算and。rs.EOF表示到达数据库表中的最后一行,rs.BOF表示到达数据库表中的第一行。整个语句可以理解为,如果当前数据库中的最后一行就是数据库表中第一行,那么可以肯定:当前数据库表中没有任何数据。
6,
DoUntilrs.EOF
...
rs.MoveNext
Loop
主要就是一个DOLOOP循环语句了,其中循环的结束条件为:直到rs.EOF,即值得数据库表的最后一行。那么在这些条件满足的许可之内,就是来显示具体的信息了。
每次循环只能显示数据库表中的一行,如果要继续读取下行,那么rs.MoveNext功能真是如此。
7,rs("cn_title")等等主要就是具体显示记录集中的哪个特定字段的信息值了。很是简单。
8,最后不要忘了释放资源空间关闭记录集连接,关闭数据库连接。
四,一些特殊条件
1,有没有注意到,数据库表信息的显示一般是按照时间的先后排列的,也就经常提到的按时间的升序排列。需要注意:按时间升序,并不一定每个数据库表中都要有一个时间/日期类型的字段,只要存在一个自动编号的字段就可以了。因为该字段是永不重复,并且是依次增大的。因此,按时间升序其实就是按自动编号中号码数值的增加来进行排序的。
当然,问题的关键来了,那就是要按照时间的降序排列,即始终从最新的内容开始显示。那具体需要哪些手术呢?
很简单,将连接字符串稍做修改。
由sql="Select*fromcnarticle"添加修改为
sql="Select*fromcnarticleorderbycn_iddesc"
其中orderbycn_id即通过cn_id字段,desc即降序了。
2,有是时候,只需要提取最前或者最新的几条信息,那这个又具体如何操作呢?同样还是连接字符串的修改
由sql="Select*fromcnarticleorderbycn_iddesc"添加修改为
sql="Selecttop3*fromcnarticleorderbycn_iddesc"
其中top3就表示提取最新的三条信息内容了。
ThatsAll.现在一个文章系统、新闻系统或者留言本显示部分的精华内容你已不费吹灰之力搞定。
ADO组件之插入数据记录简单的显示记录已经掌握,现在需要的就是通过ASP将信息内容插入到数据库中。
一、拥有数据库cnbruce.mdb
本数据库的作用就是用来被插入数据的,可以直接采用上节中已经建立的cnbruce.mdb文件,当然连接打开数据库的文件conn.asp也就顺利引用了。
二、建立输入插入信息的页面平台addit.html
本页的主要作用是:显示一些文本输入框以用来提供输入信息内容提交数据库。
1,addit.html
<formaction="addit.asp"method="post">
Title:<inputtype="text"name="title"><br>
Author:<inputtype="text"name="author"><br>
Content:<br>
<textareaname="content"rows="8"cols="30"></textarea><br>
<inputtype="submit"value="Add">
<inputtype="reset"value="Reset">
</form>
[CtrlA全部选择提示:你可先修改部分代码,再按运行]
本页其实很简单,就是通过submit按钮将表单的信息内容提交到addit.asp页面去处理。网页游戏
三、建立处理接受数据并插入数据库表的页面程序addit.asp
2,addit.asp
<!--#includefile="conn.asp"-->
<%
whattitle=request.form("title")
whoauthor=request.form("author")
whatcontent=request.form("content")
%>
<%
Setrs=Server.CreateObject("ADODB.Recordset")
sql="Select*fromcnarticle"
rs.Opensql,conn,3,2
%>
<%
rs.addnew
rs("cn_title")=whattitle
rs("cn_author")=whoauthor
rs("cn_content")=whatcontent
rs.update
%>
文章添加成功,<ahref="showit.asp">浏览</a>
<%
rs.close
Setrs=Nothing
conn.close
setconn=Nothing
%>
恩,接着就是来具体分析一下。
1,<!--#includefile="conn.asp"-->不用说,凡是要和数据库有联系的都要运用到该连接文件。
2,whattitle=request.form("title")之类就是将上页表单中接受过来的值赋到一变量上,方便下面程序的调用。
3,rs.Opensql,conn,3,2注意参数和显示数据库时采用的参数的不同。
4,rs.addnew很简单也很显眼的一个声明:新建一个数据库记录集行。
5,rs("cn_title")=whattitle之类即将接受的表单值对应到相关字段中。
6,rs.update只是值和数据库字段的对应,完了后还要将对应的值上传提交到数据库表中去。
7,插入后可以跳转到showit.asp查看需要说明,以后的ASP例题可能都是建立在前几节内容的基础之上完成的。
8,释放资源是规矩,不要忘记。
那么,现在。插入并显示数据库记录,对你来说完全是小菜一碟了。大体框架搭建完毕,下面就是具体的细化了。
其中包括:客户端的表单检测,防止用户信息输入的遗漏;当然最好还是要加上服务器端的表单检测,由于客户端的某些原因(比如自行设计提交非检测的页面)基于安全考虑,一切还是依服务器端所接受信息为准。那下面就继续细化应用下了。
1,客户端检测其实就是通过简单的脚本检测,这在初学ASP提到脚本的时候说到,下面将再次重复。
加强的addit.html
<scriptlaguage="javascript">
<!--
functionform1_onsubmit()
{
if(document.form1.title.value=="")
{
alert("请输入文章标题")
document.form1.title.focus()
returnfalse
}
elseif(document.form1.content.value=="")
{
alert("请输入文章内容")
document.form1.content.focus()
returnfalse
}
}
-->
</script>
<formaction="addit.asp"method="post"name="form1"onsubmit="returnform1_onsubmit()">
Title:<inputtype="text"name="title"><br>
Author:<inputtype="text"name="author"><br>
Content:<br>
<textareaname="content"rows="8"cols="30"></textarea><br>
<inputtype="submit"value="Add">
<inputtype="reset"value="Reset">
</form>
[CtrlA全部选择提示:你可先修改部分代码,再按运行]
2,服务器端检测有人也许会问,既然有了客户端的检测,那还有多个服务器端的检测呢?原因很简单,比如仿照HTML表单提交页,自行设计一张去除了表单检测的页面。当点击提交,并且没有任何信息时,到达服务器端如没有任何防御则肯定会造成数据插入的失败。网页编程
加强的addit.asp
<!--#includefile="conn.asp"-->
<%
whattitle=trim(request.form("title"))
whoauthor=trim(request.form("author"))
whatcontent=trim(request.form("content"))
%>
<%ifwhattitle=""then%>
<scriptlanguage=vbs>
alert("请输入文章标题")
history.go(-1)
</script>
<%endif%>
<%ifwhatcontent=""then%>
<scriptlanguage=vbs>
alert("请输入文章标题")
history.go(-1)
</script>
<%endif%>
<%
Setrs=Server.CreateObject("ADODB.Recordset")
sql="Select*fromcnarticle"
rs.Opensql,conn,3,2
%>
<%
rs.addnew
rs("cn_title")=whattitle
rs("cn_author")=whoauthor
rs("cn_content")=whatcontent
rs.update
%>
文章添加成功,<ahref="showit.asp">浏览</a>网页制作
<%
rs.close
Setrs=Nothing
conn.close
setconn=Nothing
%>
可以看出,就是添加了如下类似的判断。
<%ifwhattitle=""then%>
<scriptlanguage=vbs>
alert("请输入文章标题")
history.go(-1)
</script>
<%endif%>
很简单,如果接受过来的信息为空,则弹出警告框,并且确认后返回到上页即addit.html了。当然cn_author没有设置检测,因为当初设计该字段的接受值是允许为空的。
OK,总结一下,插入记录主要就是
rs.addnew
rs("cn_title")=whattitle
...
rs.update
很简单,先声明addnew,然后一一对应,再提交插入数据库。
这是一种插入数据库的方法,下面就来接触了解一下另外一种。
需要注意,结构化的查询语言也就是SQL语句能够完成一些比较苛刻的数据库操作。当然,对于诸如提取、插入信息之流就更不在话下了。所以下面采用的插入记录的方法就是直接采用SQL语法完成。
修改了的addit.asp
<!--#includefile="conn.asp"-->
<%
whattitle=request.form("title")网页
whoauthor=request.form("author")
whatcontent=request.form("content")
%>
<%
sql="insertintocnarticle(cn_title,cn_author,cn_content)values("&whattitle&","&whoauthor&","&whatcontent&")"
conn.Execute(sql)
%>
文章添加成功,<ahref="showit.asp">浏览</a>
<%
conn.close
setconn=Nothing
%>
本程序中,你会发现只要一行的SQL语句,不需要建立Rescord记录集行,不需要声明addnew,不要执行update。直接通过conn.Execute(sql)来完成。
当然应用此种方法,若必填字段接受值为空时,同样能够插入记录。这和采用第一种会报
MicrosoftJETDatabaseEngine错误80040e21
字段xxx.xxx不能是零长度的字符串。
具有很大的容错性。
是程序的可读性还是方法的简便高效率就任君选择了。
ADO组件之修改数据记录再来小总结一下:对数据库的操作无非就是显示记录,插入记录,修改记录,删除记录,查询记录。
并且在有关显示记录的时候还涉及到显示的输出格式、分页程序,那么再结合插入记录,一个简单的新闻系统,文章系统,留言系统,注册登陆系统不成任何问题。
下面就涉及到管理这块,需要对数据库记录进行修改。
首先,要修改哪条
修改,不是笼而统之的,而是要针对某条具体对相应修改。可以形象地说,就是对数据库表中的具体哪一行进行具体的修改。
所以,这时候的记录集就有它特定的某个,当然这个主要还是由SQL语句来决定的。
比如sql="select*fromtablewhereid=1"就表示提取的id编号是1的那行的所有记录,然后只要将该行中需要修改的字段赋以新值然后上传数据库就OK了。
同样的语句sql="select*fromtablewhereid=2"相信你也能明白。
但作为我们在页面中,可不是就这样固定的,有可是选择某连接,或者输入某表单值……跳转到专门的修改页,这样所有的任务全在修改页上了,它所具备的SQL语句应该是适应性强的
比如sql="select*fromtablewhereid="&request.queyrstring("id")
其次,将要修改的对应赋值
很简单,正如插入记录一样,将字段和值对应起来。
rs("cn_name")="cnbruce"
rs("cn_sex")="male"
对应的值当然也可以是某个变量或函数
最后,上传更新数据库
和插入一样进行rs.updata,其实观察下来,插入新记录和更新记录只是多了rs.addnew这行的声明。
1,showit.asp
该文件是前面例中所建立引用的。其主要是显示的作用,那么现在,针对具体的某条记录增加跳转到修改页的超级链接。
<%
Fori=1tors.PageSize利用fornext循环依次读出当前页的记录
ifrs.EOFthen
ExitFor
endif
response.write("<ahref=change.asp?id="&rs("cn_id")&">修改</a>")
response.write("文章标题是:"&rs("cn_title"))
response.write("<br>文章作者是:"&rs("cn_author"))
response.write("<br>文章加入时间是:"&rs("cn_time"))
response.write("<br>文章内容是:"&rs("cn_content"))
response.write("<hr>")
rs.MoveNext
Next
%>
注意response.write("<ahref=change.asp?id="&rs("cn_id")&">修改</a>")
后面的参数id的值则是动态的,那接着就看chang.asp的能耐了。
2,change.asp
<!--#includefile="conn.asp"-->
<%
id=request.querystring("id")
%>
<%ifrequest.form("submit")="change"then
whattitle=request.form("title")
whoauthor=request.form("author")
whatcontent=request.form("content")
id=request.form("id")
Setrs=Server.CreateObject("ADODB.Recordset")
sql="Select*fromcnarticlewherecn_id="&id
rs.Opensql,conn,3,2
rs("cn_title")=whattitle
rs("cn_author")=whoauthor
rs("cn_content")=whatcontent
rs.update
rs.close
Setrs=Nothing
conn.close
setconn=Nothing
response.redirect("showit.asp")
response.end
%>
<%endif%>
<%
ifid<>""then
Setrs=Server.CreateObject("ADODB.Recordset")
sql="select*fromcnarticlewherecn_id="&id
rs.Opensql,conn,1,1
whattitle=rs("cn_title")
whoauthor=rs("cn_author")
whatcontent=rs("cn_content")
endif
%>
<formaction="change.asp"method="post">
Title:<inputtype="text"name="title"value=<%=whattitle%>><br>
Author:<inputtype="text"name="author"value=<%=whoauthor%>><br>
Content:<br>
<textareaname="content"rows="8"cols="30"><%=whatcontent%></textarea><br>
<inputtype="submit"value="change"name="submit">网页优化
<inputtype="reset"value="Reset">
<inputname="id"type="hidden"value="<%=id%>">
</form>
当然所有的检察,安全防护都还没做,BUG多多,自己也来慢慢解决。
另外一类的修改更新
<%ifrequest.form("submit")="change"then
whattitle=request.form("title")
whoauthor=request.form("author")
whatcontent=request.form("content")
id=request.form("id")
sql="updatecnarticlesetcn_title="&whattitle&",cn_author="&whoauthor&",cn_content="&whatcontent&"wherecn_id="&id
conn.Execute(sql)
conn.close
setconn=Nothing
response.redirect("showit.asp")
response.end
%>
ADO组件之删除数据记录1,首先要明确删除哪条记录
无非还就是SQL语句了,比如对应到特定的某ID上。
id=request.form("id")
sql="Select*fromcnarticlewherecn_id="&id
Setrs=Server.CreateObject("ADODB.Recordset")
rs.Opensql,conn,2,3
2,很简单的一条语句:删除
rs.delete
3,最好能在修改之前征求确认删除
<scriptlanguage="JavaScript">
<!--
functionsuredo(src,q)
{
varret;
ret=confirm(q);
if(ret!=false)window.location=src;
}
//-->
</script>
<ahref=javascript:suredo("del.asp?id=<%=id%>","确定删除?")>Delete</a>
最直接的一条语句
sql="delete*fromcnarticlewherecn_id="&id
conn.Execute(sql)
ADO组件之查询数据记录来源:
2007-2-1300:00:00网友评论0条字体:[大中小]~我要投稿!首先,了解下原理。
1,提供文本框进行查询内容的输入
2,将查询信息提交页面程序处理
3,程序页主要作用:接受查询信息,根据此信息调用特定的SQL查询语句,得出查询结果并能显示。
其实,主要精髓就是SQL语句的写法上。
之前的提取为"select*formwhattablewhereid="&id
插入为"insertintowhattable(xx_rs)values("&content&")"
删除为"deletefromwhattablewhereid="&id
修改为"updatewhattablesetxx_rs="&log_content&"whereid="&id
则查询为"select*formwhattablewherexx_rslike%"&wahtkey&"%"
下面通过一个例题来研究下
1,建立数据库zipcode.mdb中的zip表
字段id,类型自动编
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 微型太阳能电池板项目可行性研究报告申请报告
- 如何做好物资采购物资管理工作保证生产有序进行
- 供货协议蔬菜合同范本
- 个人雇佣保姆合同范本
- 养殖区租赁合同范本
- 出租简约家具合同范本
- 2025年度光伏组件生产质量及售后服务合同
- 2020-2025年中国大气铅污染治理行业发展趋势及投资前景预测报告
- 医疗整形合同范本
- 体外试剂购销合同范本
- 2024年福建漳州人才发展集团有限公司招聘笔试参考题库附带答案详解
- JTGT F20-2015 公路路面基层施工技术细则
- 科室医院感染风险评估表
- 山东省食用油(植物油)生产企业名录496家
- 《智慧农业》的ppt完整版
- GB∕T 33047.1-2016 塑料 聚合物热重法(TG) 第1部分:通则
- 经济学市场失灵与政府失灵课件
- 电力业务许可证豁免证明
- 建筑工程资料归档立卷分类表(全)
- 六年级上第二单元知识结构图
- 溢流堰稳定计算
评论
0/150
提交评论