回答

收藏

检查访问限制

技术问答 技术问答 185 人阅读 | 0 人回复 | 2023-09-13

我正在处理Access database,并且想将a另存CheckConstraint为查询。这甚至有可能Access吗?无论如何,这是我的查询:
# b# V1 u5 F* J, J! hALTER TABLE LEVERANCIER6 V# t8 T' C# Q' i. L6 h2 v" P7 `
ADD CONSTRAINT chk_postcode CHECK(  [. C9 {! N) m
NOT EXISTS(+ ~- M. j4 e$ l) W7 a# F) y* A
SELECT levnr, postcode
, W- o: l' e$ i0 M" B. [FROM LEVERANCIER1 C0 E2 u" i' L4 z# a
WHERE Left(postcode, 4) = 5050 OR Woonplaats = "Amsterdam"));
5 j/ m* T7 T* |/ S它确实可以在AnySQL Maestro中工作,但是不能在Access中工作。" }1 ]% W( Y, ]0 W
               
/ m% j5 \2 P9 X! k& \- D解决方案:
  S# ?* K. O* N' D5 u* k               
5 }! h+ c9 s" @4 l+ I5 n6 _9 H' ~5 C' ~

, Y( b( y! B7 R9 ]' f) T9 p0 I                Access数据库引擎确实支持CHECK约束,但是不能从Access中的查询设计器中执行创建约束的DDL。必须使用VBA代码和ADO连接创建它们,如下所示:: |' f) a- C+ G
Option Compare Database; _* t( [6 |2 z3 _! ]* k9 O
Option Explicit* e9 c! `8 a% C+ f. S
Public Sub AddCheckConstraint()
( q  W9 n& Z4 ]7 b( s* M% S    Dim strSql As String
2 L* x2 d8 W4 u    strSql = _
* I+ Y/ v' F& a            "ALTER TABLE LEVERANCIER" & vbNewLine & _
8 j5 y( d* O- i% P            vbTab & "DROP CONSTRAINT chk_postcode;"
7 M$ {3 N. E: f# N: Y    On Error Resume Next
7 S+ `2 ]& V4 r5 o- n$ ~    CurrentProject.Connection.Execute strSql
- d& h& e2 s! J1 N8 B) Q    On Error GoTo 0. D5 ^# `  G) t6 Y) \: h  _
    strSql = _' z6 N0 U2 G4 L; _# D. [
            "ALTER TABLE LEVERANCIER" & vbNewLine & _. V' c9 {' W8 {( r
            vbTab & "ADD CONSTRAINT chk_postcode" & vbNewLine & _
+ {- x) w$ u& c0 K3 ^            vbTab & "CHECK (" & vbNewLine & _3 t- `) _8 ^4 a1 y
            vbTab & vbTab & "NOT EXISTS (" & vbNewLine & _
% I) V' Q) @( y" p            vbTab & vbTab & vbTab & "SELECT levnr, postcode " & vbNewLine & _# J+ k$ [, h* z2 ~) {
            vbTab & vbTab & vbTab & "FROM LEVERANCIER " & vbNewLine & _5 M& x& ?" v5 X  g4 |5 A" C
            vbTab & vbTab & vbTab & "WHERE Left(postcode, 4) = '5050' OR Woonplaats = 'Amsterdam' " & vbNewLine & _
3 M) I2 I" l. w1 Y/ _8 s. E            vbTab & vbTab & ")" & vbNewLine & _
( a& M0 `/ @* ^0 o, C% @4 c2 i            vbTab & ");"/ r2 U5 `6 H7 t# p; g7 S
    CurrentProject.Connection.Execute strSql$ ^& _) c6 d( ]8 G
End Sub
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则