【问题标题】:Check Constraints in Access检查 Access 中的约束
【发布时间】:2015-01-16 09:27:42
【问题描述】:

我正在处理Access database,我想将Check Constraint 保存为查询。在Access 中甚至可能吗? 无论如何,这是我的查询:

ALTER TABLE LEVERANCIER
ADD CONSTRAINT chk_postcode CHECK(
NOT EXISTS(
SELECT levnr, postcode
FROM LEVERANCIER
WHERE Left(postcode, 4) = 5050 OR Woonplaats = "Amsterdam"));

它在 AnySQL Maestro 中有效,但在 Access 中无效..

【问题讨论】:

  • 定义“不起作用”?
  • 好吧,当我尝试运行它时,我收到一条错误消息:CONSTRAINT 子句中的语法错误。

标签: sql ms-access check-constraints


【解决方案1】:

Access 数据库引擎确实支持 CHECK 约束,但无法从 Access 中的查询设计器执​​行创建它们的 DDL。它们必须使用 VBA 代码和 ADO 连接来创建,如下所示:

Option Compare Database
Option Explicit

Public Sub AddCheckConstraint()
    Dim strSql As String
    strSql = _
            "ALTER TABLE LEVERANCIER" & vbNewLine & _
            vbTab & "DROP CONSTRAINT chk_postcode;"
    On Error Resume Next
    CurrentProject.Connection.Execute strSql
    On Error GoTo 0
    strSql = _
            "ALTER TABLE LEVERANCIER" & vbNewLine & _
            vbTab & "ADD CONSTRAINT chk_postcode" & vbNewLine & _
            vbTab & "CHECK (" & vbNewLine & _
            vbTab & vbTab & "NOT EXISTS (" & vbNewLine & _
            vbTab & vbTab & vbTab & "SELECT levnr, postcode " & vbNewLine & _
            vbTab & vbTab & vbTab & "FROM LEVERANCIER " & vbNewLine & _
            vbTab & vbTab & vbTab & "WHERE Left(postcode, 4) = '5050' OR Woonplaats = 'Amsterdam' " & vbNewLine & _
            vbTab & vbTab & ")" & vbNewLine & _
            vbTab & ");"
    CurrentProject.Connection.Execute strSql
End Sub

【讨论】:

    猜你喜欢
    • 2014-11-27
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多