第08章 MFC编程基础.doc_第1页
第08章 MFC编程基础.doc_第2页
第08章 MFC编程基础.doc_第3页
第08章 MFC编程基础.doc_第4页
第08章 MFC编程基础.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章 ASP数据访问本章提要:本章介绍数据访问的基本概念,并以Access数据库为例,详细介绍ASP的数据库连接,记录的写入、查询、删除、修改等操作,通过实例介绍如果在页面上进行记录的显示和分页等技术。8.1 表单数据传送通过表单元素向服务器传送变量,然后将变量值显示在客户端的浏览器,是一项很平常而重要的工作。8.1.1 表单元素表单元素就如Visual Basic之中的控件一样。在Dreamweaver 2004中,提供了这些元素的具体形式。而表单域作为互动性的一种高级类型,它将表单元素结合在一起,让用户可以通过浏览器,将数据传送到服务器上的其他ASP应用程序。所有的通用表单元素(如单选按钮、下拉列表、复选框等)都可以根据网站的整体构思添加到页面之上,以完成网页的制作。下面的图8.1给出了Dreamweaver 2004中的表单元素,它们包括文本字段、隐藏域、文本域、复选、单选、单选组、列表菜单、跳转菜单、图像域、文件域、按钮、标签、字段集等。图8.1 Dreamweaver MX 2004 设计视图中的表单元素也可以通过插入菜单,来插入这些表单元素。图8.2给出了通过插入菜单插入表单元素的列表。图8.2 Dreamweaver MX 2004设计视图下插入菜单中的表单元素8.1.2 建立表单域表单元素放在一个表单域里面,建立一个表单域,然后修改动作里面的文件为要接受这个表单变量的ASP文件。方法有两种,一种是post,这个方法传送的变量不会在浏览器的地址栏里面显示,可以大批量传送数据;另一种是get,则是会在浏览器地址栏里面显示的。 下面我们通过一个文本表单元素来说明建立表单域的方法。文本域是最基本的表单元素,它传送的是文本信息。一般用户名、密码等都要用这个元素传送,只不过如果是密码的话,要在类型里面选择密码类型,这样就会以 * 代替显示出来的密码字符。文本域的名字很重要,以后会用到这个名字所以一般不用默认的名字。示例: 建立一个提交表单asp01f.asp文件。图8.3为代码,图8.4为显示效果。图8.3 提交表单asp01f.asp图8.4 提交表单asp01f.asp的显示效果这个表单开始的一行:,指定了表单提交的模式为post方式以及向谁(asp01.asp)提交。这个表单中有两个用于数据输入的文本框:用户和密码。注意密码框的type属性是password,那么在密码输入时,为安全起见,将不会显示其值,而用 * 号代替。另有两个单选按钮,用于选择性别。还有一个选项列表,用于选择城市。最后两个按钮,一个用于确定提交,一个用于取消重置,请分别注意它们的type属性为submit和reset。 建立一个接收提交信息并显示的页面asp01.asp。图8.5为代码。图8.5 接收并显示提交信息页面asp01.asp由于前面是用的post方法,那么在asp01.asp里面,就可以用这样的语句来得到变量: 。如果要显示变量则用:。而如果方法用的是get方法,那么就改为 。实际上,两者可以统一为name=request(name)。 运行。下面是运行时的状态。图8.6首先执行asp01f.asp,填入数据后,按确定提交,得到图8.7的显示结果。图8.6 执行提交表单并填入信息图8.7 接收显示结果8.2 数据库的建立为了进行数据的访问,首先要建立数据库,本节以Access2003为例,建立一个名为exasp.mdb的数据库,并建立一个users数据表,以备本章示例之用。有关其他类型的数据库,我们在后面将给出一个总结说明,而更多的数据库知识,请参阅相关资料。下面通过图示,快速介绍建立的过程。 图8.8 Access 2003工作界面图8.8 Access 2003新建文件面版图8.9 新建数据库取名exasp.mdb图8.10 exasp.mdb对象设计窗体图8.11 在exasp.mdb数据库新建表users 图8.12 设置time字段默认值 图8.13 输入几条初始数据库而得到的表8.3 数据库的连接与记录的读取本节学习掌握ASP页面的Access数据库的连接,以及数据表记录的读取。下面的步骤是一个典型的ASP与数据库连接的过程:建立连接对象、设置数据库路径:打开数据库、设置记录对象、取记录。在ASP中,用来存取数据库的对象统称ADO(Active Data Objects),主要含有三种对象:Connection:数据连接对象,用于打开或连接数据库。Recordset:记录集对象,用于存取数据表记录。Command:命令对象,用于对数据库执行查询命令。8.3.1 数据库的连接基于微软IIS的平台上,通过服务器端运行的ASP程序来访问后台数据库,是一种最常见的模式。而对于小型的数据库应用需求,微软的Access数据库,应该是与ASP程序配套使用的首选。由于Access数据库的ODBC驱动程序支持的SQL指令集,执行效率高,所以Access后台数据库、ASP服务器端程序、客户端IE浏览器,是一个精练实用高效的组合模式。在这种使用模式中,ASP程序无疑是最重要的,是沟通客户端和后台数据库之间的桥梁。在ASP程序中,通过VB Script,建立对Access数据库的连接,是客户能够访问后台数据库的前提。 连接各数据库可以使用驱动程序,也可以使用数据源,建议大家使用驱动程序,因为使用驱动程序非常方便、简单,而使用数据源比较麻烦。请看下面的代码: 程序行:set conn=server.createobject(adodb.connection),利用Server对象的createobject方法,建立一个ADO对象集中的connection对象,即连接对象。这是建立数据库连接的初始步骤。执行这行程序后,conn成为一个连接对象。 程序行:conn.open Provider = Microsoft.Jet.OLEDB.4.0; Data Source= & server. mappath (exasp.mdb),利用连接对象conn的open方法打开一个指定的数据库。其中,服务器对象的mappath函数,取得要打开数据库的完整的文件路径,这其中,数据库名是我们需要指定的参数,应该用我们要打开的数据库的实际名称替代。如果数据库名是直接作为常量出现,要用引号将其括起来,并且不能丢掉扩展名。 简单地说,上面的代码就是两句话,第一句话定义了ADODB数据连接组件conn,第二句话利用连接组件conn连接到了数据库exasp.mdb。再看下面的代码:这三条语句加在前面两条语句的后面。 程序行:exec=select * from users。设置查询数据库的命令,它是通过一个SQL查询语句实验的。select后面加的是字段,* 表示所有字段,from后面再加上表的名字,我们前面在exasp.mdb数据库中建立了一个users表。 程序行:set rs=server.createobject(adodb.recordset)。定义一个记录集组件。今后,可以将通过执行查询所有搜索到的记录都放在这个组件(对象)中, 程序行:rs.open exec,conn。是打开这个记录集,exec就是前面定义的查询命令,conn就是前面定义的数据库连接组件。这一句的含义可能简单理解为:在conn所指定的数据库中去,依据exec的设定去执行查询,将查询结果放在打开的rs对象中。关于这条语句的参数值说明如下:格式:Recordset.open Source,ActiveConnection,CursorType,LockType,Options 各参数的含义如下表8.1参数含义值参数值含义SourceSQL查询、数据表或存储过程ActiveConnection打开的连接或连接字符串CursorType游标类型0只在记录中向前移动,速度较快。1可任意移动,其他用户修改记录可见,添加记录不可见,删除记录字段值不可用。2可任意移动,其他用户改、添、删的记录均可见,速度较慢。3可任意移动,其他用户增、删、改的记录均不可见。LockType并发控制0记录为只读1只要保持Recordset为打开,其他用户就无法编辑该记录集中的记录。2当更新recordset中的记录时,将记录加锁3以批模式时更新记录时加锁Options指定source传递命令的类型1SQL语句2数据表名4存储过程8未知类型表8.1 Recordset.open参数说明8.3.2 记录的读取以下语句完成记录的读取:在一个表格中,我们用5列分别显示了上次建立的表里面的5个字段,用do循环,not rs.eof的意思是条件为没有读到记录集的最后,rs.movenext的意思是显示完一条转到下面一条记录,等价于用于在html代码里面插入asp代码,主要用于显示变量。8.3.3 示例下面的图示给出了一个表、一个查询显示数据ASP页面及其执行结果。注意:通常我们将数据库连接语句作为单独的ASP文件(如conn.asp),而在具体的数据库操作页面中,通过一条语句包含这个文件即可:。图8.14 已建立的数据库exasp.mdb中的表users图8.15 用于数据库连接的conn.asp图8.16 通过查询显示数据页面asp02.asp图8.17 asp02.asp的执行结果8.4 记录的写入8.4.1记录写入先建立一个表单(图8.18)图8.18 写入提交表单再建立一个记录写入操作ASP页面(图8.19)。其中包含了conn.asp文件,用以连接到数据库exasp.mdb。通过request对象,得到提交表单中的值,将其赋给相应变量。接着建立一个SQL查询字符串:exec =insert into users(name,tel,city)values(&name&,&tel&,&city&)insert into后面加的是表的名字users,紧跟其后的括号里面是需要添加的字段名,不用添加的字段以及字段内容为默认值的,可以省略不写。values后面是传送过来的变量。以后执行查询时,将这些变量的值添加到记录的字段中。请注意:exec是一个字符串变量,它保存了一个SQL查询语句字符串,这个字符串是分为如下七节通过 & 操作符连接起来的。insert into guestbook(name,tel,message)values(name , tel , city )在ASP里面不能嵌双引号,可以用单引号代替双引号,放在双引号里面,连接两个变量用 + 或者 & 。中间的name、tel、city,就是表单传来的变量。对于name和city,将用单引号括起来,表示是字符串。而tel是数字型变量,所以不需要单引号括起来。如果用表单传来的数据代替变量名字,并假设name=张三,tel=8877666,ciyt=广州。则上述查询字符串的实际结果为:insert into guestbook(name,tel,message) values(张三,8877666,广州)接下来的conn.execute语句,即执行上述exec字符串指定的SQL命令。最后通过conn.close把打开的数据库关闭,把定义的组件conn设置为空,并显示添加成功提示信息。 图8.19 记录写入操作运行。下面的图8.20、图8.21、图8.22,分别通过asp03f.asp提交数据,并执行写入页面asp03.asp。最后查看数据库表的变化。图8.20 在写入表单中键入信息图8.21 按确定后写入成功提示图8.22 数据表的变化说明添加记录成功8.4.2另一种记录写入方法下面介绍另一种记录写入的方法。下面一系列图中给出了相应的代码。提交表单和前面的基本一样,只不过提交的页面换了一个示例页面asp03a.asp。这里主要谈谈写入记录页面。该页面的代码如下:上述代码中主要有几点不同于前面的第一种方法: 在conna.asp中,建立了记录集对象。而rs.open sql,db,1,3,记录集对象rs,以可写入方式打开了通过sql查询得到的数据表记录。 对于rs.addnew,先行创建一条空的新记录。 然后通过赋值的方式将提交表单提交的数据写入到记录集的新记录之中。 通过rs.update更新数据库表,即实际写入。图8.23 向asp03a.asp提交的表单图8.24 数据库连接与记录集的定义图8.25 写入记录的另一方式图8.26 通过提交表单提交数据图8.27 记录添加成功图8.28 数据库表的变化显示记录添加成功8.5 记录的查询本节学习掌握通过ASP页面对Access数据库表记录的查询显示。显然,我们要对所有记录进行查询,但是我们真正需要得到的记录,不可能是所有记录,所有我们必须能够通过适当的查询方式,来得到我们所要的记录。例如:下面的语句,依据SQL查询语句,通过记录集组件rs,得到所有记录。这不我们最后所需要的。 下面请先看一组语句: a=张三 b=8898002 exec=select * from users where name=+a+and tel=+bwhere后面加上的是条件,与是and,或是or,我想=,=,的含义大家都知道吧。这句话的意思就是搜索name是张三的,并且电话是111的记录。还有一点就是如果要搜索一个字段里面是不是包含一个字符串就可以这么写:where instr(name,a)也就是搜索name里面有a(张三)这个字符串的人。我这里的a,b,是常量,大家可以让a,b是表单提交过来的变量,这样就可以做一个搜索了。图8.29 查询条件提交表单图8.30 查询条件提交表单显示效果图8.31 查询并显示结果图8.32 执行查询条件提交表单图8.33显示查询结果8.6 记录的删除本节学习掌握通过ASP页面对Access数据库表记录的删除操作。记录的删除操作可使用SQL删除语句来实现。假设数据exasp.mdb的users表的记录如下图:图8.34 users表记录请看下面的例子:在一个表单中输入要删除记录的ID号,然后删除数据库表中与这个输入值相同的ID的记录。图8.35 删除条件提交表单图8.34中,给出了提交删除申请的表单文件asp05f.asp,它向asp05.asp提交删除条件数据。 图8.35中,给出了删除记录并显示剩余记录的代码。其中下面两行是关键性的代码。exec=delete * from users where ID=&request.form(id)conn.execute exec第一行给出用于删除的SQL语句字符串,其中条件是表中的ID字段值等于来自提交表单的id变量值。第二行执行这个SQL删除语句。其它代码包括前面的包括文件和记录集的定义和打开。后面的是用于显示剩余记录的代码。图8.36 删除记录并显示剩余记录代码下面来执行:图8.37 执行提交表单并输入记录号ID号为6的记录被删除剩余记录显示如下:图8.38 执行提交表单并输入记录号8.7 记录的修改修改记录是数据库基本操作之一。下面通过实例来学习修改记录,其中有三个ASP页面:asp06f.asp(通过输入修改查询条件name来指定记录)、asp06.asp(找到并显示将被修改的记录,且可进行修改数据提交)、asp06s.asp(更新记录,实际修改表)。 请看图8.39,其中通过表单提交name数据。图8.39 用于给出修改者姓名的提交表单 请看下面的图8.40中的代码。其中有如下包含语句用于错误处理:err.asp文件有如下代码用于过滤错误信息,当出现错误时,代码继续运行。在后面用以下代码实现错误处理,如果出现错误则清除页面并给出提示信息:%If Err.Number 0 Then Response.ClearResponse.Write 没有找到记录!End If% 下面这一段代码先定义查询字符串,然后通过记录集对象打开查询并存放查询结果。注意查询字符串中的where条件,name表示字段,后面跟一个字符串,所以要用单引号将request.form(name)引起来,request.form(name)则是返回上面提交页面中的数据作为查询值。接下来定义了一个表单。一方面这个表单得到rs的记录字段值;另一方面表单中的这些值又可以修改,并可提交给asp06s.asp页面。编号 input type=text name=ID value=姓名 input type=text name=name value=电话 input type=text name=tel value=城市 input type=text name=city value=最后是关闭记录集和数据库连接对象。图8.40 根据姓名找出并显示记录 请看下面的图8.41中的代码。为了接受asp06.asp中经过修改后的记录数据,必须又要找到那条记录,这时通过前面已找到的记录的ID来定位记录。注意,在用rs打开查询时用到了参数 “1,3”。exec=select* from users where ID=&request.form(ID)set rs=server.createobject(adodb.recordset)rs.open exec,conn,1,3接着用三条语句将修改后的三个字段值写入rs记录集中,再进行rs.update,更新数据表,完成修改数据记录值。后面是关闭记录集和数据库连接对象,并提示记录修改成功。rs(name)=request.form(name)rs(tel)=request.form(tel)rs(city)=request.form(city)rs.updaters.closeset rs=nothingconn.closeset conn=nothingresponse.write 记录修改成功!图8.41 修改记录 下面是示例演示的情况:图8.42 修改前的表图8.43 输入姓名图8.44 显示该记录图8.45 修改该记录号图8.46 修改成功图8.47 修改后的表8.8 记录显示的分页前面在第三节学习了记录的显示,当记录数相当多的时候,我们有必要在显示的过程中对它们进行分页显示。8.8.1 实现分页的基本方法将数据库表中所有符合查询条件的记录读入到记录集rs而存放于内存,然后通过ADO Recordset对象所提供的几个专门支持分页处理的属性: PageSize、PageCount、 AbsolutePage等来处理分页。所以我们首先必须了解 Reordset 对象的属性和方法: BOF与EOF 属性 通过检验BOF与EOF 属性,可以判断目前记录指针所指向的RecordSet的位置,亦可判断一个 Recordset 对象是否包含有记录或者移动记录行是否已经超出Recordset对象范围。如:。具体情况参见下面列表:当前记录位置位于第一行记录之前,BOF为true,反之为false。 当前记录位置位于末一行记录之后,EOF为true,反之为false。当前记录位置位于RecordSet当中,BOF与EOF都为False。 如果在RecordSet里没有任何记录,BOF与EOF都为True。 Move 方法Move方法用于将记录指会移动到RecordSet中的某一条记录。语法如下: rs.Move NumRecords,Start 这里的“rs”为一个对象变量,表示一个想要移动当当前记录位置的Recordset 对象;“NumRecords”是一个正负数运算式,设定当前记录位置的移动数目;“start”是一个可选的项目,用来指定记录起始的标签。所有的 Recordset 对象都支持 Move 方法,如果 NumRecords 参数大于零,当前记录位置向末尾的方向移动;如果其小于零,则当前记录位置向开头的方向移动;如果一个空的 Recordset 对象调用 Move 方法,将会产生一个错误。MoveFirst方法:将当前记录位置移至第一条记录。 MoveLast方法:将当前记录位置移至最后一条记录。 MoveNext方法:将当前记录位置移至下一条记录。 MovePrevious方法:将当前记录位置移至上一条记录。 Moven方法:移动指标到第n行记录, n 由 0起。 AbsolutePage 属性 AbsolutePage 属性设定当前记录的位置是位于哪一页的页数编号;使用 PageSize 属性将 Recordset 对象分割为逻辑上的页数,每一页的记录数为 PageSize( 除了最后一页可能会有少于 PageSize 的记录数 )。这里必须注意并不是所有的数据提供者都支持此项属性,因此使用时要小心。与 AbsolutePosition 属性相同, AbsolutePage 属性是以 1 为起始的,若当前记录为 Recordset 的第一行记录, AbsolutePage 为 1。可以设定 AbsolutePage 属性,以移动到一个指定页的第一行记录位置。 AbsolutePosition 属性 若您需要确定目前指标在 RecordSet 中的位置,您可以用AbsolutePosition 属性。 AbsolutePosition 属性的数值为目前指标相对於第一行的位置,由 1算起,即第一行的 AbsolutePosition 为 1。注意 , 在存取 RecordSet 时,无法保证 RecordSet 每次都以同样的顺序出现。若要启用 AbsolutePosition,必须先设定为使用用户端cursor( 指针 ), asp 码如下:rs.CursorLocation = 3 PageCount 属性 使用 PageCount 属性,决定 Recordset 对象包括多少“页”的数据。这里的“页”是数据记录的集合,大小等于 PageSize 属性的设定,即使最后一页的记录数比 PageSize 的值少,最后一页也算是 PageCount 的一页。必须注意也并不是所有的数据提供者都支持此项属性。 PageSize 属性 PageSize 属性是决定 ADO 存取数据库时如何分页显示的关键,使用它就可以决定多少记录组成一个逻辑上的“一页”。设定并建立一个页的大小,从而允许使用 AbsolutePage 属性移到其它逻辑页的第一条记录。PageSize 属性能随时被设定。 RecordCount 属性 这也是一个非常常用和重要的属性,我们常用 RecordCount 属性

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论