【问题标题】:Access SQL: creating field at runtimeAccess SQL:在运行时创建字段
【发布时间】:2013-09-07 04:16:01
【问题描述】:

我正在尝试在我的 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 上做到这一点,但这不是我的目标。

有什么提示吗?

【问题讨论】:

    标签: sql ms-access vba


    【解决方案1】:

    该方法尝试让数据库引擎在执行语句时确定目标字段的名称。不幸的是,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,并将字段名称硬编码到语句中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      相关资源
      最近更新 更多