質問

アクセス (ジェット?) テーブルにチェック制約を作成しようとしています。

したがって、アクセスで.mdbファイルを開き、クエリに移動します - >デザインビューでクエリを作成し、ESCを入力し、メニュー - > [ビュー - >クエリとタイプタイプ

テーブルXを作成します(番号、チェック(A> 20))

しかし、アクセスは「フィールド定義の構文エラー」があると考えます。しかし、私はそうは思いません。したがって、私の質問:アクセスを使用してチェック制約を作成することは可能ですか。もしそうなら:どうやって。

さらに、GUI ではなく dao/vba を使用して制約を作成したいと考えています。それは可能ですか?

そして最後に、少し関連したことを述べます。Access に SQL ステートメントを入力するにはどうすればよいですか。それを行うためにクエリ -> デザインビュー -> クエリ -> ビュールートを使用する必要があるとは想像できません。私は非常に気に入っている Oracle の SQL*Plus に慣れていますが、アクセスに関しても同様のものがあることを願っています。

入力reneをありがとう

役に立ちましたか?

解決

ここにいくつかのメモがあります。

Oracle のパススルー クエリを作成できます (メニューの [クエリ] > [SQL 固有] > [パススルー] を選択します)。

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 による制約。[中級 Microsoft Jet SQL for Access 2000](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 * Plusのない無... 本物のSQL Serverのすべての利点とし、フロントのみ、アクセスを使用する

- あなたは常にデータソースとしてSQL Expressを使用することができます。

Accessでこれを行うには、まず ANSIへのインターフェースを開く必要があります-92クエリモードに。私はあなたのSQLのDDLコードをテストしてみた:それが正常に動作し、型FLOAT(ダブル)の列を作成します。

は、この使用してDAOを行うことはできませんが、あなたはADOを使用することができます。かいつまん:アクセスチームはADOを優遇したところCHECK制約は、Jet 4.0の時代にエンジンに導入しました。 Access2007からの影響で、アクセスチームはDAOを有利に戻っているが、DAOでのJet 4.0の「穴」をプラグインする至っていません。だから、Jet 4.0の-onlyの機能の大半を(圧縮可能なデータ型は、固定長テキストデータ型、高速な外部キーなど)を使用するには、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) )
は、あなたでは、単にアクセスコマンドラインプロンプトを取得するには、Ctrl-Gを強打し、あなたがして入力することができ、クエリビルダでSQLを保存する必要があり、ちょうどSQLで入力したくありませんP>
currentproject.Connection.Execute "CREATE TABLE
    z1(id int IDENTITY , FirstName CHAR, LastName CHAR, SSN INTEGER ,
    check (id < 20),
    constraint Mypk primary key (id) )"

上記の1行に入力されます。あなたが望むのであれば、あなたはコマンドラインプロンプトを使用することができます..

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top