关于查询

kathy_78 2003-12-09 12:12:39
要做个查询,但是从来没有做过查询,还没有什么概念,我把自己的思路和存在问题说说,请大家提点一下。

现在一个view列出包含需要数据的文档,假设下面两列:
ID: 文件的UNID
date1: 对应一个text list field,比如有两行(两个文档),数据分别是:"mm":"aa":"tt"和"yy":"kk":"pp"
date2: 对应一个text list field,比如有两行(两个文档),数据分别是:"0":"1":"0"和"1":"1":"0"

目标是找出每行的date2为"1"所对应的date1的数据以放入另外一个列表,在这个例子中需要得到:
"aa"
"yy"
"kk"

我现在不知道Lotus可以怎么实现这个功能,有下列问题:
1、有什么相关命令?我找到同一些同查询有关的命令,不知道那个比较适合完成这个功能?
2、查询的时候是直接在view里面查询,还是通过view在相应form中查询?我希望能够直接从view查,这样感觉会比较快。
3、放数据的是一个text list,存在两列数据的对应问题,应该怎么办?







...全文
43 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gjd111686 2003-12-10
  • 打赏
  • 举报
回复
用公式也可以:
DataList1:=@DbColumn("Notes":"NoCache";"":"*.nsf";"View";2);
DataList2:=@DbColumn("Notes":"NoCache";"":"*.nsf";"View";3);
IDList:=@DbColumn("Notes":"NoCache";"":"*.nsf";"View";1);
Len:=@Elements(DataList2)
@Replace(@Text("1");@Text(DataList2);@Text(DataList1))
JavaExplore 2003-12-09
  • 打赏
  • 举报
回复
mark
chenyg2000 2003-12-09
  • 打赏
  • 举报
回复
只显示答复文档:
select @IsAvailable("$Ref")
perry_zh 2003-12-09
  • 打赏
  • 举报
回复
楼上的说的已经蛮明白的了,应该没问题
thomasxdx 2003-12-09
  • 打赏
  • 举报
回复
可以这样做:
1、同样的视图,在View Selection中写入 SELECT @All;
2、然后修改视图标签属性中的第二个标签:把“以层次结构显示答复文档”这个选项去掉;
3、还是做两列,第一列为date2,第一列为date1。且第一列为排序列;
4、分别修改两列的列属性,选中“将多值分开显示成独立的行”该选项;
5、这两列的列值使用公式写:
@If(@IsResponseDoc;data2;"")
@If(@IsResponseDoc;data1;"")
6、同样使用@DBLookup的方法就可以得到你所要的结果了。
kathy_78 2003-12-09
  • 打赏
  • 举报
回复
同父文档一起的时候,选“将多值分开显示成独立的行”,使第一列为排序列,好像都无效,我给父文档加了相应的数字,@If(@IsResponseDoc;Data2;"2") 它也不排序。
kathy_78 2003-12-09
  • 打赏
  • 举报
回复
星星过客 的办法是挺好,我做了一个简单的试验成功了。
可是由于存放date1,date2的 formA 是一个response, 它好像必须同它的父文档一起列出而不能单独列出,所以也就不能单独排序了,也就是无法使用这个简单好用的办法。是否有什么办法让response独立显示出来(因为其实我不需要父问答个内容)。
ibm123 2003-12-09
  • 打赏
  • 举报
回复
同意thomasxdx(星星过客)的方法!
rosemerry 2003-12-09
  • 打赏
  • 举报
回复
如果真像你以上所说的例子,应该不是用搜索来做的。
比如说你有一个表单两个多值列表域,保存成两个文档。第一个文档的两个域值分别为Date1域,里面值为"mm":"aa":"tt"和域Date2,里面值为:"0":"1":"0"。第二个文档的域Date1值为yy":"kk":"pp"和域Date2值为"1":"1":"0"。这个视图的名称为($All)
我以B/S为例:
Dim Session As New NotesSession
Dim DB As NotesDatabase
Set Doc_Tmp As NotesDocument
Set DB = Session.CurrentDatabase
Set View = DB.GetView("($All)")

ii=0
If Not View Is Nothing Then
Set Doc_Tmp = View.GetFirstDocument
Do While Not Doc_Tmp Is Nothing
For i = 0 To Ubound(Doc_Tmp.Date2)
If Doc_Tmp.Date2(i)="1" Then
Redim Preserve Array(ii)
Array(ii)=Doc_Tmp.Date1(i)
ii=ii+1
EndIf
Next
Set Doc_Tmp = View.GetNextDocument(Doc_Tmp)
Loop
End If

For i=0 To Ubound(Array)
msgbox Array(i)
Next

Array就是你需要的列表。你可以把它放在任意的域中,如果想把它放在当前文档的Date3域中,如果是多值文本域,那就Doc.Date3 = Array就Over了。
kathy_78 2003-12-09
  • 打赏
  • 举报
回复
先多谢珏儿,这个问题有点棘手,请各位多指教。
我也查询过GetDocumentBykey的相关信息,目前要确定关键字有点麻烦,因为目标是找出每行的date2为"1"所对应的date1的数据。这样是不是意味着只能一个个文档地读,然后在文档中找出符合条件的数据?而不能直接对view中的内容进行对比?
thomasxdx 2003-12-09
  • 打赏
  • 举报
回复
通过以下方法可以实现:
1、做一个视图,第一列为date2,第一列为date1。且第一列为排序列。
2、分别修改两列的列属性,选中“将多值分开显示成独立的行”该选项。
3、使用@DBLookup的方法就可以得到你所要的结果了。
rosemerry 2003-12-09
  • 打赏
  • 举报
回复
1.lotus Notes中的Search有两种方式:1)关键字搜索:用处在于了解文档的Field,针对文档的域进行搜索;2)全文检索:对于文档中所有内容进行搜索(包括附件)
2.如果想对View进行搜索有一种:Set Doc_Tmp = View.GetDocumentBykey(关键字),需要说明得是视图View第一列为排序,关键字必须是第一列的Field
3.第三点我不怎么理解:(不能做详细解答!Sorry

535

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 Exchange Server
社区管理员
  • 消息协作社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧