slide1
Download
Skip this Video
Download Presentation
第9章 数据库的使用

Loading in 2 Seconds...

play fullscreen
1 / 122

第9章 数据库的使用 - PowerPoint PPT Presentation


  • 169 Views
  • Uploaded on

第9章 数据库的使用. 9.1 结构化查询语言 SQL 9.2 用 Access 建立一个数据库文件 9.3 搭建 DSN 桥梁 9.4 访问数据库中的数据 9.5 在客户端访问数据库 9.6 用 Command 对象改善查询 习题. 9.1 结构化查询语言 SQL.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 第9章 数据库的使用' - yoshe


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

第9章 数据库的使用

9.1 结构化查询语言SQL

9.2 用Access建立一个数据库文件

9.3 搭建DSN桥梁

9.4 访问数据库中的数据

9.5 在客户端访问数据库

9.6 用Command对象改善查询

习题

9 1 sql
9.1 结构化查询语言SQL
  • SQL 一词实际上是 ″Structured Query Language″ 结构化查询语言的缩写,SQL是用于对存放在计算机数据库中的数据进行组织、管理和检索的一种工具;SQL是一种特定类型的数据库——关系数据库。而控制这种数据库的计算机程序就是DBMS——数据库管理系统,譬如:SQL Server、Oracle、Sybase、DB2 等等。当用户想要检索数据库中的数据时,需要通过SQL语言发出请求,接着DBMS对该SQL 请求进行处理并检索所要求的数据,最后将其结果返回给用户,此过程被称为数据库查询,这也就是数据库查询语言这一名称的由来。
slide3
SQL 不是 C、COBOL 和 FORTRAN 那种完整的计算机语言。SQL 既没有用于条件测试的If语句,也没有用于程序分支的Goto语句以及循环语句For或Do。

9.1.1 查询语句Select

  • 查询是SQL语言的核心,而用于表达SQL查询的Select语句则是功能最强也是最为复杂的SQL语句,它从数据库中检索数据,并将查询结果提供给用户。
  • [例9-3]这一次,做一个稍微复杂一点的查询,如果要列出S表中年龄大于和等于24的所有女性的姓名、工资、电话和居住地区,并且按工资排序,可用下面的Select语句实现。
  • 语法格式:
slide4
Select 数据项1,数据项2,... From 表名 [[Where 条件表达式][Order By排序选项][Group By汇总查询|[Having子句]]]
  • 功能: 从数据库表中检索出满足条件表达式要求的数据项。
  • 说明:

1.  Select子句列出所有要求Select语句检索的数据项。它放在Select语句开始处,指定此查询要检索的字段。这些数据项通常用选择项表示,即一组用“,”隔开的选择项。按照从左到右的顺序,每个选择项产生一列的查询结果,一个选择项可能是以下项目:

(1) 字段名: 标识From子句指定表中的字段。如果字段名作为选择项,则SQL直接从数据库表中每行取出该列的值,再将其放在查询结果的相应行中。

slide5
(2) 常数:指定在查询结果的每行中都放上该值。

(3) SQL表达式: 说明必须将要放入查询结果中的值按表达式的规定进行计算。

2. From 子句列出包含所要查询数据的表,它由关键字From后跟一组用逗号分开的表名组成。每个表名都代表一个包括该查询要检索数据的表。这些表称为此SQL语句的表源,因为查询结果都源于它们。

3. Where子句告诉SQL只查询某些行中的数据,这些行用搜索条件描述。

4. Order By子句将查询结果按一列或多列中的数据排序。如果省略此子句,则查询结果将是无序的。添加ASC属性以升序(从小到大)排列,DESC属性以降序(从大到小)排列。

slide6
5. Group By子句指定汇总查询,它不是对每行产生一个查询结果,而是将相似的行进行分组,再对每组产生一个汇总结果。

6. Having子句告诉SQL只产生由Group By得到的某些组的结果,和Where子句一样,所需要的组也用一个搜索条件指定。

  • 注意: 在这里使用的条件表达式与VBScript中用比较运算符组成的表达式是一致的
slide7
SQL不仅能进行数据库的查询,还可以对数据库中的数据进行修改和更新,而且更改数据库内容的SQL 更简单。不过,对于一个DBMS 来说,数据更新所造成的风险大大超出了数据查询。数据库管理系统必须在更改期内保护所存储的数据的一致性,确保有效的数据进入数据库,数据库必须保持一致性,DBMS还必须协调多用户的并行更新,以确保用户和他们的更改不至于影响其他用户的作业。所以,使用修改和更新语句时,一定要小心!
slide8
9.1.2 插入语句Insert Into
  • 语法格式:

Insert Into表名(col1, col2...) Values (value1, value2...)

  • 功能: 向一个表中加入新的数据行

[例9-4]将张驰作为一个新的成员加入表S中。

Insert Into S( xm,xb,nl,gz,dh,dz) Values (′张驰′,′男′,28,4500,8888,′北京′)

  • Insert 语句还可以将多行数据添加到目标表中去,在这种形式的 Insert 语句中,新行的数据值不是在语句正文中明确地指定的,而是语句中指定的一个数据库查询。添加的值来自已经存在的表中。看下面的例子。
slide9
[例9-5]如果要把2000年12月30日之前产生的订单编号(Num)、日期(Date)和数目(Amount)从A表拷贝到另一个名为B的表中去,可用下面的语句:[例9-5]如果要把2000年12月30日之前产生的订单编号(Num)、日期(Date)和数目(Amount)从A表拷贝到另一个名为B的表中去,可用下面的语句:

Insert into B (Num,Date,Amount) Select Num,Date,Amount From A Where Date<′30122000′

9.1.3 更新语句Update

  • 下面介绍 Update 的用法,Update 语句用于更新表中选定行的一列或多列的值。要更新的目标表在语句中定义,Set子句则指定要更新哪些列并计算它们的值。 Update 语句总是包含Where语句,因为Update语句比较危险,所以你必须明确地认识到 Where 语句的重要性,Where 语句被用来指定需要更新的行
slide10
语法格式:

Update 表名 Set 字段名1=value1 \[,字段名2 = value2\]... Where 条件

  • 功能: 用value值更改选定的表中已经存在的字段的数据。

[例9-6]这是一个简单的Update 语句,可将表C中客户名为slp的客户的信贷值更新为10万并将他的ID变更为99。

Update C Set credit=100000.00,id=99 Where name=′slp′

slide11
[例9-7]如果要将表C中客户ID为80、90、100、120客户的信贷值更新为20万,状态值为021,可用下列语句:[例9-7]如果要将表C中客户ID为80、90、100、120客户的信贷值更新为20万,状态值为021,可用下列语句:

Update C Set credit=200000.00,state=021 Where ID in (80,90,100,120)

  • Where 字段名in (数据集合),表示查询“字段名”的值为“数据集合”中的所有记录。例如,上例中“字段名”为ID,ID的值为80、90、100、120。
  • SQL 处理 Update 语句的过程是逐行搜索所指定的表,更新满足搜索条件的记录,跳过不满足搜索条件的记录。
slide12
9.1.4 删除语句Delete
  • 语法格式:

Delete from 表名 Where 条件

  • 功能: 从一个表中删除数据行。

[例9-8]从表D中删除ID为99的所有行的记录。

Delete from D Where ID=99

9.1.5 创建表语句Create table

  • SQL 语言可以分为两大部分: 数据定义语言和数据操纵语言,以上介绍的是数据操纵语言的Select 语句。下面介绍数据定义语言,它是用来创建和修改数据库结构的一种语句,包括 Create 和 Drop 语句。
slide13
语法格式:

Create table 表名 ( 字段名1 数据类型 \[NOT NULL\],字段名2 数据类型 \[NOT NULL\], 字段名3 数据类型\[ NOT NULL\]...)

  • 功能: 建立一个给定字段的表。

[例9-9]下面的语句创建一个具有字段name字符型30位, amout数值型8位,id数值型4位的表B。

Create Table B (name CHAR(30), amout NUMBER(8), id NUMBER(4))

  • 虽然Create table 比前面介绍的语句难理解一些,但仍然很直观。它将表B赋予一个新表,并指定表中三列的名称和数据类型。表被建立后就可以添入数据了。可用下面的语句输入数据。
slide14
Insert Into B(name,amout,id) Values(′zhangchi′,100,1)

9.1.6 删除表语句Drop table

  • 如果,你觉得不再需要保存某个表的数据信息,则可用 Drop table 语句将该表及其所包含的所有数据从数据库中删除掉。
  • 语法格式:

Drop table 表名

  • 功能: 删除一个表。

[例9-10]如果要删除表B可使用下面的语句。

Drop table B

9 2 access
9.2 用Access建立一个数据库文件
  • 如果你已经安装有Access软件,可单击Windows 2000的“开始”→“程序” →“Microsoft Access”菜单,启动Access,可看到如图9.1所示的对话框。
  • 在Microsoft Access对话框中,选择“空Access数据库”,然后单击“确定”按钮,打开“文件新建数据库”对话框,如图9.2所示,单击“新建文件夹”图标,会弹出图9.3所示对话框。
slide19
在图9.3所示“新文件夹”对话框中输入你取的名称,如“mydb”,然后单击“确定”按钮,将返回“文件新建数据库”对话框,但路径已经改变,如图9.4所示。在图9.3所示“新文件夹”对话框中输入你取的名称,如“mydb”,然后单击“确定”按钮,将返回“文件新建数据库”对话框,但路径已经改变,如图9.4所示。

图9.4

slide20
在“文件新建数据库”对话框的“文件名”框中输入你要建的数据库的名字,如“mydb1”,然后单击“创建”按钮,即可打开“数据库窗口”,如图9.5所示。在“文件新建数据库”对话框的“文件名”框中输入你要建的数据库的名字,如“mydb1”,然后单击“创建”按钮,即可打开“数据库窗口”,如图9.5所示。

图9.5

slide21
双击“通过输入数据创建表”将打开“表”窗口如图9.6所示,在这里可输入你要保存的数据,在“字段1”上右击选择“重命名列”,可输入“姓名”,同样可将“字段2”改写为“年龄”,“字段3”改写为“工资”,“字段4”改写为“电话”,“字段5”改写为“地址”,“字段6”改写为“出生日期”,并填写相应的数据,如图9.7所示。双击“通过输入数据创建表”将打开“表”窗口如图9.6所示,在这里可输入你要保存的数据,在“字段1”上右击选择“重命名列”,可输入“姓名”,同样可将“字段2”改写为“年龄”,“字段3”改写为“工资”,“字段4”改写为“电话”,“字段5”改写为“地址”,“字段6”改写为“出生日期”,并填写相应的数据,如图9.7所示。
slide24
如果这次的数据都输入完了,可单击Microsoft Access的窗口的“文件”→“保存”菜单,将出现“另存为”对话框,如图9.8所示,在“表名称”栏中填写你的表名称如“S1”,然后单击“确定”按钮,会出现一个icrosoft Access的提示对话框,如图9.9所示。
  • 图9.9提示你应该定义一个主关键字,单击“是”按钮,将会直接为你增加一个ID字段,如图9.10所示。
  • 图9.10中所示的“表”窗口已经显示出你定义的表名“S1”,也可看到ID字段自动输入的数值1、2。至此,一个Access表S1就建好了。你可单击Microsoft Access窗口右上角的按钮,关闭Microsoft Access窗口,结束建表的工作。如果你要向表S1输入数据,可直接打开表S1继续输入的工作。
9 3 dsn
9.3 搭建DSN桥梁
  • 先来说明什么是ODBC。ODBC是一种访问数据库的方法,只要系统中有相应的ODBC驱动程序,任何程序就可以通过ODBC操纵数据库。比如系统中有Access的ODBC驱动程序,那么即使你没有Access软件,也可以在你的ASP程序中间对一个Access的数据库进行加、删、改记录的操作。而且根本不用知道这个数据库是放在哪里。只要写出SQL语句,ODBC驱动程序就会帮你做一切事情。
slide29
用ODBC时,经常见到DSN这个名词,DSN(Date Source Name)即数据源名称。在给ODBC驱动程序传SQL指令时,即是用DSN来告诉它到底操作的是哪一个数据库。如果数据库的平台变了,比如改用了SQL Server的数据库,只要其中表的结构没变,就不用改写程序,只要重新在系统中配置DSN就行了。由此可见,DSN是应用程序和数据库之间的桥梁,要通过ODBC访问数据库,前提就是必须配置好DSN(即架好桥梁)。一个DSN必须包含如下一些信息。
  • DSN的名字: 就是给这座桥取个名字,当程序访问数据库时,给系统传的就是这个名字,而不是数据库的实际名称。
  • ODBC驱动程序类型:只有指出驱动程序类型,在操作数据库时,系统才会知道调哪个ODBC驱动程序来服务。
slide30
数据库: 必须指定这座桥到底连接的是哪个数据库,但不同的数据库系统指定数据库名字的方法有些不同。
  • 这座桥是架在系统之中的,所以Windows 95/98提供了一个工具来完成这件事,即控制面板中的32位ODBC,或Windows 2000/NT中“控制面板”/“管理工具”的用户DSN、系统DSN、文件DSN。一般要用系统DSN,因为这样可以让所有在该系统上操作的人都能使用这个DSN。

(1) 单击Windows 95/98“开始”→“设置” →“控制面板”,打开“控制面板”窗口,如图9.11(a)所示。或Windows 2000/NT中“控制面板” →“管理工具”,如图9.11(b)所示。

slide33
(2) 双击图标“ODBC数据源(32位)”或“数据源(ODBC)”,将弹出“ODBC数据源管理器”对话框,如图9.12所示,选择“系统DSN”标签。

(3) 在图9.12中单击“添加”按钮,将弹出“创建新数据源”对话框,如图9.13所示。选择“Microsoft Access Drive”选项,单击“完成”按钮,将弹出“ODBC Microsoft Access安装”对话框,如图9.14所示。

slide37
(4) 在图9.14中的“数据源”栏中输入你希望指定的DSN名称,如“QL”,然后单击“数据库”栏中“数据库:”下的“选取”按钮,将打开“选择数据库”对话框,如图9.15所示。
  • 在图9.15中先在目录下选择数据库存放的路径,再选择要使用的数据库,例如“C:\..\My Documents\mydb\mydb1.mdb”,然后单击“确定”按钮就大功告成了。
  • 以后可以用“ql”来访问数据库“C:\..\my Documents\mydb\mydb1.mdb”,而不用直接使用文件名“C:\..\My Documents\mydb\mydb1.mdb”,这样做的好处是,一旦改变了文件名或存放地,就不必一个一个地修改程序中所有该数据库的名称,而只需修改DSN中的配置就可以了。
slide38

以上步骤完成后,在ASP程序中即可利用DSN与数据库mydb1.mdb中的表S1建立联系了。以上步骤完成后,在ASP程序中即可利用DSN与数据库mydb1.mdb中的表S1建立联系了。

图9.15

slide39
9.4 访问数据库中的数据

9.4.1 使用Recordset对象处理结果

  • 对于检索数据、检查结果和更改数据库,ADO提供了Recordset对象。正如它的名称所暗示的那样,是对记录的设置。Recordset 对象有许多可以使用的特性,可根据不同的查询条件限制,检索并且显示一组数据库文件的记录。 Recordset 对象还保持查询返回的记录的位置,它返回第一个检索到的记录,但允许你一次一项逐步扫描其他结果。
slide40
根据 Recordset 对象的指针类型的属性设置,可以滚动和更新记录。指针可以让你在一组记录中定位到特定的项。指针还用于检索和检查记录,然后在这些记录的基础上执行操作。Recordset 对象还有一些属性,可用于精确地控制指针的行为,提高检查和更新结果的能力。下面通过例子来看看如何使用Recordset 对象。

[例9-11]查询并显示数据库表中数据的程序。

<%

Set rs=Server.CreateObject(″ADODB.Recordset″)

rs.Open ″Select * from S1″,″DSN=ql;″%>

slide41
姓名为:<%=rs(″姓名″)%><p>

年龄为:<%=rs(″年龄″)%><p>

工资为:<%=rs(″工资″)%>

<%rs.Close

set rs=nothing

%>

  • 9.11.asp执行的结果如图9.16所示。
slide43
语法格式:

<%

Set rs= Server.CreateObject(″ADODB.Recordset″)

rs.Open 数据查询信息,数据库连接信息

=rs(″字段名称″)

...

rs.close

set rs=nothing

%>

  • 功能: 使用Recordset对象可返回已经建立连接的数据库中的数据。
slide44
说明:
  • 第一行是声明rs为建立的Recordset对象的实例,这个语句不能少。
  • 第二行是以Recordset对象的Open方法连接并发出数据查询,其中的“数据查询信息”由SQL请求命令语句组成,“数据库连接信息”由“DNS=数据源名称;UID=登录名称;PWD=密码;”组成,数据源的登录名称和密码可在建立数据源时通过“高级”选项进行设置;登录名称和密码也可以省略不设。
  • 第三行“=rs(″字段名称″)”确定输出哪些数据字段。
slide45
第四行为Recordset对象的rs.close方法,将释放Recordset对象及其相关的对象。但close方法不会将Recordset对象从内存里清除,如果你不再需要这个对象了,要使用set rs=nothing,这个语句可以精确地清除这个对象。
  • 注意: 当打开一个数据库的表时,如果这个表中包含若干条记录,则当前的记录指针指向第一条记录。所以,例子中显示的数据是表S1中的第一条记录的数据。
slide46
[例9-12]显示数据库表中所有数据的程序。

<%Set rs=Server.CreateObject(″ADODB.Recordset″)

rs.Open ″Select * from S1″,″DSN=ql;″%>

<%while not rs.EOF%>

姓名为:<%=rs(″姓名″)%>

年龄为:<%=rs(″年龄″)%>

工资为:<%=rs(″工资″)%><p>

<%rs.MoveNext

wend%>

<%rs.Close

set rs=nothing

%>

slide47

9.12.asp执行的结果如图9.17所示,可看到在S1中要求的数据都显示了出来。9.12.asp执行的结果如图9.17所示,可看到在S1中要求的数据都显示了出来。

图9.17

slide48
这里使用了while...wend循环,并使用了Recordset 对象的MoveNext方法,将记录指针向下移动一行。
  • 下面列出了所创建的 RecordSet对象(游标)的一些属性和方法。
  • rs.EOF: 记录指针在记录的尾部;
  • rs.BOF: 记录指针在记录的头部;
  • rs.Fields.Count: RecordSet对象的字段总数;
  • rs(i).Name: 第 i 个字段的名称, i 由 0 算起到 rs.Fields.Count1;
  • rs(i): 读取第 i 个字段的数据, i 由 0 算起到 rs.Fields.Count1;
  • rs(″ 字段名称 ″): 读取指定字段的数据;
  • rs.RecordCount: 游标中的数据记录总数;
slide49
rs.MoveNext: 将指针移到下一个记录;
  • rs.MovePrev: 将指针移到上一个记录;
  • rs.MoveFirst: 将指针移到第一个记录;
  • rs.MoveLast: 将指针移到最后一个记录;
  • rs.Move [n] : 将指针移到第 n 个记录,n由0算起;
  • rs.Move NumRecords,Start: “NumRecords”是一个正负数运算式,设定当前记录位置的移动数目;“start”是一个可选的项目,用来指定记录起始的标签;
  • rs.Close: 关闭 RecordSet 对象。
slide50
9.4.2 使用Connection对象

1. 向数据库插入数据

  • ADO提供了Connection对象,用于建立和管理应用程序和ODBC数据库之间的连接。Connection对象具有各种属性和方法,可以使用它们打开和关闭数据库连接,并且发出查询请求来更新信息。
  • 下面的脚本使用Connection对象的Execute方法发出SQL Insert命令向数据库中的表发出查询,该命令并将数据插入到指定的数据库表中。

[例9-13]将新的数据插入到数据库表文件里的程序。

<%

Set cn =Server.CreateObject(″ADODB.Connection″)

slide51
cn.Open ″DSN=ql;″

strSQL=″Insert Into S1 (姓名,年龄,工资,电话,地址,出生日期) Values (′Jose′,′34′,′8000′,′64455′,′广州′,′1960/03/23′)″

cn.Execute(strSQL)

%>

<%cn.Close

set cn=nothing%>

  • 在浏览器中执行9.13.asp文件,在状态栏中出现“完成”后,虽然浏览器窗口中没有内容,但此时打开Access中的数据库mydb1,从S1表中可看出9.13.asp文件中列出的数据都插入表中了,而且每执行一次9.13.asp文件就会向表S1插入一个相同的记录。S1表中是执行了三次的结果,如图9.18所示。
slide53
从这个例子可以看到数据库mydb1中的S1表被插入了数据。插入的方法总结如下。从这个例子可以看到数据库mydb1中的S1表被插入了数据。插入的方法总结如下。
  • 语法格式:

<%

Set cn = Server.CreateObject(″ADODB.Connection″)

cn.Open数据库连接信息

strSQL=″Insert Into S1 (字段名表) Values (相应的字段值)″

cn.Execute(strSQL)

cn.Close

set cn=nothing

%>

slide54
功能: 在已经建立连接的数据库中插入数据。
  • 说明:
  • 第一行创建 Connection 对象的实例;
  • 第二行打开数据库连接,其中的“数据库连接信息”与前面Recordset对象的Open方法中的说明相同;
  • 第三行为设置的SOL字符串变量,使用了SQL插入数据的语句;
  • 第四行用Connection对象的Execute方法,发出结构化查询语言(SQL)查询数据库源并插入数据。其他两行与Recordset对象类似。
slide55
2. 更改数据库中的数据
  • 除了SQL Insert 命令以外,还可以使用 SQL Update 和 Delete 命令更改和删除数据库信息。用 SQL Update 命令,你可以改变数据库表中各字段的值。看看下面的例子。

[例9-14]使用 Update 命令将S1表中每个“姓名”字段包含′Jose′记录的“姓名”字段更改为“王红”的程序。

<%

Set cn =Server.CreateObject(″ADODB.Connection″)

cn.Open ″DSN=QL;″

cn.Execute(″Update S1 Set 姓名=′王红′ Where 姓名=′Jose′ ″)

%>

<%cn.Close

set cn=nothing%>

slide56

在浏览器中执行9.14.asp文件,在状态栏中出现“完成”后,可打开Access中的数据库mydb1,从S1表中可以看出,“姓名”字段下的“Jose”被改写为“王红”了,如图9.19所示。在浏览器中执行9.14.asp文件,在状态栏中出现“完成”后,可打开Access中的数据库mydb1,从S1表中可以看出,“姓名”字段下的“Jose”被改写为“王红”了,如图9.19所示。

图9.19

slide57
在这个例子中直接在cn.Execute后面写了SQL字符串,与上例的效果是一样的。在这个例子中直接在cn.Execute后面写了SQL字符串,与上例的效果是一样的。
  • 在更改数据时,Update命令会将满足条件的所有记录中的数据进行更改,你要更改个别记录中的字段时可多加一些限制条件。

3. 删除数据库中的记录

  • 要想从数据库表中删除特定的记录,可使用 SQL Delete 命令。

[例9-15]使用Delete命令将S1表中“ID”字段为5的记录删除。

slide58
<%

Set cn =Server.CreateObject(″ADODB.Connection″)

cn.Open ″DSN=ql;″

cn.Execute ″Delete From S1 Where ID = 5″

%>

<%cn.Close

set cn=nothing%>

  • 在浏览器中执行9.15.asp文件,在状态栏中出现“完成”后,可打开Access中的数据库mydb1,从S1表中可看出,“ID”为5的记录已经被删除了,如图9.20所示。
slide60
在使用 SQL Delete 命令时,必须谨慎从事。当使用不带 Where 子句的 Delete 命令时,它将删除表中的所有行。一定要包含 SQL Where 子句来指定要删除的确切行。

4. 将对数据库文件的修改结果显示出来

  • 可以一起使用Connection对象和Recordset对象,利用Recordset对象的方法和属性就能解决这个问题了。

[例9-16]在一个文件中使用Connection对象更改数据库中的数据,使用Recordset对象返回数据库更改后的数据。

slide61
<%

Set cn =Server.CreateObject(″ADODB.Connection″)

cn.Open ″DSN=ql;″

cn.Execute ″Update S1 set 姓名 = ′张红′,年龄=29,工资=2500 where ID=4″

Set rs=Server.CreateObject(″ADODB.Recordset″)

strSQL = ″Select ID,姓名,年龄,工资 from S1 ″

rs.Open strSQL, cn

Set ID= rs(″ID″)

Set xm= rs(″姓名″)

Set nl= rs(″年龄″)

Set gz= rs(″工资″)%>

slide62
S1表<br> ID 姓名 年龄 工资<br>

<%do until rs.EOF

Response.Write ID & ″ ″ & xm & ″ ″ & nl &″ ″ &gz & ″<BR>″

rs.MoveNext

loop

%>

<%cn.Close

set cn=nothing

set rs=nothing

%>

  • 在浏览器中执行9.16.asp文件,从浏览器中可看出S1表数据更改的结果,如图9.21所示。
slide64
注意: 同时使用Recordset对象时,只有其打开方式中的连接数据库方法有点变化,只需写上cn即可,表示使用Connection 对象打开的连接通道,如例子中的语句:

rs.Open strSQL, cn

5. ConnectionTimeout设置连接超时

  • 活动的突然增长可能使数据库服务器变得十分笨拙,大量增加建立数据库连接的时间。结果是,过长的连接延时将降低数据库的性能。用 Connection 对象的ConnectionTimeout属性,可以限制放弃连接尝试并发出错误消息之前应用程序等待的时间。例如,下面的脚本设置 ConnectionTimeout 属性,在取消连接尝试之前等待20秒:
slide65
Set cn = Server.CreateObject(″ADODB.Connection″)

cn.ConnectionTimeout = 20

cn.Open ″DSN=ql;″

  • 默认的 ConnectionTimeout 属性是 30 秒。
  • 注意: 在将 ConnectionTimeout 属性合并到数据库应用程序之前,一定要确保连接提供程序和数据源支持该属性。

6. 共享同一个Connection对象通道

  • Connection对象最重要的特色之一就是可供多个Recordset对象共享同一个Connection对象的通道,看下例。
slide66
[例9-17]在一个文件中使用Connection对象建立连接通道,多次使用Recordset对象返回数据库中的信息,并将数据信息使用表格显示出来。[例9-17]在一个文件中使用Connection对象建立连接通道,多次使用Recordset对象返回数据库中的信息,并将数据信息使用表格显示出来。

<%

sub t(rs)

Response.Write (″<table border=1>″)

for i=0 to rs.fields.count1

Response.Write(″<td>″ +rs(i).name+″</td>″)

next

while not rs.EOF

Response.Write(″<tr>″)

slide67
for i=0 to rs.fields.count1

v=rs(i)

if isnull(v) then v=″″

Response.Write(″<td valign=top>″ +CStr(v)+″</td>″)

next

rs.MoveNext

wend

Response.Write (″</table>″)

end sub

%>

<%′====================================%>

slide68
<%Set cn = Server.CreateObject(″ADODB.Connection″)

cn.Open ″DSN=ql;″ %>

<%′====================================%>

<h3> S1表 姓名,年龄和工资<br></h3>

<%

Set rs1 = Server.CreateObject(″ADODB.Recordset″)

strSQL=″Select 姓名,年龄,工资 From S1 ″

rs1.Open strSQL,cn

t(rs1)

%>

<h3> S1表 姓名,地址和电话<br></h3>

slide69
<%

Set rs2=Server.CreateObject(″ADODB.Recordset″)

strSQL = ″Select 姓名,地址,电话 From S1 ″

rs2.Open strSQL, cn

t(rs2)

%>

<%cn.Close

set cn=nothing

set rs1=nothing

set rs2=nothing

%>

  • 在浏览器中执行9.17.asp文件,从浏览器中可看出查询S1表的结果,如图9.22所示。
slide71
这个例子中的程序命令可分为三部分:
  • 第一部分建立了过程t(rs),该过程可以传入以Recordset对象实例为参数、并以表格输出该Recordset对象内的所有字段的数据。
  • 第二部分建立了Connection对象的实例,并打开了连接到数据库ql的通道。
  • 第三部分建立Recordset对象实例 rs1和rs2,并进行查询,然后调用过程t(rs)用表格输出查询结果。
  • 注意: rs.fields.count表示Recordset对象查询的总字段数目,rs(i).name可输出Recordset对象查询的第i个字段的名称。利用这两个命令你不用知道数据库表中的结构,即可对数据库进行查询了。
  • 本例中还用到了isnull函数,用来判定变量v是否为NULL值,即是否为空。
slide72
9.5在客户端访问数据库

9.5.1 在客户端浏览器向数据库添加数据

[例9-18]先建立一个输入页面。

<%@ Language=″VBScript″ %>

<html>

<body>

<form Method=″post″ action=″9.19.asp″>

姓名<input type=″text″ size=6 name=″xm″>

年龄<input type=″text″ size=2 name=″nl″ value=″20″><br>

slide73
工资<input type=″text″″ size=6 name=″gz″ value=″2000″><br>

电话<input type=″text″ size=12 name=″dh″ value=″11111″><br>

地址<input type=″text″ size=22 name=″dz″ value=″北京″><br>

出生日期<input type=″text″ size=12 name=″rq″ value=″1960/03/23″><br>

<input type=″submit″ value=″提交″>

<input type=″reset″ value=″重置″>

</FORM>

</body>

</html>

  • 将9.18.asp文件修饰一下可建立一个输入页面,执行的结果如图9.23所示。
slide75
[例9-19]编写向数据库插入从输入页面接收到的数据文件,文件名为9-19.asp。[例9-19]编写向数据库插入从输入页面接收到的数据文件,文件名为9-19.asp。

<%

sz = ″ ′ ″ & Request.Form(″xm″) & ″ ′, ′ ″& Request.Form(″nl″) &

″ ′, ′ ″& Request.Form(″gz″) &″ ′, ′ ″& Request.Form(″dh″) &

″ ′, ′ ″& Request.Form(″dz″) & ″ ′, ′ ″& Request.Form(″rq″) & ″ ′ ″

Set obj = Server.CreateObject(″ADODB.Connection″)

obj.Open ″ql″

intodb = ″Insert Into S1 (姓名,年龄,工资,电话,地址,出生日期 ) Values(″ &sz & ″)″

slide76
obj.Execute(intodb)

obj.Close

%>

  • 当在图9.23中填写好数据,单击“提交”按钮后,会看到程序直接执行了9.19.asp文件,你可看到状态栏中出现“完成”。这时你再打开表S1,可看到页面上填写的数据已经填写到里面了,如图9.24所示,可以让用户在浏览网页的过程中填写记录了。
slide78
9.5.2 在客户端输入查询条件并显示查询结果
  • 为了更清楚、更直接地了解 SQL 语法在ASP中的应用,先将查询的所有核心过程写成一个名为q的过程,然后利用ASP的服务器端包容功能调用该过程。

[例9-20]以下是建立q过程的代码,将其保存为q.inc文件,并置于虚拟目录asp下:

<%

sub q(inputquery)

set cn=server.createobject(″adodb.connection″)

slide79
cn.open ″DSN=ql;″

set rstemp=cn.execute(inputquery)

howmanyfields=rstemp.fields.count 1

′统计数据库中的列数

%>

<table border=1><tr>

<%

for i=0 to howmanyfields

%>

<td><b>

<%=rstemp(i).name%></B></TD>

<% next %>

slide80
</tr>

<%

do while not rstemp.eof

%>

<tr>

<% for i = 0 to howmanyfields

thisvalue=rstemp(i)

if isnull(thisvalue) then

thisvalue=″″

′ 如果字段为空,则将变量 thisvalue 的值定义为一个空格

end if %>

<td valign=top><%=thisvalue%></td>

slide81
<% next %>

</tr>

<%rstemp.movenext

loop%>

</table>

<%

rstemp.close

set rstemp=nothing

cn.close

set cn=nothing

end sub%>

slide82
此例定义了过程q,在下面几个ASP程序中只要加入想要使用的SQL查询语句,并调用过程q就可以非常方便地得到查询结果。此例定义了过程q,在下面几个ASP程序中只要加入想要使用的SQL查询语句,并调用过程q就可以非常方便地得到查询结果。
  • 其中,rstemp.fields.count为要查询的字段的个数;rstemp(i).name为查询的字段名称;rstemp(i)为相应字段的值。

[例9-21]按地址进行查询,程序文件名为9-21.asp。

<HTML>

<body bgColor=pink>

<form method=″post″ action=″9.21.asp″>

<p>地址:<input name=″name″ ></p>

slide83
<p><input type=″submit″ value=″查询″ name=″B1″>

<input type=″reset″ value=″复原″

name=″B2″></p>

</form>

<font color=orangered><font size=4><strong>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按地址查询的结果 </strong>

<%

sql=″Select * From S1 Where 地址= ′″& Request(″name″) & ″′″

call q(sql)

slide84
%>

<!-- #include virtual=″/asp/q.inc″-- ></font></font>

</body>

</html>

  • 在图9.25所示的页面中输入你想查询的人的地址如“广州”,单击“查询”按钮后,即可看到查询的结果,如图9.25下方的表格中所示。
  • 该程序分为三部分,第一部分建立了输入的界面;第二部分写了SQL查询语句;第三部分写了包含q.inc文件的语句。该例子显示了数据库表S1中地址为“广州”的所有记录。
slide86
注意: 在写接收到的字符串时一定要这样写:′″& Request(″name″) & ″′,在Request(″name″)的外面包围了三种符号,最里面是“& &”,然后是双引号“″ ″”,最后是单引号“′ ′”。

[例9-22]按姓名进行模糊查询。

<head></head><html>

<body bgColor=pink>

<form method=″post″ action=″9.22.asp″>

<p>姓名:<input name=″name″ value=″abc″></p>

<p><input type=″submit″ value=″查询″ name=″B1″>

<input type=″reset″ value=″复原″

slide87
name=″B2″></p>

</form>

<font color=orangered><font size=4><strong>

按姓名查询的结果 </strong>

<%

sql=″Select 姓名,电话,地址 from S1 Where 姓名 like ′″&

Request(″name″) & ″%%′ ″

Call q(sql)

%>

<!-- #include virtual=″/asp/q.inc″-- ></font></font>

</body>

</html>

slide88
在图9.26所示的页面中输入你想查询的人的姓名或姓,如“张”。单击“查询”按钮后,即可看到所有姓张的人的记录,如图9.26下方表格中所示。在图9.26所示的页面中输入你想查询的人的姓名或姓,如“张”。单击“查询”按钮后,即可看到所有姓张的人的记录,如图9.26下方表格中所示。
  • 在这里使用了SQL Where选项中的like条件表达式,在like后面的字符表达式中可包含通配符“%”,“%”代表一个或一串任意字符。
slide90
[例9-23]按年龄和地址进行组合查询,本程序文件名为9-23.asp。[例9-23]按年龄和地址进行组合查询,本程序文件名为9-23.asp。

<html>

<head></head>

<body bgColor=pink>

<form method=″post″ action=″9.23.asp″>

<p>年龄:<!-- webbot bot=″Validation″ S-Data-Type=″Integer″

S-Number-Separators=″,″ -- >

<input name=″nl″ value=20 size=″20″></p>

slide91
<p>地址:

<input name=″dz″ value=″″></p>

<p><input type=″submit″ value=″查询″ name=″B1″>

<input type=″reset″ value=″复原″

name=″B2″></p>

</form>

<font color=orangered>

<font size=4><strong>

按年龄和地址查询的结果

slide92
</strong>

<%

sql=″Select * from S1 Where 年龄>= ″&Request(″nl″)&″ and 地址= ′″&Request(″dz″) & ″′″

call q(sql)

%>

<!-- #include virtual=″/asp/q.inc″-- >

</font>

</font>

</body>

</html>

slide93
在图9.27所示的页面中输入你想查询的人的年龄和地址,如“20”和“北京”,单击“查询”按钮后,可看到所有大于等于20岁并且地址为“北京”的人的记录,如图9.27所示。在图9.27所示的页面中输入你想查询的人的年龄和地址,如“20”和“北京”,单击“查询”按钮后,可看到所有大于等于20岁并且地址为“北京”的人的记录,如图9.27所示。
  • 在例子中使用了SQL Where选项中的条件表达式,

年龄>= ″& Request(″nl″) & ″ and 地址= ′ ″& Request(″dz″) & ″ ′

  • 编写一个页面,将可以进行的输入和查询列在一个页面上,如下例。
slide95
[例9-24]一个简单动态网站的主页程序,本程序文件名为9-24.asp。[例9-24]一个简单动态网站的主页程序,本程序文件名为9-24.asp。

<%@ Language=″VBScript″ %>

<html>

<head><title>输入和查询的总页面</title></head>

<body bgColor=#CCFFFF>

<p><img border=″0″ src=″人.gif″>&nbsp;<font color=navy size=5>

这是″好朋友″网站,欢迎你光临!</font></p>

<p>

如果你想成为″好朋友″中的一员,<a href=″9.18.asp″>

slide96
请到这里填写资料。</a><a><br>

你想按“姓名”查询好朋友,</a><a href=″9.22.asp″>

可单击这里</a><a><br>

你想按“地址”查询好朋友,</a><a href=″9.21.asp″>

可</a><a href=″9.22.asp″>单击</a>

<a href=″9.21.asp″>这里</a><a><br>

你想按“年龄和地址”查询好朋友,</a><a href=″9.23.asp″>

可</a><a href=″9.22.asp″>单击</a>

<a href=″9.23.asp″>这里<a><br></p></a>

</body>

</html>

9 6 command
9.6 用Command对象改善查询
  • ADO的Recordset对象用来记录由数据库所取得的数据库的对象,Connection对象则是提供客户端应用程序与数据库的联络管道,而Command对象所担任的是整个应用程序系统的“信息传递”角色,它对数据库提出数据查询信息,告诉数据库:“请为我搜索某个表中的数据,搜索某个字段中的数据,搜索的数据应该满足什么条件,把这些满足符合要求的数据分别存放在Recordset对象内然后返回到浏览器上!
slide99
通过Command对象,可以像用Connection对象和Recordset对象那样执行查询,惟一的不同在于用Command对象可以在数据库源上准备、编译查询条件,而且可以反复使用一组不同的值来发出查询。这种方式的编译查询的优点是,可以最大程度地减少向现有查询重复发出修改的请求所需的时间。另外,还可以在执行之前通过查询的可变部分的选项,使SQL查询保持局部未定义。下面还是通过例子来说明。通过Command对象,可以像用Connection对象和Recordset对象那样执行查询,惟一的不同在于用Command对象可以在数据库源上准备、编译查询条件,而且可以反复使用一组不同的值来发出查询。这种方式的编译查询的优点是,可以最大程度地减少向现有查询重复发出修改的请求所需的时间。另外,还可以在执行之前通过查询的可变部分的选项,使SQL查询保持局部未定义。下面还是通过例子来说明。

9.6.1 用Command对象向数据库插入数据

[例9-25]先建立一个为题库中输入数据的程序页面,只要根据表S2的结构将9.18.asp修改一下即可(本程序文件名为9-25.asp)。

slide100
<%@ Language=″VBScript″ %>

<html>

<body bgColor=darkseagreen><font color=darkred size=5

style=″BackGroundColor: #8fbc8f″>

为管理信息系统课程准备题库</font>

<form method=″post″ ACTION=″9.26.asp″>

年份<input size=4 name=″nf″ value=″2001″ >

题型<select size=″1″ name=″tx″>

<option selected value=″1″>1.填空题</option>

slide101
<option value=″2″>2.单选题</option>

<option value=″3″>3.判断题</option>

<option value=″4″>4.多选题</option>

<option value=″5″>5.简述题</option>

<option value=″6″>6.论述题</option>

<option value=″7″>7.设计题</option>

</select>题号<input size=4 name=″th″ value=″1″ ><br>

题目内容<textarea rows=″2″ name=″nr″ cols=″20″></textarea>

<p>&nbsp;标准答案<textarea rows=″2″ name=″dan″ cols=″20″></textarea>

slide102
</p>

<p>&nbsp;学生解答<textarea rows=″1″ name=″jd″ cols=″20″>目前无</textarea><br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<input type=″submit″ value=″提交″>&nbsp;&nbsp;&nbsp;

<input type=″reset″ value=″重置″>

</p>

</form>

</body>

</html>

slide103
9.25.asp文件建立的输入页面如图9.29所示。当你在图9.29中填写好数据,单击“提交”按钮后,你会看到直接执行了9.26.asp文件,接着在状态栏中会出现“完成”。这时你再打开表S2可看到页面上填写的题目已经填写到题库里面了。9.25.asp文件建立的输入页面如图9.29所示。当你在图9.29中填写好数据,单击“提交”按钮后,你会看到直接执行了9.26.asp文件,接着在状态栏中会出现“完成”。这时你再打开表S2可看到页面上填写的题目已经填写到题库里面了。
slide105
[例9-26]用Command对象向数据库插入从输入页面(图9.29)接收到的数据,本程序文件名为9-26.asp。[例9-26]用Command对象向数据库插入从输入页面(图9.29)接收到的数据,本程序文件名为9-26.asp。

<%

Set cm= Server.CreateObject(″ADODB.Command″)

Set cn = Server.CreateObject(″ADODB.Connection″)

cn.Open ″ql;″

Set cm.ActiveConnection =cn

cm.CommandText = ″Insert Into S2( 年份,题型,序号,题目,标准答案,学生解答) Values (?,?,?,?,?,?)″

slide106
cm.CommandType =1

cm.Parameters.Append cm.CreateParameter(″年份″,200,,25)

cm.Parameters.Append cm.CreateParameter(″题型″,200,,25)

cm.Parameters.Append cm.CreateParameter(″序号″,200,,25)

cm.Parameters.Append cm.CreateParameter(″题目″,200,,25)

cm.Parameters.Append cm.CreateParameter(″标准答案″,200,,255)

cm.Parameters.Append cm.CreateParameter(″学生解答″,200,,255)

cm(″年份″)=Request(″nf″)

cm(″题型″)=Request(″tx″)

cm(″序号″)=Request(″th″)

cm(″题目″)=Request(″nr″)

slide107
cm(″标准答案″)=Request(″dan″)

cm(″学生解答″)=Request(″jd″)

cm.Execute

%>

  • 这个例子的功能就是将接收到的数据插入到数据库文件中,这个问题在9.19.asp中已经解决了,这里只是用来说明使用Command对象,以及使用Command对象插入数据的优越性。从这个例子可总结出使用Command对象的方法如下。
  • 语法格式:
slide108
<%

Set cm= Server.CreateObject(″ADODB.Command″)

Set cm.ActiveConnection =cn

cm.CommandText =数据查询信息

cm.CommandType =数字

cm.Parameters.Append cm.CreateParameter(name,type,direction,size,value)

cm(″name″) =值

cm.Execute

%>

slide109
功能: 使用Command对象可对已经建立连接的数据库中的数据进行灵活的查询并可返回数据。
  • 说明:
  • 第1行和最后一行为asp语句开始和结束的标志。
  • 第2行是声明cm为Command对象的实例,这个语句不能少。
  • 第3行是采用Command对象的ActiveConnection属性来设定Command对象与Connection通道的连接关系,当然,你要先用Connection对象建立与数据库的连接通道,如例9-26中的语句:

“cn.Open ″q1;″”就是采用Connection对象的Open方法打开数据源“ql”。

  • 也可直接使用下面的语句直接建立与数据库的链接:
slide110
<%Set cm.ActiveConnection = ″DNS=数据源名称;UID=登录名称;PWD=密码;″ %>
  • 第4行cm.CommandText=″数据查询信息″,其中的“数据查询信息”由SQL语句、数据库表文件名称或子程序组成,如例9-26中的语句:“″INSERT INTO S2(年份,题型,序号,题目,标准答案,学生解答)VALUES(?,?,?,?,?,?)″”为SQL语句。
  • 第5行“cm.CommandType =数字”指定第4行中“数据据查询信息”的类型,数字为1表示为SQL语句,可省略;数字为2表示为数据库表文件名称;数字为4表示子程序名称;数字为8表示未知的请求信息类型。指定“数据查询信息”的类型可加快查询的速度。
slide111
第6行cm.Parameters.Append cm.CreateParameter(name,type,direction,size,value)增加一个Parameter对象到Parameter集合上。Parameter集合包含所有的Parameter对象,使用Parameter集合来存取Parameter对象,类似于使用Field集合来存取Recordset对象。其中的参数说明如下:
  • name 可选参数,是一个说明Parameter名称的字符串,可以作为该Parameter对象名称。
  • Type 参数类型,可选参数。参数值为200表示字符串值;132表示用户定义的变量;20表示8字节长的整数;14表示固定精度的数值;129表示ASCII字符串;6表示货币单位,8字节长;7表示日期类型值;133表示编码为“yyyymmdd”的日期类型;134表示编码为“hhmmss”的时间类型;135表示编码为“yyyymmdd hhmmss”的日期时间类型。
slide112
direction 可选参数,控制Parameter对象的读写模式。参数值为1允许数据输入至该参数当中,表示可传送数据到数据库服务器上;2允许数据输出至该参数当中,表示用来得到Command对象执行操作后数据库服务器的输出值;3允许数据输入、输出至该参数当中,表示用来传送数据给数据库服务器及从数据库服务器上接收信息;4允许从一子程序中返回数据至该参数当中。
  • Size 可选参数,说明允许参数值的字节组值大小。
  • value 可选参数,参数值。用来设置和返回这个参数的值。
slide113
第7行“cm(″name″) =值”用来传递数据值给Parameter对象,一般使用“?”号代表未知的参数位置,其对应的默认参数字符串索引则为“Param1”、“Param2”。例如,“数据查询信息”为“select*from通讯录where地区=? And 公司名称=?”,可以使用“cm(″Param1″)=″北京″,cm(″Param2″)=″联想集团″”,来代替“数据查询信息”中“?”的值。
  • 第8行“cm.Execute”用来执行在cm.CommandText中定义的操作。
  • 注意: 用 Command 对象编译查询也可避免 SQL 查询引起的合并字符串和表格变量问题。特别是,通过使用Command对象的Parameter集合可以避免与定义字符串、日期、时间变量的类型有关的问题。在9.19.asp中定义SQL查询有些麻烦,现在就变得轻松多了。
slide114
9.6.2 用Command对象输出数据库中的数据

[例9-27]建立一个用表格输出查询结果的过程t。这个过程在前面的例子中使用过,有稍许改变,现在把它单独存为一个ASP文件,使其他文件可方便地使用它。使用它时只要包含其文件,在其他程序使用这个表格来输出字段名和其值时,可直接用call t(对象实例名rs)命令,只要在过程名t内写入RecordSet对象的实例名即可(见例9-28.asp)。

<%

sub t(rs)

Response.Write (″<table border=1>″)

for i=0 to rs.fields.count1

slide115
Response.Write(″<td>″ +rs(i).name+″</td>″)

next

while not rs.EOF

Response.Write(″<tr>″)

for i=0 to rs.fields.count1

v=rs(i)

if isnull(v) then v=″″

Response.Write(″<td valign=top>″ +CStr(v)+″</td>″)

next

slide116
rs.MoveNext

wend

Response.Write (″</table>″)

end sub

%>

[例9-28]建立一个输入查询条件,如按“地址”查询数据库表S1中的数据,并用表格输出查询结果的页面,如图9.30所示。

slide118
<html><head></head><body bgColor=pink>

<form method=″post″ action=″9.28.asp″ id=form1 name=form1 value=″″ >

<p>地址:<input name=″dz″ ></p>

<p><input type=″submit″ value=″查询″ name=″B1″>

<input type=″reset″ value=″复原″

name=″B2″></p>

</form>

<font color=orangered><font size=4><strong>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按地址查询的结果 </strong>

<%

slide119
if request(″dz″)<>″″ then

set cn = Server.CreateObject(″ADODB.Connection″)

cn.Open ″DSN=ql;″

set cm= Server.CreateObject(″ADODB.Command″)

set cm.ActiveConnection =cn

cm.CommandText=″select * from S1 where 地址= ? ″

cm.Parameters.Append cm.CreateParameter(″地址″,200,,255)

cm(″地址″) =Request(″dz″)

set rs=cm.Execute

slide120
call t(rs)

end if

%>

<!-- #include file=″9.27.asp″-- >

</body>

</html>

slide121
习 题

1. 设有订单表DD(订单号,货号,品名,订货单位,售价,订购量,送货地点)。使用SQL语句查询下列问题:

(1) 光明公司所定货物的名称和送货地点。

(2) 售价最高的货物。

(3) 订购量超过2000件的单位。

2. 在Access建立一个数据库文件kcgl,包括订单表DD(订单号、货号、品名、订货单位、售价、订购量、送货地点),库存表KC(货号、品名、库存量、仓库地点、单价)。

slide122
习 题

3. 编写一个ASP程序,可以从表单中输入订货信息,然后将接收的信息存放在订单表DD中。

4. 编写一个ASP程序,输入订单号,查询并显示货物的名称、订购量和送货地点。

5. 编写一个ASP程序,当数据库的表S1(ID、留言内容、留言时间)的记录数大于1000时,显示提示信息进行删除的操作。

6. 编写一个ASP程序,当数据库的表S1 (ID、留言内容、留言时间)的记录数大于1000时,显示提示信息要进行删除的操作,并建立一个“删除”按钮,单击该按钮可删除留言时间靠前的100条记录。