문제

Access (Jet?) 테이블에서 점검 제약 조건을 작성하려고합니다.

따라서 액세스가있는 .mdb 파일을 열고 쿼리로 이동-> 디자인보기에서 쿼리 작성, ESC를 입력 한 다음 메뉴->보기-> 쿼리 및 마지막으로 입력합니다.

테이블 X 생성 (숫자, 확인 (A> 20))

그러나 Access는 "필드 정의의 구문 오류"가 있다고 생각합니다. 그러나 나는 그렇게 생각하지 않습니다. 따라서 내 질문 : 액세스로 점검 제약을 만들 수 있습니까? 그렇다면 : 어떻게.

또한 GUI가 아닌 DAO/VBA로 제약 조건을 만들고 싶습니다. 그게 가능합니까?

마지막으로, 약간 관련된 참고 사항 : SQL 문을 액세스하는 방법은 어떻게됩니까? 나는 쿼리-> 디자인보기-> 쿼리-> 경로를 사용하여 경로를 사용해야한다고 상상할 수 없습니다. 나는 Oracle의 SQL*Plus에 익숙합니다. 나는 매우 좋아하며, 액세스 할 때도 비슷한 것이 있기를 바랍니다.

입력 Rene에 감사드립니다

도움이 되었습니까?

해결책

다음은 몇 가지 메모입니다.

Oracle 용 Pass-Strough 쿼리를 만들 수 있습니다 (메뉴 "쿼리"선택 ">"SQL 특정 ">"Pass-Strough ").

Access 2003 이후 SQL Server 호환 구문 (ANSI 92)을 선택할 수 있습니다.http://office.microsoft.com/en-us/access/ha010345621033.aspx)

VBA / DAO와의 검증 규칙

''Reference: Microsoft DAO x.x Object Library

Dim tdf As TableDef
Dim db As Database

Set db = CurrentDb

Set tdf = db.TableDefs("Table1")

tdf.Fields("aDouble").ValidationRule = "<10"
tdf.Fields("aDouble").ValidationText = "Must be less than 10"

ADO / VBA를 사용한 제약. [Access 2000의 중간 Microsoft Jet SQL 참조] (http://msdn.microsoft.com/en-us/library/aa140015(Office.10).aspx)

''Reference: Microsoft ADO Ext. x.x for DDL and Security

Dim cn As ADODB.Connection 'For action queries
Dim rs As ADODB.Recordset  'For select queries
Dim s As String
Dim RecordsAffected As Long

Set cn = CurrentProject.Connection

''You can store sql in a table
s = DLookup("SQLText", "sysSQL", "ObjectName='q1'")
''Result: CREATE TABLE tblCreditLimit (LIMIT DOUBLE)
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

''You can run queries from VBA
s = "INSERT INTO tblCreditLimit VALUES (100)"
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

s = "CREATE TABLE tblCustomers (CustomerID COUNTER, CustomerName Text(50))"
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

s = "INSERT INTO tblCustomers VALUES (1, 'ABC Co')"
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

s = "ALTER TABLE tblCustomers " _
   & "ADD COLUMN CustomerLimit DOUBLE"
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

''You can add contraints using ADO like so:
s = "ALTER TABLE tblCustomers " _
   & "ADD CONSTRAINT LimitRule " _
   & "CHECK (CustomerLimit <= (SELECT LIMIT " _
   & "FROM tblCreditLimit))"
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

s = "UPDATE tblCustomers " _
   & "SET CustomerLimit = 200 " _
   & "WHERE CustomerID = 1"
''Error occurs here
cn.Execute s, RecordsAffected

s = "UPDATE tblCustomers " _
   & "SET CustomerLimit = 90 " _
   & "WHERE CustomerID = 1"
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

''Clean up
''You cannot do this through the database window,
''because of the constraint.
s = "ALTER TABLE tblCustomers DROP CONSTRAINT LimitRule "
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

s = "DROP TABLE tblCustomers "
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

s = "DROP TABLE tblCreditLimit "
cn.Execute s, RecordsAffected
Debug.Print RecordsAffected

다른 팁

열에 검증 규칙이 있습니다. 액세스에 VB를 사용할 수 있습니다. 여기에 SQL*플러스가 없습니다 ... 항상 SQL Express를 데이터 소스로 사용할 수 있습니다. 실제 SQL Server의 모든 이점을 가지고 액세스를 전면으로 만 사용할 수 있습니다.

액세스로이를 수행하려면 먼저 인터페이스를 열어야합니다. ANSI-92 쿼리 모드. SQL DDL 코드를 테스트했습니다. 잘 작동하고 유형 열을 만듭니다. FLOAT (더블).

DAO를 사용 하여이 작업을 수행 할 수는 없지만 Ado를 사용할 수 있습니다. 짧은 이야기 : CHECK 액세스 팀이 ADO를 선호 할 때 제트 4.0 시대의 엔진에 제약이 도입되었습니다. Access2007의 발효로 액세스 팀은 DAO를 선호하는 것으로 돌아 왔지만 아직 DAO에서 Jet 4.0 '구멍'을 막지 못했습니다. 따라서 대부분의 Jet 4.0 전용 기능 (압축 가능한 데이터 유형, 고정 길이 텍스트 데이터 유형, 빠른 외국 키 등)의 경우 ADO를 사용해야합니다.

데이터베이스를 SQL ANSI 호환으로 설정하지 않으면 쿼리 빌더에서 표준 ANSI를 사용할 수 없습니다. 이 설정을 변경하면 쿼리 빌더에서 SQL을 사용할 수 있습니다. 그러나 기존 데이터베이스 의이 설정을 변경하는 것은 권장하지 않습니다.

그렇게하면 다음을 입력 할 수 있습니다.

CREATE TABLE z1 
       (id int IDENTITY , FirstName CHAR, LastName CHAR, SSN INTEGER ,
check (id < 20),  
constraint Mypk primary key (id) )

Query Builder에 SQL을 저장할 필요가 없으며 SQL을 입력 한 다음 CTRL-G를 whack하여 Access Command Line 프롬프트를 얻은 다음 다음을 입력 할 수 있습니다.

currentproject.Connection.Execute "CREATE TABLE
    z1(id int IDENTITY , FirstName CHAR, LastName CHAR, SSN INTEGER ,
    check (id < 20),
    constraint Mypk primary key (id) )"

위는 한 줄로 입력됩니다. 따라서 원하는 경우 명령 줄 프롬프트를 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top