- ベストアンサー
ADOX Append Null許可フィールド作成
- Null不許可で追加したフィールドをNull許可にする方法について
- エラーが発生した際には、各OLE DBの状態の値を確認する必要がある
- フィールドの追加にはADOXのCatalogオブジェクトを使用する
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
一応、Accessでの質問ということで。 質問について少し実験をしてみました。このADOXをAccessから なのかあるいはExcelなど他の環境から使うのかわかりませんが、 結果から申し上げますと、ADOXを使う場合は、 (1) 新規にテーブルを作るときに先にテーブルを作成し後から フィールドを設定するようなコードを組むと「空文字の許可」 を「はい」にする、「値要求」をいいえにするなどデフォルト の設定を変更することはできない。 この場合は、先にフィールドの設計をして、その後にテーブルを 作成する、という手順を踏む。 (2) 既存のテーブルにフィールドを追加するときに、フィールド の属性も変更しようとしてもフィールドの属性を設定し、 それからテーブルにフィールドを追加してもデフォルト の設定を変更できない。 この場合、どうしてもコードで属性を変更したいというので あれば、ADOXを使うのは諦めてSQLでデータ定義クエリを作成 して、SQL文を実行する。たとえば、 strSQL = "alter table テーブル名 alter column フィールド名 text(255) constraint NantokaKantoka NOT NULL" DoCmd.RunSQL strSQL のように。SQL文中のNantokaKantokaは制約名で適当に設定。 ただし、「値要求」を「いいえ」から「はい」にはできるが その逆、すなわち質問の変更はできない。 あるいは、DAOのTableDefオブジェクトを使用し、TableDefの Fieldオブジェクトのプロパティから変更する。この方法ならば ほぼ望むことが実現される。 たとえば、現在開いているファイルのとき、 Dim db As DAO.Database Dim tdf As DAO.TableDef Set db = CurrentDb Set tdf = db.TableDefs("既存のテーブル名") Dim fld As DAO.Field Set fld = tdf.Fields("既存のフィールド名") '値要求を「いいえ」に fld.Required = False '空文字の許可を「はい」に fld.AllowZeroLength = True のように。 というのが、いろいろ試してみた結論です。ひょっとしたら ADOXでの方法があるのかもしれませんが、いろいろ検索 しても出てきませんでした。
お礼
ありがとうございます。 なかなか回答をもらえなかったため、諦めてログインもしてませんでした。 SQLで実行して確認させていただきます。 結果はまた、報告させていただきます。
補足
確認できました。 DAOを使うと既存テーブルの属性変更ができるみたいですね。 ありがとうございました。