打印本文 打印本文  关闭窗口 关闭窗口
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] 



打印本文 打印本文  关闭窗口 关闭窗口