我的部门使用的软件工具可以使用源自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。但是当用户向查询添加行时,如何确保将正确的值保存到“类型”字段?
答案 0 :(得分:1)
正如所指出的,我可能误解了这个问题。毕竟,这不是一个不稳定的问题,但也许是一个简单的问题?
如果您正在询问如何向表中添加记录,同时确保例如“记录显示在Resistor查询中是否为Resistor”,那么它是一个常规追加查询,指定{{1 } {} Resisitors
。
例如:
Type
如果您已经尝试过并且遇到问题,可能是因为您使用保留字作为字段名称,虽然它有时会起作用,但可能会以意想不到的方式导致问题。
INSERT INTO Components ( ID, Type, Mfg )
SELECT 123, 'Resistors', 'Company XYZ'
是Access,SQL和VBA都用于特定目的的词。这与您使用Type
和SELECT
作为字段或表名称的想法相同。 (FROM
)。
这是一般应该避免的list of reserved words。 (我意识到它被标记为Access 2007,但列表非常相似,并且很难找到Excel VBA最近的“官方”列表。)
原始答案:
这是一种不可思议的做事方式。数据库的要点是以这样的方式组织,以防止不仅重复数据,而且重复查询和代码
我编写了自己使用的编程规则“如果你做的不止一次,那你做错了。”( all 尽管如此,还是一般的经验法则。)
唯一选项是“SELECT SELECT FROM FROM
”和“Resistors
”吗? (...我希望你没有跟踪电子产品供应商店的库存......)如果有可能的选择,那就更有理由寻找替代方法。
要回答您的问题,请在“查询设计”窗口中不可能返回打开查询的名称。
由于@Erik建议,约束到表单上的控件。也许有一个下拉或选项按钮,用户可以选择相关的类型。然后您的查询将如下所示:
Capacitors
在VBA中,让查询引用变量的值,例如:
SELECT * FROM Components WHERE Type = 'Forms![YourFormName]![NameOfYourControl]'
Dim TypeToDel as String
TypeToDel = "Resistor"
不推荐,但您可以让用户手动输入条件。如果您的查询是这样的:
DoCmd.RunSQL "SELECT * FROM Components WHERE Type = '" & typeToDel'"
...然后每次运行查询时,都会提示:
同样,您可以为选项提供查询提示,可能是单个数字或代码,并让查询选择适当的条件:
...并在查询条件中包含SELECT * FROM Components WHERE Type = '[Enter the component type]'
语句。
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'));
还有另一个不稳定的答案here,但这只是创造了更多重复的信息(以及更多未来的错误)。
旁注: SELECT * FROM Components WHERE Type = 'Resistor'
是Access&中的保留字。 VBA;你可能最好选择另一个。 (我通常用Type
之类的相关字母作为前缀。)