1

我有一个 Filemaker 数据库,其中包含一个 Members 表、一个 Events 表和一个名为 Attendance 的连接表,该表应列出哪些成员参加了哪些活动。出席为成员勾选了“允许创建新记录”设置(活动不需要它)。

数据以 Excel 电子表格的形式到达,用于导入考勤。但是后来我想看看是否有人参加了我们的记录中没有的人......有点像这样:

  1. 查看考勤表中每条新添加的记录
  2. 查看成员表中是否存在提到的成员
  3. 如果是这样,什么也不做
  4. 否则,使用出勤表中的数据为他们在成员表中创建一条新记录。

如果我理解正确,第 3 步和第 4 步应该如下所示:

Set Variable [ $fname; Value: Attendance::firstname ] 
Go To Layout ["Member" (Firstname)]
New Record/Request
Set Field [Member::Firstname; $fname]

即将所需信息放入变量中,在相关表中开始新记录并将那里的数据设置为变量的值。

但是我如何让第 2 步发生呢?我猜某种循环会遍历出勤中找到的记录集,并获取相关标识符。如何将其显示给成员表以查看它是否存在?

4

3 回答 3

0

用 EQUALS 关系链接这两个表。

写一个脚本:

     // Loop through your attendance records.
     // Be sure you're in the correct layout
Go to Layout ["imported list"]
     // Attempt to go to the membership record of the person who is attending the event.
Go to Related Record [Show only records from: from table: "membership table"; using layout: "membership table"
     // If the person who is attending IS in the membership list, you'll go to that member's record in the "membership table."
     // If the person who is attending is NOT in the membership list, you'll get an error. You can use that error in an if statement to execute code to add that member.
If [Get ( LastError ) = "101"]
     // insert code to add new member
End if
于 2015-01-24T04:50:47.543 回答
0

如果您有很多成员,“名字”可能有点轻,无法确定一个独特的成员!因此,我假设您将为每个成员拥有某种唯一的密钥。从那里开始,只需在成员库中搜索成员,然后再创建新记录……</p>

于 2013-12-03T18:53:28.467 回答
0

Member由于您已经在和之间建立了关系Attendance,这意味着您可以跨关系从出勤表中“看到”任何相关成员。

我们也知道您只需要评估来自电子表格的新出勤记录。

我还假设电子表格中每个成员可能有不止一个出席记录。情况可能并非如此,但假设它是可能的更安全。

我还假设您通过成员中的主键和出勤中的外键将成员表链接到出勤表,即Member::ID = Attendance::Member ID.

所以这是我建议的脚本过程:

  • 将新的考勤记录导入考勤表。
    • 这将为您提供一组找到的新出勤记录
  • 出勤布局中,查找Member带有省略号的相关记录,即:

    # This assumes you're already on the Attendance layout
    Enter Find Mode
    Set field [Member::ID ; "*"]
    Omit record
    Constrain Find
    
  • 这将为您提供一组没有匹配成员记录的出勤记录。

从这里您可以遍历每个出勤记录并根据需要创建成员记录。

如果您检查Allow creation成员 -< 出勤关系的成员侧,您可以直接从出勤布局中设置成员表中的字段。

由于成员和出勤之间的一对多关系为 1=Member Many=Attendance,因此您需要检查以确保您尚未在循环期间创建成员记录,即如果新成员有多个出勤记录,您可以已经在循环期间创建了成员记录。

您的循环将如下所示:

Go to Record [First]
Loop
    If [IsEmpty(Member::ID)]
        Set Field [Member::First Name] // This first Set Field will create your new Member Record as long as the "Allow Creation" is enabled on the Member side
        Set Field [Member::Last Name]
        ... This would be the rest of your set field steps for Member
    End If
    Go to Record [Next ; Exit After Last]
End Loop

这样您就无需离开您的出勤记录集。此外,将通过关系本身的属性自动创建和设置两个表的主键和外键。

于 2015-01-25T00:12:01.050 回答