使用脚本((A或B)和(C或D或E))在电影制作人中进行复杂搜索



我有一个文件制作者数据库,我想根据以下条件显示记录:

显示所有者或用户为"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)

换句话说:

  1. 对于要查找的每个案例,请在一行中写下用"and"分隔的条件。您可以添加括号,这是可选的,但它们确实使正确阅读和理解逻辑更容易
  2. 然后用"或"分隔每行
  3. 如果你有想要从结果中排除的情况,你写"但不是"而不是"或",而且 - 非常重要的是 - 你在列表的末尾添加排除项!

在您的示例中,您可以编写:

(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")

当你写下来后,你所要做的就是:

  1. 将每个条件替换为等效的"设置字段"步骤(否则忽略"和")
  2. 将"或"替换为新记录/请求步骤
  3. 将"但不"替换为两个步骤 新建记录/请求,省略记录
  4. 将所有这些置于进入查找模式 [暂停:关闭]/执行查找[] 三明治,您就可以运行了!

然后,示例代码如下所示:

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[]

文件制作愉快!

沃森先生

最新更新