【问题标题】:Filemaker Pro: Assigning a value to a field depending of the TabFilemaker Pro:根据选项卡为字段分配值
【发布时间】:2012-04-26 11:44:16
【问题描述】:

这是关于我的项目(设计临床试验表格)的后续问题。我的第一个问题在这里:Filemaker Pro: Create multiple entries of a table with Tab Control

为了简化,我创建了一个测试 FMP 文件。这是数据库的设计和布局。
Database structure
Layout of the example

对于每个患者,我在 Patient Table 中创建一条记录 - Patient_ID 是标识符。我将提供一些一般信息(这里我只使用了名称)。 在另一个标有“Tableau_Data”的表上,我将存储一些数据 - Data_ID 是标识符。表 Patient" 和 "Tableau_Data" 与 Patient_ID 链接。

数据将始终由相同的字段组成(在我的示例中:“Turlututu”)——实际上超过 50 个参数。我们将收集 5 天的数据(所以我有 5 个标签)。感谢 Sam Barnum 的帮助,我能够通过使用门户在每个选项卡中拥有不同的“Tableau_Data”记录。

但我想在“Tableau_Data”的每条记录中存储它来自的选项卡(字段“Jour”)。所以我想有一种方法来根据选项卡自动设置“Jour”的值:一个脚本可能链接到门户或字段。但是怎么做呢?

理想情况下,我想隐藏“Jour”字段。

默认情况下,我可以做一个下拉列表,让用户设置这个变量的值。我宁愿那样。不符合人体工程学,可能会导致数据采集过程中出错。

Sam Barnum 暗示也许我可以预先生成 Tableau_Data 的 5 条记录链接到我的 Patient_ID。因此,我会知道记录 1、6、11、16,... 用于 Jour=1,记录 2、7、12,... 用于 Jour=2,依此类推。但我什至不知道该怎么做。

【问题讨论】:

    标签: filemaker


    【解决方案1】:

    您的脚本和自动输入计算可以自动“知道”用户在哪个选项卡上。这是通过使用布局对象名称和函数 Get (ActiveLayoutObjectName) 来实现的。

    在 FileMaker 中,每个布局或布局对象组都可以有一个“名称”。 FileMaker 强制执行名称的唯一性,因此您不可能有 2 个同名对象。您可以通过“位置”选项卡上的检查器设置布局对象名称。它在顶部。

    在您的情况下,您可以为每个选项卡指定一个名称。这是通过在布局模式下双击选项卡来完成的。当它被选中时,它周围有一个黑色边框。然后使用如上所述的 Inspector 分配名称。

    一旦您的每个标签都有一个唯一的名称。您可以使用 Get ( ActiveLayoutObjectName ) 来确定用户当前处于活动状态的选项卡。

    根据您的情况,您可以使用脚本执行此操作。或者让数据库中的字段将自动输入计算设置为“Get (ActiveLayoutObjectName)”可能会更容易,这样数据库将记录用户在创建记录时所在的选项卡。我相信你想要的结果。

    【讨论】:

    • 如果你真的想坚持 Tab 的想法,你可以将 Todd 的回答与我的“你也可以考虑:”部分结合起来,根据所选的 Tab 自动计算 JourCurrent 值,但是你最终不得不再次维护所有字段的 5 个副本。
    • 好吧,看来应该可以了。但是由于某种原因,“Jour”字段被设置为我之前的字段的名称。例如,我将五个“turlututu”字段命名为“T_J1”、“T_J2”、...和“T_J5”。 Jour 字段在选项卡 1 上设置为“T_J1”,依此类推。我决定在 Tableau_Data 表上添加另一个字段“test”(变量“test”)。事实上,如果我先选择“test”字段,“Jour”字段将设置为“test”而不是“T_J1”。
    • 我不知道原因是否可能是我为每个选项卡使用了一个门户,以便为每个选项卡提供不同的“Tableau_data”表记录。
    • 好的,我找到了解决方案。 [链接]fmforums.com/forum/topic/…
    【解决方案2】:

    如果您只有少量的 Jour 值(5,正如您所指出的那样),您可能最容易为 Jour 的每个值设置新关系 - 每个选项卡一个。

    在您的 Patient_ID 表中,您将为 Jour 的每个值添加一个新字段。每个字段都是一个计算字段,计算的值是 Jour 的特定值。例如,Patient_ID 表将具有以下值:

    Patient_ID::Patient_ID
    Patient_ID::Nom
    Patient_ID::Jour1 (Calculation value set to 1)
    Patient_ID::Jour2 (Calculation value set to 2)
      ...
    Patient_ID::Jour5 (Calculation value set to 5)
    

    然后您将设置 5 个新关系,将 Patient_ID 和每个 Jour 字段一次一个链接到 Tableau_Data 字段的新表出现次数(在本示例中标记为 Tableau_Data_Jour#:)

    Jour1
    Patient_ID::Patient_ID = Tableau_Data_Jour1::Patient_ID
    Patient_ID::Jour1 = Tableau_Data_Jour1::Jour
    

    一路走来:

    Jour5
    Patient_ID::Patient_ID = Tableau_Data_Jour5::Patient_ID
    Patient_ID::Jour5 = Tableau_Data_Jour5::Jour
    

    对于每个新关系,您需要启用“允许通过此关系在此表中创建记录”。

    然后您将更改每个选项卡上的字段,以便 Jour 1 选项卡使用 Tableau_Data_Jour1 表中的字段,而 Jour 5 选项卡使用 Tableau_Data_Jour5 表中的字段。

    您也可以考虑:

    上面应该可以正常工作,但它很丑陋并且为你创造了很多工作。如果选项卡不是严格要求,我建议您改为:

    1. 在 Patient 表上创建一个新的“JourCurrent”编号字段。
    2. 创建与上述类似的关系,再次允许在 Tableau_Data_Jour 表上创建新记录:

      Patient_ID::Patient_ID = Tableau_Data_Jour::Patient_ID

      Patient_ID::JourCurrent = Tableau_Data_Jour::Jour

    3. 用 Jour 的所有值创建一个新的值列表

    4. 将 JourCurrent 字段放在布局上,并将其设置为从值列表中获取值作为弹出菜单。
    5. 让用户从弹出菜单中选择适合今天输入的 Jour,而不是使用选项卡。

    这样做对您的好处是您只需要维护每个相关字段(Tableau_Data_Jour 字段)一次,并且您可以添加一个新字段一次,而不是每个选项卡一次。

    【讨论】:

    • 我想过“也可以考虑”。但我不得不迅速丢弃它。首先,因为标签是必需的。我仍然可以使用弹出菜单来选择“Jour”。但是用户不想输入那个。我给出的例子是一个非常简单的例子。实际上,我有近 15 个选项卡,目前每个 Patient_ID 有 650 个字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多