MS Access 2003 是否包含通用 SQL 控制台

Dav*_*llo 4 console microsoft-access

我知道您可以在创建查询或视图时在 Access 中打开一个 SQL 控制台,但是是否有一个“通用”控制台可以让我执行如下语句:

CREATE TABLE Foo
(
Foo_Id int NOT NULL,
Name varchar(255) NOT NULL,
CONSTRAINT pk_FooID PRIMARY KEY (Foo_Id,Name)
)
Run Code Online (Sandbox Code Playgroud)

小智 7

我不知道您所说的“通用控制台”是什么意思,但也许在 Access 内部,它是满足您需求的即时窗口。如果您在主 Access 窗口中按键盘上的 Ctrl-G,则会将您带到 VBE 中的立即窗口,您可以在那里输入:

  CurrentDB.Execute "CREATE TABLE Foo (Foo_Id int NOT NULL, Name varchar(255) NOT NULL, CONSTRAINT pk_FooID PRIMARY KEY (Foo_Id,Name))"
Run Code Online (Sandbox Code Playgroud)

它是一个单行界面,所以没有 SQL 格式,但它会执行 SQL。

使用 CurrentDB 作为执行对象的问题在于,每次调用它时它都会返回一个新的数据库对象(以确保其所有集合都是最新的)。另一种选择是:

  DBEngine(0)(0).Execute "CREATE TABLE Foo (Foo_Id int NOT NULL, Name varchar(255) NOT NULL, CONSTRAINT pk_FooID PRIMARY KEY (Foo_Id,Name))"
Run Code Online (Sandbox Code Playgroud)

由于 DBEngine(0)(0) 始终返回相同的对象,因此您可以检查以下内容:

  DBEngine(0)(0).RecordsAffected
Run Code Online (Sandbox Code Playgroud)

这样做的“问题”在于,如果您要更改数据库的集合,则必须记住在使用它们之前刷新它们。例如,如果您添加或删除一个表,则必须将 TableDefs 集合刷新为最新的集合:

  DBEngine(0)(0).TableDefs.Refresh
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用缓存的数据库对象,就像我在所有应用程序中所做的那样,但它并不能避免集合刷新问题,而只是使键入更容易(我发现键入 DBEngine(0)(0) 是很容易出错,并且发现我的 dbLocal 函数更易于使用)。