LoginSignup
0
0

More than 3 years have passed since last update.

発掘 Jet データベースエンジンに対して common Data Definition Language (DDL) SQL ステートメントを使用する方法

Posted at

発掘する趣旨

https://docs.microsoft.com/ja-jp/office/troubleshoot/access/how-to-use-common-ddl-sql-statements
9月30日まで公開されていたらしいのだが、突如として削除されて閲覧できない。
https://support.microsoft.com/ja-jp/help/180841/how-to-use-common-data-definition-language-ddl-sql-statements-for-the
ところが同趣旨のものが上記のURLに上がっている。しかし、一部のコードはコード枠として囲まれていない。

微妙に異なる概要

さらに概要が

この記事では、Microsoft Jet データベースエンジンの一般的な DDL (データ定義言語) SQL ステートメントの一部について説明します。

以前は

この記事では、Microsoft Jet データベースエンジンのいくつかの一般的な DDL (データ定義言語) SQL ステートメントについて説明します。

とこのように微妙に表現が変わっている。自動翻訳が原因か。それとも意味があるのか謎である

差異が不明

なぜそういう扱いをするのかが不明である。
この変化以外に差があるのかが不明である。

削除されたページにヒットしてしまう

さらに検索すると削除したページがヒットしてしまう。もし上記のURLで見つからない場合はここを見つけて新しいサイトを見てほしい。

重要なページ

このページには重要な記載がある。

Microsoft Access DDL SQL ステートメントを使用して、"オートナンバーレプリケーション"、"ハイパーリンク"、または "Lookup" 型フィールドを作成することはできません。

つまりアクションクエリ、SQLによって、上記の3つのタイプのフィールドはCreateTableなどではできないという根拠が明瞭に示されている。
ただし、オートナンバーレプリケーションはあまり使われない。またハイパーリンクはMEMO(LONGERTEXT)で作り、あとから属性を加える。データ型の変更はSQLではできないが、手動、あるいはAccessのVBAで可能である。またルックアップ型はYesNo,Bit型であるため、それを作ってルックアップ属性を付与すると良い。

Jet データベースエンジンに対して common Data Definition Language (DDL) SQL ステートメントを使用する方法

2020/09/30

適用対象:

Access for Office 365, Access 2019, Access 2016, Access 2013, Access 2010, Access 2007, Access 2003
元の KB 番号: 180841

概要

この記事では、Microsoft Jet データベースエンジンのいくつかの一般的な DDL (データ定義言語) SQL ステートメントについて説明します。

詳細情報

Microsoft Jet は、Microsoft Access データベースファイル内のテーブル、インデックス、およびリレーションシップを作成、変更、および削除するために使用できる、データ定義言語 SQL ステートメントの完全なセットを提供します。 この DDL を MFC データベースクラスと共に使用して、Access データベースを操作できます。 この記事では、この種類の SQL ステートメントの一般的な例を示します。

この記事では、次の構文を使用して DDL ステートメントを1つ実行できます。

// Open database file.
CDaoDatabase db;
db.Open(_T("C:\\MyDatabase.mdb"));

// Set strSQL to desired DDL statement.
CString strSQL;
strSQL = _T("CREATE TABLE Simple (ID long)");

// Execute DDL statement.
try {
  db.Execute(strSQL, dbFailOnError);
} catch (CDaoException * e) {
  // Display errors (simple example).
  AfxMessageBox(e -> m_pErrorInfo -> m_strDescription,
    MB_ICONEXCLAMATION);
  e -> Delete();
}

この記事では、次の構文を使用して DDL ステートメントを実行することができます (MFC ODBC クラスを使用)。


// Open database file.
CDatabase db;
db.OpenEx(_T("DSN=MyAccessDB"), CDatabase::noOdbcDialog);

// Set strSQL to desired DDL statement.
CString strSQL;
strSQL = _T("CREATE TABLE Simple (ID long)");

// Execute DDL statement.
try {
  db.ExecuteSQL(strSQL);
} catch (CDBException * e) {
  // Display errors (simple example).
  AfxMessageBox(e -> m_strError,
    MB_ICONEXCLAMATION);
  e -> Delete();
}

CREATE TABLE DDL ステートメント

次の create table ステートメントは、Microsoft Access データ型で使用可能なすべての DDL を使用してテストテーブルを作成します。

CREATE TABLE TestAllTypes ( MyText TEXT(50), MyMemo MEMO, MyByte BYTE, MyInteger INTEGER, MyLong LONG, MyAutoNumber COUNTER, MySingle SINGLE, MyDouble DOUBLE, MyCurrency CURRENCY, MyReplicaID GUID, MyDateTime DATETIME, MyYesNo YESNO, MyOleObject LONGBINARY, MyBinary BINARY(50))

注意

Microsoft Access DDL SQL ステートメントを使用して、"オートナンバーレプリケーション"、"ハイパーリンク"、または "Lookup" 型フィールドを作成することはできません。 これらのフィールドの種類は、ネイティブの Jet フィールド型ではなく、Microsoft Access のユーザーインターフェイスでのみ作成および使用できます。 上記の MyBinary フィールドは、Microsoft Access ユーザーインターフェイスを介して作成することはできませんが、SQL DDL ステートメントを使用して作成できる特殊な固定長のバイナリフィールドです。

単一の DDL ステートメントを使用して、単一フィールドの主キーを持つテーブルを作成できます。 次のステートメントは、PK_MyID という名前の MyID フィールドに主キーを持つ TestPrimaryKey という名前のテーブルを作成します。

CREATE TABLE TestPrimaryKey ( MyID LONG CONSTRAINT PK_MyID PRIMARY KEY, FirstName TEXT(20), LastName TEXT(20))

ALTER TABLE DDL ステートメント

Microsoft Access DDL は、ALTER TABLE DDL ステートメントをサポートしています。 このステートメントは、既存のテーブルに対してフィールドを削除または追加する必要がある場合に便利です。

注意

このステートメントでは、Access のテーブル内の既存のフィールド (たとえば、フィールドのデータ型を変更する) を変更することはできません。

次の DDL は、テーブル TooManyFields から、MoreInfo という名前の列を削除します。

ALTER TABLE TooManyFields DROP COLUMN MoreInfo

次の DDL ステートメントでは、NotEnoughFields という名前のテーブルに、ExtraInfo という名前の列を追加します。

ALTER TABLE NotEnoughFields ADD COLUMN ExtraInfo Text(255)

ALTER TABLE ステートメントを使用して、2つのテーブル間のリレーションシップを作成することもできます。

次の SQL ステートメントでは、2つのテーブル (CarsとColors) を作成してから、[ColorId] フィールドの "car テーブル" と "Colors/色" テーブルの間にリレーションシップを作成します (各 car には1つの色しか設定できません)。

注意

3つの個別の DDL ステートメントがあります。これは、一度に1つずつ実行する必要があります。

CREATE TABLE Cars ( CarID LONG, CarName TEXT(50), ColorID LONG ) CREATE TABLE Colors ( ColorID LONG CONSTRAINT PK_Colors PRIMARY KEY, ColorName TEXT(50)) ALTER TABLE Cars ADD CONSTRAINT MyColorIDRelationship FOREIGN KEY (ColorID) REFERENCES Colors (ColorID)

編注 Accessは1つのアクションクエリで1つのCreateTableしか実行できない。

このため次の3つに分割しなければならず、末尾にセミコロンが必要となる。

CREATE TABLE Cars ( CarID LONG, CarName TEXT(50), ColorID LONG );
CREATE TABLE Colors ( ColorID LONG CONSTRAINT PK_Colors PRIMARY KEY, ColorName TEXT(50));
ALTER TABLE Cars ADD CONSTRAINT MyColorIDRelationship FOREIGN KEY (ColorID) REFERENCES Colors (ColorID);

3つのアクションクエリを作成し、上から順に実行する。原文は末尾のセミコロンがないが、実際は必要なので注意。原文がなぜ3つまとめているのか正直趣旨を測りかねる。

注意

[連鎖更新] または [連鎖削除] を使用して、DDL を使用して作成されたリレーションシップを指定することはできません。 これらの機能は、Microsoft DAO (データアクセスオブジェクト) インターフェイスをコード経由で使用する場合、または Microsoft Access ユーザーインターフェイスを使用する場合にのみ使用できます。

CREATE INDEX DDL ステートメント

CREATE INDEX DDL ステートメントは、既存のテーブルに追加のインデックスを作成するために使用されます。

次の DDL ステートメントでは、MyStateIndex という名前の一意でない1つの昇順のインデックスが、テーブルのアドレスのフィールドの状態に追加されます。

CREATE INDEX MyStateIndex
ON Addresses ( State ASC )

次の DDL ステートメントでは、MyFullNameIndex という名前の2つのフィールドの一意の昇順のインデックスが、テーブルのアドレスの FirstName フィールドと LastName に追加されます。

CREATE UNIQUE INDEX MyFullNameIndex
ON Addresses ( FirstName ASC, LastName ASC )

CREATE TABLE DDL ステートメントを使用して、NULL を許可しない追加の制約を指定することもできます。 NULL を許可しないことを指定すると、null 値を持つフィールドをインデックス内の任意の列に挿入できなくなります。

次の DDL ステートメントは、表 HRInfo のフィールド Salary に MySalaryIndex という名前の単一フィールドの一意な降順のインデックスを作成します。

CREATE UNIQUE INDEX MySalaryIndex
ON HRInfo ( Salary DESC ) WITH DISALLOW NULL

このインデックスを使用すると、すべてのレコードに Salary フィールドの値を設定する必要があります。

DROP DDL ステートメント

DROP DDL ステートメントを使用して、既存のテーブルまたはインデックスを削除します。
次の DDL ステートメントは、TempTable という名前のテーブルを完全に削除します。

DROP TABLE TempTable

次の DDL ステートメントは、テーブル OverIndexedTable 上の Myallowused Index という名前のインデックスを完全に削除します。

DROP INDEX MyUnusedIndex ON OverIndexedTable

関連情報

Microsoft Jet DDL 構文の詳細については、「Microsoft Jet データベースエンジンプログラマーズガイド、Second Edition、第3章、「データ定義と整合性」を参照してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0