我有一个文件制作者数据库,我想根据以下条件显示记录:
显示所有者或用户为"John"且地点为"伦敦"、"巴黎"或"阿姆斯特丹"的所有记录
第一部分很简单:
Enter Find Mode [Pause:Off]
Set Field [mydb::Owner; "John"]
New Record/Request
Set Field [mydb::User"; "John"]
Perform Find[]
但是第二部分呢?到目前为止,我还没有能够实现这一点。我当然可以继续循环浏览找到的记录并省略我不想要的记录,但应该有更好的方法来做到这一点。
有。您可以在执行初始查找后使用约束搜索结果。
Enter Find Mode [Pause:Off]
Set Field [mydb::Owner; "John"]
New Record/Request
Set Field [mydb::User"; "John"]
Perform Find[]
#Constrain the found set
Enter Find Mode [Pause:Off]
Set Field [mydb::Place; "London"]
New Record/Request
Set Field [mydb::Place; "Paris"]
New Record/Request
Set Field [mydb::Place; "Amsterdam"]
Constrain Found Set []
创建 FileMaker 搜索的一种简单方法是在如下所示的列表中重新表述搜索要求:
(O and L)
or
(O and P)
or
(O and A)
or
(U and L)
or
(U and P)
or
(U and A)
but not
(B and C)
换句话说:
- 对于要查找的每个案例,请在一行中写下用"and"分隔的条件。您可以添加括号,这是可选的,但它们确实使正确阅读和理解逻辑更容易
- 然后用"或"分隔每行
- 如果你有想要从结果中排除的情况,你写"但不是"而不是"或",而且 - 非常重要的是 - 你在列表的末尾添加排除项!
在您的示例中,您可以编写:
(Owner="John" and Place="London")
or
(Owner="John" and Place="Paris")
or
(Owner="John" and Place="Amsterdam")
or
(User="John" and Place="London")
or
(User="John" and Place="Paris")
or
(User="John" and Place="Amsterdam")
当你写下来后,你所要做的就是:
- 将每个条件替换为等效的"设置字段"步骤(否则忽略"和")
- 将"或"替换为新记录/请求步骤
- 将"但不"替换为两个步骤 新建记录/请求,省略记录
- 将所有这些置于进入查找模式 [暂停:关闭]/执行查找[] 三明治,您就可以运行了!
然后,示例代码如下所示:
Enter Find Mode [Pause:Off]
Set Field [mydb::Owner ; "John"]
Set Field [mydb::Place ; "London"]
New Record/Request
Set Field [mydb::Owner ; "John"]
Set Field [mydb::Place ; "Paris"]
New Record/Request
Set Field [mydb::Owner ; "John"]
Set Field [mydb::Place ; "Amsterdam"]
New Record/Request
Set Field [mydb::User ; "John"]
Set Field [mydb::Place ; "London"]
New Record/Request
Set Field [mydb::User ; "John"]
Set Field [mydb::Place ; "Paris"]
New Record/Request
Set Field [mydb::User ; "John"]
Set Field [mydb::Place ; "Amsterdam"]
Perform Find[]
无论你使用这种多请求方法还是AndreasT的约束方法,都是性能和你得到的组合数量的问题。
为了完整起见,这里有一个"但不是"的例子 - 以英国脱欧为主题:
假设您想在欧洲大陆找到 FileMaker 程序员,您可能符合以下条件:
(Job="FileMaker" and Place="Europe")
but not
(Land="UK")
使用上述方法,这将实现为:
Enter Find Mode [Pause:Off]
Set Field [mydb::Job ; "FileMaker"]
Set Field [mydb::Place ; "Europe"]
New Record/Request
Omit Record
Set Field [mydb::Land ; "UK]
Perform Find[]
文件制作愉快!
沃森先生