您现在的位置: 军旅同心-旅游自驾-军旅文学 >> 读书赏析 >> 学习园地 >> 电脑网络 >> 技术文章 >> 正文
ASP 3.0高级编程(三十九)
作者:采集员 文章来源:来源于网络 点击数: 更新时间:2005-9-10 12:33:58
>
       ' Find the record
       rsAuthors.Find "au_lname = 'Sussman'"

       ' Was it found
       If Not rsAuthors.EOF Then
              Response.Write "Found: " & rsAuthors ("au_lname") & ", " & _
                                   rsAuthors("au_fname") & "<BR>"
       Else
              Response.Write "Not found. Moving <BR>"
              rsAuthors.Bookmark = varBkmk
       End If
       使用Filter属性强于Find方法的一个原因是Find语句只能一个查询条件,而Filter属性允许指定多个条件。也就是说,当想要查找的字段条件不止一个时,不能使用Find方法。然而,可以先过滤记录,如果找到记录可以再删除过滤条件。

8.4.6 修改记录
       大部分的Web只用来显示信息,而Web应用程序正变得越来越普遍。在这种情形下,如果只拥有只读数据确实没有什么用处。创建一个应用程序,几乎总是需要修改现存的数据或是添加新的数据,其方法有许多。在本节,将学习如何使用Recordset对象的方法来更改数据。在下一章,将会看到如何使用查询完成相同的任务。
       可以设置除了adLockReadOnly之处的锁定类型配合使用Recordset对象的方法去修改数据(假定有相应的权限)。记住,缺省的锁定类型是只读的。
1.  添加记录
要在记录集中添加记录,使用AddNew方法。有两种使用AddNew的方法。第一种没有任何参数,仅仅调用AddNew,在记录集的最后添加一个空记录。在调用Update方法保存所做的更改之前,可以随意地修改字段中的数据:
With rsAuthors
       .Open "authors", strConn, adOpenDynamic, _
              adLockOptimistic, adCmdTableDirect

.AddNew
              .Fields("au_id") = "123-12-1234"
              .Fields("au_lname") = "Lloyd"
       .Fields("au_fname") = "Janine"
       .Fields("contract") = 0
.Update

End With
这只是添加了一条新记录,设置四个强制型的字段值。
另一种方法是使用AddNew方法的可选参数,这是两个数组,一个是字段名,另一个是字段的值。
With rsAuthors
       .Open "authors", strConn, adOpenDynamic, _
       adLockOptimistic, adCmdTableDirect

       .AddNew Array("au_id", "au_lname", "au_fname", "contract"), _
                     Array("123-12-1234", "Lloyd", "Janine", 0)
End With
这个方法不需要调用Update方法。
2.  编辑记录
编辑记录与添加记录的方法相似,不同之处在于不需要调用AddNew方法:
strSQL = "SELECT * FROM authors" & _
              "WHERE au_lname='Lloyd'"

With rsAuthors
       .Open strSQL, strConn, adOpenDynamic, _
              adLockOptimistic, adCmdText

       .Fields("contract") =1
       .Update
End With
这仅仅是将当前记录(在这种情况下是第一条记录,因为刚刚打开记录集)的contract字段的值赋为1。
3.  删除记录
删除记录需调用Delete方法。删除哪一条记录取决于可选的参数,可以是下面AffectEnum常数中的一个:
? adAffectCurrent:删除当前记录,缺省操作。
? adAffectGroup:删除匹配当前过滤条件的所有记录。
? adAffectAll:删除记录集中的全部记录。
? adAffectAllChapters:删除所有段(chapter)中的记录。
最简单的调用形式是:
rsAuthors.Delete
这将删除当前记录。如果有一个过滤条件,并想删除所有匹配该条件的记录,那么仅需加上适当的常数:
rsAuthors.Delete adAffectGroup
4.  自动递增的字段
当添加一条新记录时,一般会碰到这样一个问题:如何处理那些自动递增的或标识字段(Identity Filed)。这些字段是由服务器自动更新的数字字段,一般用于为每一行提供一个唯一的字段值。当数据库含有多个表时,那么这个唯一的字段经常被当作关联表的外键。所以,添加一条新记录时,经常需要找出它们的值。
例如,考虑一下有两个字段的表,一个自动递增的ID字段(SQL Server中的IDENTITY字段或Access中的AutoNumber字段),一个字段名为Name的文本字段。现在考虑一下下面的向表中添加记录的代码:
With rsData
       .Open "tblTest", adOpenDynamic, adLockOptimistic, adCmdTableDirect
       .AddNew
       .Fields("Name") = "Janine"
       .Update

       intID = .Fields("ID")
End With
看上去很平常,但添加记录后是否能够取到这个值依赖于光标的类型、锁定的类型以及ID字段是否被索引。表8-4列出了哪些组合允许获取新插入的ID字段的值。其他没有列在表中的组合不能返回ID字段的值。
表8-4  获取ID字段的值与光标、锁定的类型及ID字段是否被索引的关系
提供者
对象
索引
光标位置
光标类型
锁定类型

ODBC
Access97
是
服务器
键集
悲观型
乐观型


Access2000
是
服务器
键集
悲观型
乐观型



否
客户
所有
悲观型
乐观型


SQL Server 6.5
是
服务器
键集
悲观型
乐观型


SQL Server 7.0
是
服务器
键集
悲观型
乐观型




客户
所有
悲观型
乐观型



否
客户
所有
悲观型
乐观型

Jet 4.0
Access97
是
服务器
所有
所有


Access 2000
是
服务器
所有
所有



否
客户
所有
悲观型
乐观型

SQL OLE DB
SQL Server 6.5
SQL Server 7.0
是
服务器
键集
悲观型
乐观型




客户
所有
悲观型
乐观型



否
客户
所有
悲观型
乐观型

这清楚地说明必须使用正确的组合,才能保证能取得ID字段的正确值。否则,可能会得到0、空值或NULL,这取决于组合的方式。
在下一章中处理存储过程时,将见到另一种从SQL Server获取IDENTITY字段值的方法。

8.5 管理错误
       处理数据存储时,发生错误的可能性总是存在的:安全性问题,试图更新已被其他用户删除的记录,诸如此类的问题很多。不能保证一切都运行良好,因此必须构建某种形式的错误控制。
       在第7章中,研究了ASP页面中一般的错误处理,但现在涉及的是数据存储,所以必须考虑使用额外的代码进行错误处理。先看一下Errors集合,再讨论其如何满足ASP 3.0的错误处理机制。

上一页  [1] [2] 


更多
免责声明:作品版权归所属媒体与作者所有!!本站刊载此文不代表同意其说法或描述,仅为提供更多信息。如果您认为我们侵犯了您的版权,请告知!本站立即删除。有异议请联系我们。
文章录入:烟灰缸    责任编辑:烟灰缸 
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 网站地图 | 版权申明 | 网站公告 | 管理登录 |