CurrentProject vs CurrentDb

时间:2017-06-07 13:23:25

标签: sql vba

我是VBA的新手,对SQL很陌生,所以我不太明白为什么会遇到这个问题。我试图将excel文件导入访问数据库。出于某些原因,我必须将我的Excel数据存储到一个数组中,然后将该数组上传到临时表中,然后附加表的相关部分。根据我目前的理解,将我的数据从数组中获取到新临时表的最佳方法是创建该表,然后使用SQL逐行填充它。我的问题是,当我尝试创建表时,我收到一个错误。我已经简化了我的代码,我相信这包含了你需要知道的内容。

Dim strSQL As String
strSQL = "CREATE TABLE TestTable (`Value` VARCHAR(20))"
CurrentDb.Execute strSQL

这很好用

Dim strSQL As String
strSQL = "CREATE TABLE TestTable (`Value` DECIMAL(4,2))"
CurrentDb.Execute strSQL

这导致运行时错误3292"字段定义中的语法错误"

Dim strSQL As String
strSQL = "CREATE TABLE TestTable (`Value` DECIMAL(4,2))"
CurrentProject.Connection.Execute strSQL

这很好用

为什么我应该使用一个而不是另一个?简单地改为CurrentProject似乎解决了我遇到的任何问题,但我只是想了解这里发生了什么。我已经完成了自己的研究,但我找到的任何答案都超出了我的想法(再次,我对VBA来说相对较新)。我提前道歉,可能没有我目前能够理解的答案

1 个答案:

答案 0 :(得分:0)

IIRC,CurrentDb.Execute支持不同的ANSI SQL标准,我认为ANSI 89,尽管我可能错了。 CurrentProject.Connection.Execute支持ANSI 92,允许该语句正确执行。它是SQL语言的不同规范。如果你曾经使用或将使用SQL服务器,这很快就会显而易见。

您应该注意到您的SQL语句无法尝试将其作为纯SQL查询运行。要成功运行此查询,一个选项是启用ANSI 92,因为在Access中默认情况下不启用它。请参阅下文,了解切换的相关选项。

Setting in Access for ANSI 92

话虽如此,如果您熟悉Access'那么更改SQL标准可能不太理想。 SQL语法,但如果您已经具有SQL Server经验,那么它可能会非常有用。另外值得注意的是,更改Access中的ANSI选项不会改变CurrentDB.Execute运行的方式在VBA中执行SQL语句,您仍然需要当前的方法,或运行存储的查询。