【问题标题】:MS-Access, Bound Control on Form, Show user text, but record PK for that textMS-Access,表单上的绑定控件,显示用户文本,但记录该文本的 PK
【发布时间】:2010-08-29 02:04:37
【问题描述】:

这里除了第一个和最后一点之外的所有内容都是从另一个发布者的问题中复制的。主题是带有绑定控件的 MS-Access 表单。我是 Access 的新手。我很欣赏它为表单提供的所有“间接级别”,但我似乎找不到一个我认为是非常非常常见的任务的例子......这是答案(谢谢,Thomas)其他用户的问题,然后是我的“扭曲”:

行源通常用于确定如何构建项目列表,而控制源确定将使用哪个字段来存储或检索值。例如,在组合框中,您拥有这两个属性。 Row Source 确定如何构建用户在点击向下箭头时看到的列表。控制源决定在哪里存储用户选择的值。

示例假设我们有一个绑定到名为 Cars 的表的表单,该表列出了有关汽车的信息。此表中的一列用于存储汽车的颜色。假设该列名为 BodyColor。您还有另一个允许颜色表(例如蓝色、黄色、绿色、钢蓝色、午夜蓝等)。您希望确保用户在输入汽车颜色值时从该颜色列表中进行选择。

在我们的表单上,我们添加了一个组合框,我们在其中设置了以下属性:

Control Source  :   BodyColor
Row Source      :   SELECT Colors.Name FROM Colors ORDER BY Colors.Name;
Row Source Type   :   Table/Query

当用户看到您的组合框时,他们将能够点击组合框上的向下箭头并查看颜色列表。当他们选择一种颜色时,Form 会将他们的选择保存到 BodyColor 列中。

在上述确切情况下,如何让表单存储 BodyColor 的主(自动编号)键?我仍然希望用户从组合框中选择 BodyColor,但我不希望他们看到/选择 PK。谢谢。

【问题讨论】:

    标签: ms-access forms


    【解决方案1】:

    您可以设置列宽和绑定列,这里不需要,因为默认值为零,但很高兴知道。所以:

     Row Source : SELECT Colors.PK, Colors.Name FROM Colors ORDER BY Colors.Name
    
     Column Widths: 0; 2cm
    

    用户不会看到 PK,因为它是隐藏的(宽度为 0),但它位于写入控制源的绑定列 0 中。

    顺便说一句,我真的希望你的表不包含名为 name 的列(字段),因为它确实是一个非常保留的词,会让你的生活非常不愉快。

    【讨论】:

    • 谢谢。零宽度列,很好。没有“名称”列,我的大部分问题都是别人在 SO 上的粘贴。 ... 10 分钟后 ...嗯,我的确切情况实际上是一个文本框,而不是一个组合框,所以列宽的东西不是一个选项。不过还是很高兴知道。
    • 您说“我仍然希望用户从组合框中选择 BodyColor”,我在您的问题中根本看不到对文本框的任何引用。事实上,我看不出这个问题与文本框有什么关系。
    • 是的,对不起。这是一个列表框。从视觉上看,我无法正确识别它。我猜旋转箭头的存在没有注册。
    • 您可以对列表框使用相同的技术。
    • 谢谢。有时间我会试试的。我不是很肯定,但我认为有必要删除一个控件,重新创建它,然后从头开始设置行源。很多时候,我会编辑行源,但更改似乎没有坚持或根本不起作用。这是每次关闭设计视图,对“您要保存...”消息回答“是”(并且之前多次点击保存图标)。我最终决定采用不那么标准化的设计。如果速度慢我会重做。我会准备好一个“足够好”的版本,然后上书——希望我能在我的用户反抗之前知道足够的危险。
    猜你喜欢
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多