gpt4 book ai didi

database - MS Access,使用查询名称作为字段默认值

转载 作者:搜寻专家 更新时间:2023-10-30 23:30:39 25 4
gpt4 key购买 nike

我的部门使用的软件工具可以使用来自 MS Access 数据库中的表或查询的自定义组件库。

Table: Components
ID: AutoNumber
Type: String
Mfg: String
P/N: String
...

Query: Resistors
SELECT Components.*
FROM Components
WHERE Components.Type = "Resistors"

Query: Capacitors
SELECT Components.*
FROM Components
WHERE Components.Type = "Capacitors"

这些查询适用于 SELECT。但是当用户在查询中添加一行时,如何确保将正确的值保存到 Type 字段?

最佳答案

编辑#2:

不行,做不到。对不起。

编辑#1:

正如所指出的,我可能误解了这个问题。毕竟,这不是一个不稳定的问题,但也许是一个简单的问题?

如果您询问如何在表中添加记录,同时确保“如果它是电阻器,记录显示在电阻器查询中”,那么它是一个常规附加查询,指定 Resisitors。作为您的Type .

例如:

INSERT INTO Components ( ID, Type, Mfg )
SELECT 123, 'Resistors', 'Company XYZ'

如果您已经尝试过并且遇到问题,这可能是因为您使用保留字作为字段名称,尽管有时它可能会起作用,但可能会以意想不到的方式导致问题。
Type是 Access、SQL 和 VBA 都用于特定目的的词。这与您使用 SELECT 的想法相同和 FROM作为字段或表名。 ( SELECT SELECT FROM FROM)。

这是 list of reserved words通常应该避免这种情况。 (我意识到它被标记为 Access 2007,但列表非常相似,而且很难找到 Excel VBA 的最新“官方”列表。)

原答案:

这是一种很奇怪的做事方式。数据库的重点是以这样的方式组织,以防止数据重复,而且查询和代码也一样

我制定了自己使用的编程规则“如果你做的事情不止一次,那你就做错了。” (并非在所有情况下都如此,但这是一般的经验法则。)

只有“ Resistors”和“ Capacitors”选项吗? (...我希望您没有跟踪电子用品商店的库存...)如果有可能的选择,那就更有理由寻找替代方法。

要回答您的问题,在查询设计窗口中,它是 不可能返回打开查询的名称。

一些替代选项:
  • 正如@Erik 建议的那样,限制为表单上的控件。也许有一个下拉或选项按钮,用户可以选择相关类型。然后您的查询将如下所示:
    SELECT * FROM Components WHERE Type = 'Forms![YourFormName]![NameOfYourControl]'
  • 在 VBA 中,让查询引用变量的值,例如:
    Dim TypeToDel as StringTypeToDel = "Resistor"DoCmd.RunSQL "SELECT * FROM Components WHERE Type = '" & typeToDel'"
  • 不推荐,但您可以让用户手动输入条件。如果您的查询是这样的:
    SELECT * FROM Components WHERE Type = '[Enter the component type]'
    ...然后每次运行查询时都会提示:

    img
  • 同样,您可以让查询提示输入一个选项,可能是一位数或一个代码,并让查询选择适当的条件:

    img2

  • ...并拥有 IF查询条件中的语句。
    SELECT * 
    FROM Components
    WHERE Type = IIf([Enter 1 for Resistors, 2 for Capacitors, 3 for sharks with frickin' laser beams attached to their heads]=1,'Resistors',IIf([Enter 1 for Resistors, 2 for Capacitors, 3 for sharks with frickin' laser beams attached to their heads]=2,'Capacitors','LaserSharks'));

    请注意,如果您将有超过 2 个选项,则需要多次使用参数框,并且它们必须拼写相同。
  • 最后,如果您仍然要为每种组件类型采用单独查询的路线,只要您仍然进行单独的查询,为什么不在每个组件中放置一个静态值(就像您的示例一样):
    SELECT * FROM Components WHERE Type = 'Resistor'

  • 还有另一个奇怪的答案 here但这只会创造更多重复的信息(以及更多 future 的错误)。

    旁注 : Type 是Access & VBA 中的保留字;你可能最好选择另一个。 (我通常在前面加上一个相关的字母,如 cType 。)

    更多信息:
  • Use parameters in queries, forms, and reports
  • Use parameters to ask for input when running a query
  • Microsoft Access Tips & Tricks: Parameter Queries
    Frickin' Lasers
  • 关于database - MS Access,使用查询名称作为字段默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49517273/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com