仅在相关表*中创建记录*如果之前不存在则记录*

时间:2013-02-05 07:02:06

标签: filemaker

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

数据到达Excel电子表格以导入出席。但后来我想知道是否有人参加我们的记录中的人...有点像这样:

  1. 查看考勤表中新添加的每条记录
  2. 查看成员表中是否存在提及的成员
  3. 如果是的话,什么都不做
  4. 使用来自考勤表的数据,在会员表中为他们创建新记录。
  5. 如果我理解正确,步骤3和4应该是这样的:

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

    即。将所需信息放入变量,在相关表中启动新记录,并将数据设置为变量值。

    但是如何让第2步发生?我猜测某种循环将通过考勤中找到的记录集,并获取相关的标识符。如何向会员表显示它是否存在?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

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

我还假设您通过成员中的主键和出席时的外键(即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对多关系变为1 =会员很多=出席,您需要检查以确保您在循环期间尚未创建会员记录,即如果新会员有多个出席您可以在循环期间创建成员记录的记录。

你的循环看起来像这样:

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

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

答案 2 :(得分:-1)

如果你有很多成员,那么“名字”可能对确定一个独特的成员有点轻松! 因此,我认为你会为每个成员提供某种独特的钥匙。 从那里开始,只需在创建新记录之前在成员库中搜索成员......