经过很长一段时间做其他事后回到Access,有一件事真的让我烦恼,那就是如果你在设计模式下无意中打开一个查询,那么设计师就无法代表sql(即使它是有效的),设计师将为您“更正”您的查询,并且没有撤消......
是否有针对此的解决方法 - 或者我可以至少让它先问我问题的选项?
(Access 2007)
答案 0 :(得分:1)
这些天我倾向于在表格中存储查询。表单可用于查看查询,一些代码足以构建用于测试的查询,例如:
CurrentDb.CreateQueryDef "TempQueryName", Me.SQL
当然,首先测试查询是否存在是明智的。
您还可以使用DLookUp这样的SQL表在代码中以及RecordSource和Control Source中使用。
答案 1 :(得分:-1)
如果您不喜欢Access UI对SQL代码的影响,为什么还要尝试在其中查看SQL?它擦除了可能已经添加的任何漂亮的格式或空白以帮助人类读者。它甚至可以将您的SQL重新分配:日期文字为美国格式,子查询为括号,PROCEDURE
中的参数语法,VIEW
中列相关名称丢失等等。
对您而言,更好的方法是使用SQL Data Definition Language(SQL DDL)脚本创建数据库对象,然后引用您的脚本以供将来维护。
例如,这是一个用于创建一些数据库对象的Access Database Engine SQL DDL脚本:
CREATE TABLE Constants
(
lock CHAR(1) WITH COMPRESSION
DEFAULT 'x'
NOT NULL,
CONSTRAINT Constants__max_one_row
CHECK (lock = 'x'),
pi DECIMAL(3, 2) NOT NULL
)
;
INSERT INTO Constants (pi) VALUES (3.14)
;
CREATE TABLE Things
(
thing_ID CHAR(10) WITH COMPRESSION NOT NULL
CONSTRAINT uq__Things UNIQUE,
CONSTRAINT thing_ID__numeric_chars_only
CHECK (thing_ID NOT ALIKE '%[!0-9]%'),
thing_name VARCHAR(20) DEFAULT '{{NONE}}' NOT NULL,
CONSTRAINT thing_name__whitespace
CHECK (
thing_name NOT ALIKE ' %'
AND thing_name NOT ALIKE '% '
AND thing_name NOT ALIKE '% %'
AND LEN(thing_name) > 0
)
)
;
CREATE PROCEDURE AddThing
(
arg_thing_ID CHAR(10),
arg_thing_name VARCHAR(20) = '{{NONE}}'
)
AS
INSERT INTO Things (thing_ID, thing_name)
SELECT thing_ID, thing_name
FROM (
SELECT RIGHT('0000000000' + arg_thing_ID, 10) AS thing_ID,
IIF(LEN(arg_thing_name) = 0, '{{NONE}}', arg_thing_name)
AS thing_name
FROM Constants
) AS DT1
WHERE thing_ID NOT ALIKE '%[!0-9]%'
AND thing_name NOT ALIKE ' %'
AND thing_name NOT ALIKE '% '
AND thing_name NOT ALIKE '% %'
;
CREATE VIEW Stuff
(
stuff_ID, stuff_name
)
AS
SELECT T1.thing_ID, T1.thing_name
FROM Things AS T1
WHERE ' ' & T1.thing_name & ' ' ALIKE '% stuff %'
;
现在我从经验中了解到Access UI无法公开Access数据库引擎的一些功能(CHECK
约束,CHAR()
数据类型,WITH COMPRESSION
属性等)和可能会尝试更改Query对象的SQL视图中的语法:子查询中的parens,PROCEDURE
的参数 - 它将坚持调用查询 - ,{{1}的列相关名称列表 - 它将坚持也调用查询 - 等)。但谁在乎?如果我需要更改模式,我将基于SQL DDL脚本而不是Access UI认为我的脚本所说的内容。
这使我可以自由使用我选择的SQL编辑器,例如一个将关键字与数据元素分开设置,具有自动完成,缩进查询元素到我选择的等等。