Dblookup()和DbColumn()的用法及区别

- - 一、用法:

1。@DbColumn (Notes/Domino 数据库)

从活动数据库或其他 Notes/Domino 数据库的视图或文件夹中查找并返回一个完整的值列。
语法
@DbColumn( class : "NoCache" ; server : database ; view ; columnNumber )
参数
class
文本。指出用户正在存取的数据库的类型。可以用 "" 或 “Notes” 指示一个 Notes/Domino 数据库。
"NoCache"
关键字。可选。若不使用 "NoCache",查找结果将被缓存,即保存结果以备再次使用。每次对同一场所(在同一 Notes/Domino 会话期且执行此查找操作的数据库保持打开)的并发查找都会使用此信息。如果省略了 "NoCache",也不必用其他任何选项替代,查找结果会自动缓存。请参阅如下“指定 NoCache”。
如果要求 Notes/Domino 在每次查找时均能恢复上一次查找信息,可在紧跟 class 参数的冒号后边指定此选项,如 "Notes":"NoCache" 所示。
server : database
文本列表。服务器位置和数据库文件名。请参阅“指定服务器和数据库”。
view
文本。在其中执行查找的视图名。此视图名必须与“视图”属性中指定的视图全名完全匹配(可以忽略别名)。 如果包含该视图名的视图还层叠有菜单中的另一个名称,请参阅“指定视图名”。
columnNumber
数字。视图中的列号。由于 Notes/Domino 是基于列号查找视图里的信息,因此只能获得出现视图中的数据。请参阅“指定列号”。
返回值
valuesFound
文本、数字、日期-时间或文本列表。这些值位于用户指定的视图列中。请参阅此章后面的“访问找到的结果”。
指定“NoCache”
采用 NoCache 是出于性能方面的考虑。强制 Notes/Domino 与数据库连接以及反复检索相同的信息将花费大量时间,导致整体性能下降。但若期望较频繁地更改数据,那么为确保信息更新而花费较多时间也是值得的。
例如,若正对一个存储客户地址信息的数据库进行查找,如果不期望这些地址频繁更改,使用缓存技术通常较为安全。但如果是查找一个股票价格数据库,而此数据库每小时更新一次,那么跳过缓存而每次执行新的查找则更加可靠。
指定服务器和数据库
有几种方法指定 server : database 参数:
要在当前数据库(执行公式计算的同一个数据库)内执行查找操作,可指定 "" 作为函数的全部参数。在某一服务器上运行的代理只能对位于同一服务器中的数据库执行查找操作,也就是说,"" 代表用户正在运行的本地 Notes/Domino 目录,并且倘若用户碰巧有一个运行于服务器上的代理,那么该代理不能离开服务器执行查找操作。
要在本地数据库上执行查找操作,使用 "" 作为服务器名并明确指定数据库名,例如 "":"DATABASE.NSF"所示。
要在驻留于服务器上的 Notes/Domino 数据库中执行查找操作(从工作站执行),可将服务器的路径和文件名作为一个文本列表包括进来,例如 "SERVER":"DATABASE.NSF" 所示。
如果数据库有多个拷贝且位于不同的 Domino 服务器上,那么使用数据库复本标识符同时替代服务器和数据库名,可以实现对数据库复制拷贝的访问,而不必指定服务器名或数据库名。例如,如果使用 “85255CEB:0032AC04”(数据库复本标识符,位于数据库属性框中)作为数据库名,那么 Notes/Domino 即可使用复本获取所需信息。
Notes/Domino 按以下顺序搜索复本,使用遇到的第一个复本:
工作台
如果您的工作台上有一个复本,Notes/Domino 将使用它。
如果您的工作台上有多个堆叠在一起的复本,Notes 使用最上面的复本。
如果您的工作台上有多个没有堆叠在一起的复本,Notes/Domino 将查找一个与当前服务器匹配的图标并使用它。如果没有与当前服务器匹配的图标,那么Notes/Domino 使用最先加入工作台的那个图标。
当前服务器
本地(硬盘)
一旦找到了一个复本,它将被加入到工作台中,以节省以后的查找时间。
Notes
为避免复本标识符的键入错误,选择“文件”“数据库”“设计摘要”,再选择“复制”。然后从摘要里拷贝复本标识符,粘贴到公式中。
如果数据库位于 DOS 或 OS/2 子目录下,例如 MAIL\MINE.NSf,那么在目录和数据库名之间加一个双斜杠,如“MAIL\\MINE.NSF”所示,这是因为公式把单斜杠当作转义字符。
指定视图或文件夹
可以使用视图全名或其同义词作为视图(或文件夹)参数。例如,如果 Last Name 视图是“查看”菜单内 By Author 的下级视图,并且具有同义词 |LName,那么在视图属性框中显示的名称大约如下:
By Author\Last Name|LName
若由 @DbColumn 引用此视图,那么只需使用同义词 LName(用引号括起来):
"LName"
如果视图名没有同义词,那么使用 By Author 加上 Last Name 作为视图名,并用引号括起来(但无同义词)。由于视图名是在公式里使用,因此必须在“\”的前面再加上一个“\”才能保证 Notes/Domino 的正确解释:
"By Author\\Last Name"
指定列号
要指定 columnNumber 参数,首先应从左到右计数视图中的列,最左列的列号取为 1。事实上,Notes/Domino 索引视图的方式决定了并不对每一列都编号查找。
根据查找目的,使用这些方法计算列号:
1. 从左向右计数视图里的列。在设计模式下查看视图,确保显示了所有的列,包括用于排序或分类视图的列。
2. 不计入所有显示常值的列,如“Submitted by:”或 32。如果列中包含的公式偶尔为每个文档返回相同的值,但此值并不是“常数”,那么计数时应包含此列。
3. 不计数由如下 @function 单独组成的所有列:@DocChildren、@DocDescendants、@DocLevel、@DocNumber、 @DocParentNumber、@DocSiblings、@IsCategory、@IsExpandable。
4. 现在从左至右重新计数列。
修正后的列号就是在查找公式里指定的值。
如果指定了一个不存在的列,那么会得到一个非错误的空值。
访问返回值
如果 @DbColumn 返回多个值,则以列表格式表示,每个值之间用当前域属性框中指定的多值分隔符分隔。
@DbColumn 可以返回不多于 64KB 的数据。用下面公式可以计算 @DbColumn 能够返回多少数据。
对返回文本的查找操作:
2 + (2 * 返回的条目数) + 全部条目的总文本大小
对返回数字或日期的查找操作:
(10 * 返回的条目数) + 6
用法
@DbColumn 主要与关键字公式配合使用。使用 @DbColumn,可以省掉编码关键字列表,然后定期重编辑包含此关键字域的表单以更新该列表的麻烦。@DbColumn 允许从数据库或表格中动态检索列表值。
此函数不能用于列公式或选择公式中,也不能用于邮件代理中。
服务器代理及安全性
将包含 @DbColumn 的数据库看作源数据库,而被存取的数据库看作目标数据库。
当 @DbColumn 用在一个运行于服务器的代理中时,它只能存取和源数据库处在同一个服务器上的目标数据库。源数据库必须对目标数据库至少有“读者”存取级别。
如果由于安全性原因,不能将“读者”或更高存取级别赋给“-Default-”群组,则仍然可以赋予 @DbColumn 代理从源数据库对目标数据库进行访问的权限。
1. 使用“文件”“数据库”“属性”,确定源数据库的复本标识符,例如:85255CEB:0032AC04。
2. 使用“文件”“数据库”“存取控制”,为目标数据库的存取控制列表添加一个新条目,条目名即为复本标识符本身,赋予此名称至少“读者”的存取级别。在上面的例子中,用户添加了一个命名为 85255CEB:0032AC04 的条目。这样做特别为源数据库中的代理赋予了访问目标数据库的权限,即使“-Default-”是“不能存取者”。
其他代理及安全性
当在任何其他类型的公式或代理中使用 @DbColumn 时,该公式也可访问存放在用户自己工作站上的任意目标数据库而不受限制。如果目标数据库存放在其他 Domino 服务器上,那么 @DbColumn 的存取由用户自己的存取级别(基于用户的 Notes/Domino 标识符)决定。
@DbColumn 受视图读权限表的限制。

样例: @DbColumn(Notes/Domino 数据库)

此关键字公式使用 @DbColumn。只要文档是由这个表单组成,Notes/Domino 即检索存放在 Inventory 数据库(INVENTRY.NSF)Inventory On Hand 视图第二列中的产品名列表。这一查找操作适用于购货通知单应用程序,用来检索 Inventory 数据库中可用的当前产品列表。
@DbColumn("";"":"INVENTRY.NSF";"Inventory On Hand";2)

工作中用到的例子:

@DbColumn("" : "" ; server : database ; "ProjectByStringId";1 )

说明:在@DbColumn()公式中主要用到后面的三个参数:及服务器和数据库;指定视图;指定列号。

上面的公式表示:从指定的服务器:数据库中的指定视图“ProjectByStringId”中取出第一列的全部值。

2。@DbLookup(Notes/Domino 数据库)

给定一个关键字值,在指定的视图(或文件夹)中,找出视图的第一个排序列中包含此关键字值的所有文档。对每个选中的文档,@DbLookup 或者返回视图里指定列的内容,或者返回一个指定域的内容。
语法
@DbLookup( class : "NoCache" ; server : database ; view ; key ; fieldName ) 或
@DbLookup(class : "NoCache" ; server : database ; view ; key ; columnNumber )
参数
class
文本。指明正被访问的数据库类型。可用 "" 或“Notes”表示 Notes/Domino 数据库。
"NoCache"
关键字。可选。如果希望确保 Notes/Domino 在每次查询时检索到的都是最新信息,即可指定此选项,如 "Notes":"NoCache" 所示。若希望缓存查询结果,则应省略 NoCache 选项,将结果保存在内存中以备重用。只要执行该查找操作的数据库保持打开,在同一 Notes/Domino 会话期间,对相同场所的每次并发查找操作都会重用这些信息。
如果省略了 "NoCache",也不必用其他任何选项替代,查找结果会自动缓存。
server : database
文本列表。服务器的位置和数据库的文件名。请参阅“指定服务器和数据库”。
view
文本。在其中进行搜索的视图或文件夹名。视图名必须和视图属性框中定义的全名精确匹配(可以忽略任意同义词)。如果视图是菜单中另一名称的下级视图,那么将视图上一层的名字也包含进来。请参阅下面的“指定视图名字”。
key
文本。用来确定检索一个值时实际阅读的文档。一个文档的关键字是在视图第一个排序列中显示的值。请参阅“指定一个关键字”。
fieldName
文本。一旦找到正确文档后,需要从中检索数据的域名。请参阅下面的“指定一个域名”。
columnNumber
数字。使用一个列号时,Notes/Domino 先找出视图里所有和指定的关键字匹配的文档,并返回这些文档中的每一个在指定列中所显示的任何值,而不考虑显示这些数据用到的公式。请参阅“指定列号”。
返回值
valuesFound
文本、数字、日期-时间或文本列表。这些值在用户指定的 fieldName 或 column 中找到。请参阅此章后面的“获得返回值”。
指定 "NoCache"
采用 "NoCache" 是出于性能方面的考虑。强制 Notes/Domino 与数据库连接以及反复检索相同的信息将花费大量时间,导致整体性能下降。但若期望较频繁地更改数据,那么为确保信息更新而花费较多时间也是值得的。
例如,若正对一个存储客户地址信息的数据库进行查找,如果不期望这些地址频繁更改,使用缓存技术通常较为安全。但如果是查找一个股票价格数据库,而此数据库每小时更新一次,那么跳过缓存而每次执行新的查找则更加可靠。
指定服务器和数据库
由以下几种方法指定 server : database 参数:
在当前数据库(进行公式计算的同一个数据库)中执行查找操作,可指定 "" 作为公式的全部参数。运行于服务器上的代理只能在同一服务器的数据库中执行查找操作,也就是说,"" 表示正在操作的本地 Notes/Domino 目录,并且若恰好有一个在服务器上工作的代理,那么该代理不能离开此服务器执行查找操作。
在本地数据库上执行查找操作,使用 "" 作为服务器名并显式指定数据库名,例如 "":"DATABASE.NSF"。
在驻留于服务器上的 Notes 数据库中执行查找操作(从工作站开始),应将服务器再加上路径和文件名组成的文本列表包括进来,如 "SERVER":"DATABASE.NSF" 所示。
如果在不同的 Domino 服务器上存在同一个数据库的多个拷贝,那么使用数据库复本标识符同时替换服务器和数据库名,就可访问该数据库的复本,而不必指定服务器名或数据库名。例如,如果使用“85255CEB:0032AC04”(一个数据库的复本标识符,可以在数据库属性框中找到)作为数据库名,那么, Notes/Domino 即可在此数据库复本上检索信息。
Notes/Domino 按下面顺序搜索复本,而使用找到的第一个复本:
工作台
如果工作台上有一个复本,Notes/Domino 将使用此复本。
如果工作台上有多个堆叠在一起的复本,Notes/Domino 使用最上面的那个复本。
如果工作台上有多个非堆叠复本,Notes/Domino 查找一个与当前服务器匹配的图标并使用它。若没有与当前服务器匹配的图标,Notes/Domino 就使用最先加入到工作台的那个图标。
当前服务器
本地(硬盘)
一旦找到了一个复本,它将被加入到工作台中,以节省以后的查找时间。
Notes
为避免复本标识符的键入错误,选择“文件”“数据库”“设计摘要”,再选择“复制”。然后从摘要里拷贝复本标识符,粘贴到公式中。
如果数据库位于 DOS 或 OS/2 子目录下,例如 MAIL\MINE.NSf,那么在目录和数据库名之间加一个双斜杠,如“MAIL\\MINE.NSF”所示,这是因为公式把单斜杠当作转义字符。
指定视图
可以使用视图(或文件夹)的全名或同义词指定视图参数。例如,如果 Last Name 视图是“查看”菜单 By Author 的下层视图,并且有一个同义词 LName,那么视图属性框里的显示如下:
By Author\Last Name|LName
当在 @DbLookup 里引用此视图时,可以只用同义词 LName(用引号括起来):
"LName"
如果视图名没有同义词,使用 By Author 再加上 Last Name 作为层次名(用引号括起来,且无同义词)。由于是在公式里使用视图名,因此必须在“\”的前面再加上一个“\”,才能保证 Notes/Domino 的正确解释:
"By Author\\Last Name"
指定关键字
只能测试与关键字(等价词)匹配的值;没有任何指定操作(如 < (less璽han) >)的方法。
通常用户使用域名而不是指定一个匹配的特定关键字,因此 Notes/Domino 基于特定文档中域的内容查找某个值。例如,若将域 LastName 指定作关键字(由于未被引号括起来,因此 Notes/Domino 能识别域),那么不管何时执行公式 @DbLookup,LastName 域的当前值均被用作查找依据。当不能预期其他域中将会输入什么值时,该方法允许在域中使用此查找公式。
排序列中的值必须与查找关键字准确匹配(不区分大小写,但空格和标点符号必须匹配)。
视图必须包含一个排序列才能进行查找,否则将返回一个空值。对一个已排序但未分类的多值域,返回的结果不一定准确。
指定域名
若使用 fieldName 执行查找操作,返回值是实际存储在此域中的值;这可能与视图显示有所不同。Notes 可检索显示在指定视图中任何文档里的任何域的数据,但若此域不作为视图列显示,Notes 必须搜索整个文档才能找到此域,这可能延长查找时间。不能使用 @DbLookup 检索 RTF 文本域中的数据。
对使用不同表单创建的某些文档,即使能与关键字匹配,也可能不包含指定的域。
指定列号
基于视图列的查找比基于不包含在视图里的域的查找更为有效。要获得最佳查找性能,应在视图里包含所需域。
例如,如果视图是按产品标识符分类,并且指定“01776”作为查找关键字,列号为 2,那么 Notes/Domino 将对产品标识符为 01776 的分类下的所有文档,返回第 2 列中显示的所有信息。
要指定 columnNumber 参数,首先应从左到右计数视图中的列,最左列的列号取为 1。事实上,Notes/Domino 索引视图的方式决定了,并不对每一列都编号查找。
根据查找目的,使用这些方法计算列号:
1. 从左向右计数视图里的列。
确保未遗漏任何列,例如,视图中的排序列或分类并没显示出来。在设计模式下查看视图,确保显示了所有的列。
2. 不计入所有显示常值的列,如“Submitted by:”或 32。如果列中包含的公式恰好为每个文档返回相同的值,但此值并不是“常数”,因此计数时应包含此列。
3. 不计数由如下 @function 单独组成的所有列:@DocChildren、@DocDescendants、@DocLevel、@DocNumber、 @DocParentNumber、@DocSiblings、@IsCategory、@IsExpandable。
4. 现在从左至右重新计数列。
修正后的列号就是在查找公式里指定的值。
注释 如果在 @DbLookup 公式中选择列号,而不用域名,那么只能检索实际显示在视图里的数据。
访问找到的结果
如果 @DbLookup 返回多个值,则以列表格式表示,值与值之间用当前域属性框中指定的多值分隔符分隔。
@DbLookup 可以返回不多于 64KB 的数据。用下面公式可以计算 @DbLookup 能够返回多少数据。
对返回文本的查找操作:
2 + (2 * 返回的条目数) + 全部条目的总文本大小
对返回数字或日期的查找操作:
(10 * 返回的条目数) + 6
用法
此函数不能用于列公式或选择公式中,也不能用于邮件代理中。
服务器代理及安全性
将包含 @DbLookup 的数据库看作源数据库,而被存取的数据库看作目标数据库。
当 @DbLookup 用在一个运行于服务器的代理中时,它只能存取和源数据库处在同一个服务器上的目标数据库。源数据库必须对目标数据库至少有“读者”存取级别。
如果从安全性角度考虑,不能将“读者”以上的存取级别赋给“-Default-”群组,仍然可以赋予源数据库的 @DbLookup 代理存取目标数据库的权限。
1. 使用“文件”“数据库”“属性”,确定源数据库的复本标识符,例如:85255CEB:0032AC04。
2. 在目标数据库中使用“文件”“数据库”“存取控制”,添加一个新条目,条目名即为复本标识符本身,赋予此名称至少“读者”的存取级别。在上面的例子中,用户添加了一个命名为 85255CEB:0032AC04 的条目。这样做特别为源数据库中的代理赋予了访问目标数据库的权限,即使“-Default-”是“不能存取者”。
其他代理及安全性
当在任何其他类型的公式或代理中使用 @DbLookup 时,该公式也可访问存放在用户自己工作站上的任意目标数据库而不受限制。如果目标数据库存放在其他 Domino 服务器上,那么 @DbLookup 的存取权限由用户自己的存取级别(基于用户的 Notes/Domino 标识符)决定。
@DbLookup 不受视图读权限表的限制。只要它在目标数据库中有“读者”的权限,就可以检索所有共享视图中的数据。

样例: @DbLookup(Notes/Domino 数据库)

1. 公司在公用通讯录的“个人”文档中维护雇员的办公场所和部门信息。
也许有一个 Purchasing 应用程序,用于雇员填写办公设备的 Purchase Requests。此时可使用 Notes 应用程序查找这些信息,并将它们自动插入到文档中。
Mary Tsen 编写了一个 Purchase Order。其中, P.O. Number、Date 和 Requested By 域由 Notes 自动填写,而由 Mary 填写 Purchase Order 的其他细节,例如数量、部件数目等等。
Mary 保存 Purchase Order 时,文档下半部分的提交信息由一系列的 @DbLookup 公式进行计算,以检索公用通讯录中该用户的信息。
使用计算域并为每个被检索域(场所和电话)编写查找公式,实现这些功能。例如,Location 域的公式可以是:
@DbLookup("";"Purchasing":"Names.NSF";"People"; @Right(RequestedBy; "");"Location")
此公式指示 Notes 打开位于 Purchasing 服务器上的 Name & Address Book (NAMES.NSF) 数据库,定位到 People 视图,然后确定其姓氏与 purchase order 的 RequestedBy 域中姓氏匹配的人的位置。一旦正确定位了此文档,Notes 就把 Person 文档 Location 域中的信息拷贝到 purchase order 的 Location 域中。
一个类似的公式接着将 Mary 的电话号码从 Person 记录的 OfficePhoneNumber 域中拷贝到 purchase order 的 Phone 域中。
注释 对于 DeliverTo 域,Mary 的名字是由 @UserName 在编写文档时确定。
2. 再次使用 Name & Address Book,为 Purchasing 部门的所有成员检索办公室电话号码列表。
可以使用带关键字 purchasing 的 @DbLookup 检索 OfficePhoneNumber 域,Notes 将会为在 Person 记录的 Department 域中输入是 purchasing 的每个雇员返回此电话号码。电话号码以文本列表的形式返回,号码之间用为此域选定的多值分隔符分隔。
3. 此公式返回存储在 Virus Check 文档 Status 域中的值,由存放在 RESEARCH 服务器 SMITH 子目录下 PROJECTS.NSF 数据库中的 In Progress 视图存取。此信息不会被缓存,因此如果在同一个 Notes 会话期内再次计算这个公式,那么应执行一个新的查找操作,确保被检索状态是最新的。
@DbLookup("":"NoCache";"RESEARCH":"SMITH\\PROJECTS.NSF"; "In Progress";"Virus Check";"Status")
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值