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 函数更易于使用)。