1

我正在尝试在我的 SQL 查询中创建一个“动态”字段

INSERT INTO tblCARS (CreateField("[tblCARS]","[colors]","TEXT")) 
SELECT      avail_colors
FROM        tblSHOPS
WHERE       car_model = model_car;

这应该给我相同的结果

INSERT INTO tblCARS (colors) 
SELECT      avail_colors
FROM        tblSHOPS
WHERE       car_model = model_car;

字段 [colors] 不存在,因此我想在运行查询时将其附加到名为 [tblCARS] 的现有表中。

函数CreateField()看起来像这样

Public Function CreateField(strTable As String, strField As String, strType As String) As Variant
    CreateField = Null

    If (strField <> vbNullString) And (DoesTblFieldExist(strTable, strField) = False) Then
        CurrentDb.Execute "ALTER TABLE " & strTable & " ADD COLUMN " & strField & " " & strType
    End If

    CreateField = strField
End Function

当我运行查询时,Access 给了我错误“不正确的语法”(已翻译),并且光标停在第二个括号处。

有没有人成功地在运行时在 Access 查询上创建字段?
我知道我可以完全在 VBA 上做到这一点,但这不是我的目标。

有什么提示吗?

4

1 回答 1

3

该方法尝试让数据库引擎在执行语句时确定目标字段的名称。不幸的是,Access 的数据库引擎不提供这种能力。

本质上,该语句将该CreateField()函数视为参数。Access 不允许您使用参数作为字段名称。

考虑一个简单的参数示例。该声明成功...

INSERT INTO tblFoo(some_text) VALUES ("bar");

但是当提供相同的字段名称(some_text)作为参数时,语句失败......

PARAMETERS which_field Text ( 255 );
INSERT INTO tblFoo(which_field) VALUES ("bar");

因此,您需要使用 2 个操作而不是单个查询。您可以执行ALTER TABLE,然后使用INSERT硬编码到语句中的字段名称进行修改。

于 2013-09-06T20:15:21.773 回答