FAQ
テーブルの新規作成

ナレッジ番号:2905 | 登録日:2023/05/29 | 更新日:2023/12/28

概要

既存のワークスペースに対して新規にテーブルを作成する方法を示します。テーブルは、IFeatureWorkspace::CreateTable メソッドを使用します。CreateTable メソッドの引数には、以下の引数を指定します。

  • 第 1 引数: テーブル名
  • 第 2 引数:フィールドのコレクション(Fields オブジェクト)
  • 第 3 引数:CLSID(ジオデータベースの振る舞いを指定)
  • 第 4 引数:EXTCLSID(カスタムな振る舞いを実装する場合に使用)
  • 第 5 引数:ArcSDE コンフィグレーション キーワード

ジオデータベースのテーブルを新規作成する場合、CreateTable メソッドの第3引数に UID オブジェクトをセットし、ジオデータベースのテーブルとして正しく振る舞うための設定が必用です。シェープファイルの場合は null (Nothing) を指定します。

テーブルの作成には、フィールドの定義が必要です。フィールドは、Field クラスを使用します。個々に作成した Field オブジェクトはフィールドのコレクションである Fields オブジェクトにセットして第 2 引数に渡します。

フィールドには特殊なフィールドがあります。

OBJECTID フィールド

レコードがユニークであることを保証するためのフィールドです。Field オブジェクトを作成する際、IFieldEdit::FieldType プロパティに esriFieldType.esriFieldTypeOID 定数を指定します。ジオデータベースではないテーブル、たとえば DBF ファイルにはこのフィールドは不要です。

サンプルコード

//UID オブジェクト
IUID pUID = new UIDClass();
pUID.Value = "esriGeoDatabase.Object";

//フィールド コレクション
IFieldsEdit pFieldsEdit = new FieldsClass();

//フィールド
IFieldEdit pFieldEdit;

//OBJECTID フィールド
//ジオデータベースのフィーチャクラスを作成する場合は必須、シェープファイルの場合は不要
pFieldEdit = new FieldClass();
pFieldEdit.Name_2 = "OBJECTID";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
pFieldsEdit.AddField(pFieldEdit);

pFieldEdit = new FieldClass();
pFieldEdit.Name_2 = "SHAPE";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
pFieldsEdit.AddField(pFieldEdit);


//その他のフィールド
pFieldEdit = new FieldClass();
pFieldEdit.Name_2 = "ROADNAME";                          //フィールド名
pFieldEdit.AliasName_2 = "道路名";                       //フィールド エイリアス名
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;   //フィールドのタイプ(文字型)
pFieldEdit.Length_2 = 16;                                //フィールド長
pFieldEdit.IsNullable_2 = true ;                         //NULL 値を許可
pFieldsEdit.AddField(pFieldEdit);

//既存ワークスペースへのアクセス
IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;        //既存ワークスペースを取得

//テーブルの新規作成
ITable pTable = pFeatureWorkspace.CreateTable("道路", (IFields)pFieldEdit, pUID, null, "");
'UID オブジェクト
Dim pUID As IUID =  new UIDClass();
pUID.Value = "esriGeoDatabase.Object"

'フィールド コレクション
Dim pFieldsEdit As IFieldsEdit = New FieldsClass()

'フィールド
Dim pFieldEdit As IFieldEdit

'OID フィールド
'ジオデータベースのフィーチャクラスを作成する場合は必須、シェープファイルの場合は不要
pFieldEdit = New FieldClass()
pFieldEdit.Name_2 = "OBJECTID"
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID
pFieldsEdit.AddField(pFieldEdit)

pFieldEdit = New FieldClass()
pFieldEdit.Name_2 = "SHAPE"
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry
pFieldsEdit.AddField(pFieldEdit)

'その他のフィールド
pFieldEdit = New FieldClass()
pFieldEdit.Name_2 = "ROADNAME"                          'フィールド名
pFieldEdit.AliasName_2 = "道路名"                       'フィールド エイリアス名
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString   'フィールドのタイプ(文字型)
pFieldEdit.Length_2 = 16                                'フィールド長
pFieldEdit.IsNullable_2 = True                          'NULL 値を許可
pFieldsEdit.AddField(pFieldEdit)

'既存ワークスペースへのアクセス
Dim pFeatureWorkspace As IFeatureWorkspace = CType(pWorkspace, IFeatureWorkspace) 'ワークスペースを取得

'テーブルの新規作成
Dim pTable As ITable = pFeatureWorkspace.CreateTable("道路", CType(pFieldEdit, IField), pUID, Nothing, "")

メタデータ

種類

製品