次の方法で共有

特定フィールドに既定値を設定したい

Anonymous
2014-10-15T06:21:21+00:00

お世話になります。

VBAより新規で作成したテーブルのYes/No型フィールドに、既定値を

設定したいのですがどのようにすればよいのでしょうか。

VBAにてデータ定義クエリを実行し、以下のテーブルを作成しております。

 ID  オートナンバー

 商品 テキスト型(255)

 削除フラグ Yes/No型

この「削除フラグ」の既定値としてFalse(No?)を設定したく。

調べてみたところ、TableDefやALTER TABLEを使うことにより設定できるよう

なのですが、うまくいきません。。

ご教授の程、宜しくお願い致します。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2014-10-15T07:04:16+00:00

> VBAより新規で作成したテーブルのYes/No型フィールドに、既定値を

> 設定したいのですがどのようにすればよいのでしょうか。

実際にどのようなコードによって

テーブルを新規作成されたのでしょうか。

> この「削除フラグ」の既定値としてFalse(No?)を設定したく

例えば DAO の CreateTableDef メソッドや

CreateField メソッドを使用されているならば、

CreateField メソッドによって新規作成された

DAO.Field オブジェクトの DefaultValue プロパティに

False を設定なさればよろしいかと。

> VBAにてデータ定義クエリを実行し、以下のテーブルを作成しております。

なお、既存のフィールドの DefaultValue プロパティを

設定する場合は次のようなコードを実行します。


Dim db As DAO.Database

Dim tdf As DAO.TableDef

Dim fld As DAO.Field

Set db = CurrentDb

Set tdf = db.TableDefs("テーブル名")

Set fld = tdf.Fields("削除フラグ")

fld.DefaultValue = False

Set fld = Nothing

Set tdf = Nothing

Set db = Nothing


> ALTER TABLE

この場合はフィールド定義の変更を行なう際に

DEFAULT キーワードを用いてフィールドの既定値を指定することになりますが、

DEFAULT キーワードを含む ALTER TABLE ステートメントを実行するには

ADO を使用する必要があります。

(クエリのSQLビューやDAOからではエラーが発生します)


Dim cn As ADODB.Connection

Dim strSQL As String

Set cn = CurrentProject.Connection

strSQL = "ALTER TABLE [テーブル名] ALTER COLUMN [削除フラグ] BIT DEFAULT False"

cn.Execute strSQL

Set cn = Nothing


この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

5 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2014-10-15T10:40:36+00:00

    > フォーム上でボタンが押されたときにテーブルを作成します。

    > ボタンが押されたら、SQL文(CREATE TABLE )を変数に代入し、

    > DoCmd.RunSQL 変数 を実行してます。

    その場合、DEFAULT キーワードを含む DDL を実行することは出来ません。

    あくまで DoCmd オブジェクトの RunSQL メソッドにより

    DDL を実行する手法を採られるならば、

    既に解決された通りのような方法により、

    テーブルが新規作成された後で

    フィールドの既定値を設定する以外の方法はありません。

    ADOを使用して DDL を実行しテーブルを新規作成する場合は

    次のようなコードを実行なさればよろしいでしょう。


    Dim cn As ADODB.Connection

    Dim strSQL As String

    Set cn = CurrentProject.Connection

    strSQL = "CREATE TABLE 商品テーブル (ID AUTOINCREMENT CONSTRAINT PrimaryKey PRIMARY KEY, 商品 TEXT(255), 削除フラグ yesno DEFAULT False)"

    cn.Execute strSQL

    Set cn = Nothing

    Application.RefreshDatabaseWindow


    もしフィールドの既定値だけでなく、[書式]や[説明]といった

    Access 固有のプロパティまで設定する必要がある場合は

    それこそ SQL では設定不可能であるため

    DAO または ADOX を使用することになるでしょう。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2014-10-15T09:25:32+00:00

    フォーム上でボタンが押されたときにテーブルを作成します。

    ボタンが押されたら、SQL文(CREATE TABLE )を変数に代入し、DoCmd.RunSQL 変数

    を実行してます。

    ・・という回答でよろしかったでしょうか。

    勉強不足で大変恐縮ですが、オブジェクトやメソッド等あまり理解せずに

    作成しているところです。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2014-10-15T07:34:50+00:00

    > VBAより下記SQLを実行して作成しております。

    >

    > "CREATE TABLE 商品テーブル (ID AUTOINCREMENT CONSTRAINT PrimaryKey PRIMARY KEY, 商品 TEXT(255), 削除フラグ yesno)"

    問題なのは、上記のステートメントを

    どのオブジェクトのどのメソッドにより実行しているか、

    ということです。

    CREATE TABLE ステートメントでも DEFAULT キーワードにより

    フィールドの既定値を指定することが出来ますが、

    既に申し上げた通り ADO を使用してステートメントを実行する必要があります。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2014-10-15T07:26:04+00:00

    sk.exeさま

    いつもご回答ありがとうございます。

    >実際にどのようなコードによって

    >テーブルを新規作成されたのでしょうか。

    についてですが、言葉足らずですみません。

    VBAより下記SQLを実行して作成しております。

    "CREATE TABLE 商品テーブル (ID AUTOINCREMENT CONSTRAINT PrimaryKey PRIMARY KEY, 商品 TEXT(255), 削除フラグ yesno)"

    SQLでは既定値は指定できないようですので、いったんテーブルを

    作成した後に、削除フラグの箇所に対して既定値を設定すれば・・・

    と思った次第です。

    なお、教えて頂いたDefaultValueプロパティを設定する方法で

    既定値Falseを設定することが出来ました。

    大変勉強になりました。

    ありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません