MS Access:如果不存在则添加列(或 try/catch 它)

MS Access: adding column if not exist (or try/catch it)

这是一个简单的问题,但我找不到答案...

我必须检查一列是否存在,如果测试是否定的则添加它。我如何只使用 sql 代码?

这是 SQL 服务器的语法:

IF NOT EXISTS (
  SELECT * 
  FROM   sys.columns 
  WHERE  object_id = OBJECT_ID(N'[dbo].[Person]') 
         AND name = 'ColumnName'
)
BEGIN
    --STUFF HERE
END

对于 MS Access,仅使用 SQL 代码...正确的语法是什么?

UPDATE:还有一种方法可以执行 try cath 语句,我只需要在不存在的情况下不添加任何内容...所以,还有一个try catch 没问题,我想。 try catch 也很容易在 sql 服务器中使用...并用于访问?

更新 2:我已经这样做了:

If Not Exists (Select Column_Name
           From INFORMATION_SCHEMA.COLUMNS
           Where Table_Name = 'TabTessereVeicoli'
           And Column_Name = 'TAGA')
begin

    ALTER TABLE TabTessereVeicoli ADD TAGA text(25) NULL;

end

但我收到错误消息“SQL 语句无效。应为 DELETE、INSERT、PROCEDURE、SELECT 或 UPDATE。”为什么?我怎样才能在 IF 之后做一个改变 table?

您不能在 Access SQL 中执行此操作。 您可以 运行 这个:

ALTER TABLE TabTessereVeicoli ADD TAGA text(25) NULL;

并忽略错误,或者您可以使用 VBA 打开 TableDef 并进行修改。

合并(并测试)VBA 其他人的片段,以检查 Microsoft Access 中是否存在字段,并将字段添加到 table。 (我想我会重新陈述它们,部分是为了我自己参考!)

检查字段是否存在于 table:

Function DoesFieldExist(sTable As String, sField As String) As Boolean
    Err.Clear
    On Error GoTo setfalse:
    If (DCount(sField, sTable) = 0) And Err Then _
        DoesFieldExist = False Else DoesFieldExist = True
setfalse:
End Function

向 table 添加新字段:

Sub AddFieldToTable(sTable As String, sField As String, sType As String)
    On Error GoTo sError
    CurrentProject.Connection.Execute "ALTER TABLE " & sTable & _
        " ADD " & sField & " " & sType & ";"
    Debug.Print "Added field [" & sField & "]"
    Exit Sub
sError:
    Debug.Print "Error adding field: " & Err, Err.Description
    Stop
End Sub

当然,如有必要,它们可以很容易地合并为一个功能。