プロが教えるわが家の防犯対策術!

Access97で使用しているデータベースに、
スクリプトでテーブルを作成する必要が出てきたので、
作成してみたのですが、プロパティで値要求を「はい」に設定しているにも関わらず、
設定する事が出来ませんでした。

設定の仕方が悪いのでしょうか?
下記にサンプルソースを上げました。

教えて頂けると助かります。
よろしくお願い致します。
--------------------------------------
Option Explicit

'データベースパス
Dim strDBPath
Dim strDBName
strDBName = "db1.mdb"
Dim strDBFullPath 'ファイルが存在する場所
strDBFullPath = Replace(WScript.ScriptFullName,WScript.ScriptName, "")
'FileSystemObject
Dim objFS
'SQL文
Dim strSQL
'テーブル名
Const strTBL = "テスト"
'ADOX用定義
Const adBoolean = 11 'ブール値型

Const adColFixed = 1 '値要求 はい
Const adColNullable = 2 '値要求 いいえ

Dim objCat
Dim objTbl
Dim objCol

'ADOオブジェクトを作成します
Set objCat = WScript.CreateObject("ADOX.Catalog")
Set objTbl = WScript.CreateObject("ADOX.Table")

Dim strJoin
strJoin = ""
strJoin = strJoin & "Provider=Microsoft.Jet.OLEDB.4.0;"
strJoin = strJoin & "Data Source=" & strDBFullPath & strDBName & ";"
strJoin = strJoin & "Jet OLEDB:Engine Type=5;"

objCat.ActiveConnection = strJoin
'テーブル名を定義します
objTbl.Name = strTBL
objCat.Tables.Append objTbl

'■列の設定
'フラグ Yes/No型 はい -
Set objCol = WScript.CreateObject("ADOX.Column")
With objCol
' フィールド名
.Name = "フラグ"
' データ型
.Type = adBoolean
' 値要求 はい
.Attributes = adColFixed
End With
objCat.Tables(strTBL).Columns.Append objCol
Set objCol = Nothing

Set objTbl = Nothing
Set objCat = Nothing

A 回答 (2件)

97の環境がありませんので、実験していませんが、


ADOでコネクションを開き、
strSQL = CON.Execute "ALTER TABLE TABLE2 ALTER COLUMN FIELD1 TEXT(30) NOT NULL"
のようなSQLを発行することによって、「値要求」を「はい」にすることはできます。
既に存在しているデータに制約に違反するものがある場合は、エラーが起きて実行できなかったと思います。
ただし上記SQLをNULLに変えても、NULL値禁止制約は解除されません。(逆向きの操作はできません。)

もひとつ別情報としては、CREATE TABLE の CONSTRAINTでは、NULL値禁止制約を設定することはできません。

(ソースは見つけられません。)

昔、この件で悩んだ事があったような、なかったような・・・

(mdbを)ご利用の際は計画的に!

この回答への補足

ありがとうございます。

調査してみた結果、
Alter Table..Alter Column構文がサポートされたのは
Access2000以降の為、
Access97ではサポートされていないようです。

補足日時:2009/04/03 10:09
    • good
    • 0
この回答へのお礼

解決致しました。

具体的にはどうしたかというと、
テーブル作成後に、「ALTER TABLE テスト ADD フラグ2 YESNO NOT NULL;」のSQLを発行して、値要求「はい」の項目を追加致しました。

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

お礼日時:2009/04/03 11:42

ANo1です。


「strSQL =」 はいりませんね。 
すみません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!