10第十章数据库的读取插入删除与更新Word文档格式.docx
《10第十章数据库的读取插入删除与更新Word文档格式.docx》由会员分享,可在线阅读,更多相关《10第十章数据库的读取插入删除与更新Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
电话
101
小齐
男
1983/10/31
0010-55536
102
琳达
女
1973/3/14
0010-55534
103
安琪
1965/8/12
0010-55535
104
陶子
1988/11/20
0010-55576
第六条记录
105
包子
1981/6/9
0010-55512
106
饺子
1984/5/18
在ACCESS数据库中,这些数据组合成为一个“表”,数个性质相同的表组合一个数据库。
1-3何为关系型数据库(RDB)
个人数据库在使用及管理技术较为简单,但如果时一个包含许多数据库文件的大型数据库系统,则需要专业的管理技术,诸如:
如何快速找到全国各地的客户及订单数据?
如何确保输入数据的正确性?
如何避免不同地区的人员同时更改同一条信息?
如果建立数据库文件之间的关联性?
如何使各数据库可以兼容共享?
为了避免数据库或表内的字段一再重复,例如:
在“学生个人表”内已有学生个人数据,若在“学生成绩单表”又填入学生个人数据,将造成数据的重复。
因此,利用关系型数据库,我们可以在表之间使用一个字段(如学生的学号),把学生个人数据与成绩,操行成绩连接起来整合处理。
将两种以上性质不同的表,经过关联后,就可以当作一个整体的数据来处理,快速达到数据查询与整合的目的,此即所谓的“关系型数据库(RelationalDataBase)”。
以下便使我们用“学生管理系统”来说明数据库与表的关系,表之间以“学号”这个字段连接。
由上方3个表,我们可同时找到学号101同学的姓名,地址,连接,到2,3个表就可查到各科成绩,名次,功过记录,操行总分等,并将显示到同一张成绩单上。
1-4ASP与数据库
ASP是通过一组统称为ADO(ActiveXDataObjects)的对象模块来存取数据库,无论您采用的是Access,SQLServer,VisualFoxPro,Informix,Oracle,dBase或其他数据库,只要该数据库具有对应的ODBC或OLEDB驱动程序,ADO对象就能加以存取。
如图:
学生操行表
学好:
旷课:
1次
请假:
10次
大功:
没有
小功:
大过:
等级:
乙
学生成绩表
语文:
89
英语:
90
数学:
91
计算机:
70
总分:
340
职业:
无业
学生个人表
学号:
姓名:
卜快乐
性别:
电话:
574514
地址:
盐城大庆路
家长:
郝郁闷,卜美丽
要知道系统安装了哪些ODBC或OLEDB驱动程序,Windows2000的用户可以打开“控制面板”,依序在“管理工具”,“ODBC数据源”上双击鼠标左键。
事实上,ASP提供的ADO对象模块包含了下列6个对象和3个集合,比较常用的则是Connection,Recordset,Command,Field等。
1-5建立Access数据库
虽然不同的系统可能安装不同的ODBC或OLEDB驱动程序,但只要您安装了IIS,系统上至少会由MicrosoftAccessDrive,MicrosoftODBCforOracle,SQLServer等ODBC驱动程序。
换句话说,你至少可以用Access,SQLServer,Oracle等3种最主流的数据库从事ASP网页数据库设计。
由于MicrosoftAccess2000属于Office2000家族,取得较为容易,且界面和Office家族相似,学习起来没有什么障碍!
步骤:
1.打开,新建空数据库。
2.保存到服务器路径。
3.创建一张表。
4.输入字段。
5.定义主键。
(可选)
6.输入信息。
1-6打开和关系数据库连接
在存取数据库之前,您必须使用ADO对象模块的Connection对象打开数据库连接。
格式:
Dimconn
Setconn=Server.CreateObject("
ADODB.Connection"
)
说明:
Connectiong对象主要的用途是打开与关闭数据库连接。
方法:
Close关闭数据库连接
Open打开一个数据库连接
Execute对表进行SQL查询
属性:
ConnectionString描述数据库的连接方式
数据库连接的完整代码:
(AccessOLEDB驱动程序)
dimconn
SetConn=Server.CreateObject("
Conn.ConnectionString="
Provider=Microsoft.Jet.OLEDB.4.0;
DataSource="
&
Server.MapPath("
数据库名.mdb"
Conn.Open
程序解释:
使用Server.CreateObject方法建立Connection对象实例,再指派给conn.
使用Connection对象的ConnectionSting属性设置数据库的连接方式,其中Provider=Microsoft.Jet.OLEDB.4.0;
表示采用OLEDB驱动方式进行连接。
而Server.MapPath("
)就是数据库的路径,最后使用方法Open打开数据库。
最后,打开数据库进行了一系列的操作,要关闭和销毁对象实例的。
conn.close关闭数据库连接
setconn=nothing释放Connection对象实例所占的空间。
1-7读取,插入,更新与删除表的记录
在您学会使用Connection对象打开数据库连接之后,接下来,您可以使用ADO对象模块提供的Recordset对象存取表的记录。
建立Recordset对象实例的方法如下:
Setrs=Server.CreateObject("
ADODB.Recordset"
Recordset对象
Recordset对象可以存取表的记录,包括读取,插入,删除或更新等。
AddNew插入记录,需再执行Update方法才能完成数据新增
Delete删除指针所指到的记录
Open取得Recordset对象,它可能包含表的所有记录或符合SQL查询的记录。
Update完成更新
MoveNext移到指针的下一条记录。
MovePrevious移到指针的上一条记录。
MoveFirst移到第一条记录。
MoveLast移到最后一条记录。
MoveNum移到对象种目前指针的下个Num条记录
AbsolutePosition目前指针的绝对位置,其值再1~RecordCount属性的值之间。
AbsolutePage当Recordset对象由设置分页时,AbsolutePage会返回目前的页码。
BOF若指针位于第一针记录前,返回True,否则返回False
EOF若指针位于最后一条记录之后,返回True,否则返回False
Filter筛选记录
MaxRecords可以返回的最多条记录数。
PageCount返回分页总数。
PageSize设置分页时,PageSize为每页的记录条数。
RecordCount返回记录条数
cursorType指针对象中的移动方向有四种参数值
设置值常数说明
0adOpenForwardOnly默认值,表示只能向下一条记录移动。
1adOpenKeyset指针可以自由上下移动,可看到更新记录,看不到新增和删除记录
2adOpenDynamic什么都可以看到,消耗资源多,而且Access不支持
3adOpenStatic自由移动指针,看不到新增和删除或更新,和数据库中断了。
LockType能否写入记录
设置值常数说明
1adLockReadOnly默认值,表示所有记录只读,不允许修改
2adLockPessimistic当开始编辑某条字段时,锁定记录,待编辑完后update更新,解锁
3adLockOptimistic调用update更新锁定记录,和2比起来有不同步的问题,但效率好
4adLockBatchOptimistic允许我们以批次的方式更改记录
CursorLocation设置记录存放的位置
2adUserServer表示记录存放在服务器上
3adUserClient表示记录被下载到浏览器端
1-8读取表的记录
第一个范例:
<
HTML>
<
BODY>
%
Dimconn
setconn=Server.CreateObject("
)
Conn.ConnectionString="
Provider=Microsoft.Jet.OLEDB.4.0;
&
"
DataSource="
friend.mdb"
Conn.Open
dimrs
setrs=Server.CreateObject("
rs.Open"
择友俱乐部"
conn,1,1
ifnotrs.eofThen
Response.Write"
编号:
rs("
编号"
)&
BR>
姓名"
性别"
年龄:
年龄"
星座:
星座"
身高:
身高"
else
到达数据库的结尾,无法显示记录。
endif
rs.Close
Setrs=Nothing
conn.Close
Setconn=Nothing
%>
/BODY>
/HTML>
首先程序代码意义就是使用Connection对象打开数据库连接,这个Access数据库名称为friend.mdb,它里面有一张“择友俱乐部”表,里面有25调记录。
其次建立一个Recordset对象实例,然后指派给变量rs.
在这里,我们来看一下Recordset的语法:
语法:
Rs.Open(Source,Connection,Connection,CursorType)
参数:
Source:
这个是Command对象或包含指定的字符串(择友俱乐部)
Connection:
用来打开数据库连接的Connection对象,(conn)
CursorType:
设置指针对象的移动方向,
(1),表示指针自由的上下移动。
LockType:
设置能否写入表,
(1)表示指针只读,不能写入。
指针:
1,1
所以对照语法,出来的格式为:
rs.open“择友俱乐部”,conn,1,1
再然后,我们读取记录,指针默认会放在第一针位置,如图:
BOF
第一列第二列第三列第四列
EOF
Rs.bof就是检测指针是否在第一条记录之前,也就是说检测是否有数据。
Rs.eof就是检测指针是否在第一条记录之后,同上。
若要移动指针的位置,必须使用Recordset对象的MoveNext(移动到下一条记录),或者MovePrevious(移动到上一条记录)或者MoveFirst(移动第一条记录),MoveLast(移动最后一条记录)或MoveNum(移动到下Num记录).
修改第一个范例:
(显示全部记录的方法)
在第一个范例我们用了IF语句进行了判断,然后输出了数据,因为IF本身不是循环,所以只能显示一条数据,也就是第一条数据。
我们如何显示全部数据,当然就是用循环语句了。
Dowhilenotrs.eof
……
rs.movenext
loop
首先我们用了当循环,判断了条件成立,输入第一行数据,然后,遇到了rs.movenext这个属性方法,它的用途就是将指针转移到下一个记录点上,然后循环再判断,知道下一行没有数据了,dowhilenotrs.eof判断为假的时候,才结束循环。
这样显示比较丑陋,如果做城表格的形式呢?
第二个范例:
Server.MapPath("
%>
tableborder="
1"
width=500align="
center"
>
tr>
td>
编号<
/td>
姓名<
性别<
年龄<
星座<
身高<
/tr>
%
dowhilenotrs.eof
%=rs("
)%>
/table>
这个就把数据库里的数据在网页上显示了。
1-9新增表的记录
Rs.AddNewFieldname,Value
再表新增一条记录,其字段名称为Fieldname,数据为Value,请注意,须再执行rs.update方法才能完成新增。
范例:
(部分代码)
3,3
conn,3,3
rs.addnew
)="
26"
李炎恢"
20~30"
男"
天蝎座"
175~180"
体重"
65~75"
职业"
老师"
rs.update
首先打开这个表的方式出现了改变,上一个例子中是只读,现在是写入,所以要要将rs.Open打开的方式改为3,3我们可以先记一个口诀:
1,1能读取,3,3可写入,
然后写入数据库也很明了:
rs.addnew….rs.update之间写入就可以了。
1-10如何读取字段名称及字段数目(提高)
我们知道,Recordset对象是以二维数组的形式存储表的记录。
事实上,Recordset对象的每一行都是属于Fields集合,而Fields集合的每一个项目都是一个Field对象。
第一列
第二列
。
Field对象(Fields(0))
Field对象(Fields
(1))
正因如此,所以我们能够利用Fields集合的Count属性读取表的字段数目,然后Fields对象的Name和Value属性分别读取字段名称,字段数据。
rs.Fields.Count返回字段个数
rs.Fields(i).name返回字段标题
rs.Fields(i).value返回字段的信息
范例:
程序略。
Fields集合是一个数组,而数组里面存放的各个元素都是一个Field的对象,因此我们取数据的时候需要用Count属性取得字段个数,然后用for循环。
要注意,rs.Fields.count返回的是字段的个数,我们这里有8个字段,所以返回数字8,但是因为数组是从0开始计算的,所以,如果要用循环的话,是0-7之间循环,因此最后就写成了forI=0tors.fields.count-1.
1-11使用Recordset对象的Sort属性来进行排序。
将Recordset对象进行排序的方法有两种,其有使用Recordset对象的Sort属性,其二就是使用SQL语句。
rs.sort=”语文”或rs.sort=”语文DESC”或rs.sort=”语文DESC,数学DESC”
1,1或者3,1推荐用3,1
(部分代码)
RS.CursorLocation=3‘设置记录被下载到浏览器端
成绩单"
conn,3,1‘使用3,1来排序
RS.Sort="
语文DESC"
‘最高到最底的方式排序
1-12使用Recordset对象的Filter属性来筛选记录
当我们使用Recordset对象的Open放大打开表时,所读取的将是整个表的所有记录,但有时我们会需要把筛选范围限制载符合某些条件的记录。
例如语文成绩在90分以上的学生的记录。
比较运算符:
=,<
>
<
=,>
=,!
=,<
rs.Filter=”语文>
90or数学>
90”
rs.Filter=”语文<
100and数学<
rs.Filter=”姓名=’宁夕’”
1-13如何设置分页浏览
当表包含很多记录而无法显示在同一页时,我们可以设置分页浏览,将记录分成数页显示,以“零件报价表”来演示。
!
--#includefile="
conn.asp"
-->
rs.open"
零件报价表"
rs.pagesize=10
fori=1Tors.pagecount
response.write"
ahref='
Pageing.asp?
Page="
i&
'
_
第"
页"
/A>
nbsp;
next
pageno=request("
page"
tableborder=1>
零件种类<
厂家<
规格<
价格<
报价日期<
ifpageno<
then
rs.absolutepage=pageno
Fori=1ToRS.PageSize
零件种类"
厂家"
规格"
价格"
报价日期"
rs.movenext
IfRS.EOFThenExitFor
Next
else
response.redirect"
pageing.asp?
page=1"
endif
close.asp"
首先,我们将数据库的打开和关闭用了两个文件存储为模块,简化了程序。
其次,我们来熟悉一下分页所需要的属性:
AbsolutePage当Recordset对